ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

第一章 运行单一实例

2021-12-01 21:58:12  阅读:142  来源: 互联网

标签:函数 对象 程序 第一章 互斥 实例 NULL 单一 运行


第一章 运行单一实例

前言

前言

运行过多的进程可能会造成c/s端通讯异常,而过多的危险程序进程也会增加暴露风险,所以说可以给程序加一个api,通过创建一个系统命名互斥对象来实现。又比如在自启维权操作时,可以保证马已经在运行的时候,不用再次运行payload加载部分,避免过多的操作造成暴露风险。

函数介绍

CreateMutex函数

创建或打开一个命名或未命名的互斥对象。

语法

HANDLE CreateMutexA(
  [in, optional] LPSECURITY_ATTRIBUTES lpMutexAttributes,
  [in]           BOOL                  bInitialOwner,
  [in, optional] LPCSTR                lpName
);

参数

[in, optional] lpMutexAttributes

指向SECURITY_ATTRIBUTES结构的指针 。如果此参数为NULL,则子进程不能继承句柄。

[in] bInitialOwner

如果此值为TRUE并且调用者创建了互斥锁,则调用线程将获得互斥锁对象的初始所有权。否则,调用线程不会获得互斥锁的所有权。

[in, optional] lpName

互斥对象的名称。

返回值

如果函数成功,则返回值是新创建的互斥对象的句柄。

如果函数失败,则返回值为NULL。要获取扩展错误信息,请调用GetLastError

如果互斥体是命名互斥体并且对象在此函数调用之前已存在,则返回值是现有对象的句柄,并且GetLastError函数返回ERROR_ALREADY_EXISTS

示例

代码

#include <iostream>
#include <Windows.h>

bool main()
{
	HANDLE hMutex = NULL;
	hMutex = ::CreateMutex(NULL, FALSE, "TEST");   
	if (hMutex)
	{
		if (ERROR_ALREADY_EXISTS == ::GetLastError())
		{
			MessageBox(NULL, "程序已在运行中", "提示", NULL);
			return TRUE;
		}
		MessageBox(NULL, "程序第一次运行中", "提示", NULL);
		return FALSE;
	}
}

测试

第一次执行:
image-20211119222147943
再次执行:
image-20211119222219035

原理学习

通常情况下,系统中的检测是相互独立的,每个进程都拥有自己的资源和地址空间。所以,同一个程序可以重复运行;但是,一些特殊情况下,程序在系统上只需要保存一个进程,所以有了互斥。

微软提供CreateMutex函数来创建或打开一个命名或未命名的互斥对象,程序每次运行的时候,通过判断系统中是否存在相同命名的互斥对象来确定程序是否已在运行中。

程序判断是通过CreateMutex函数创建一个*“TEST”的互斥对象,如果对象创建成功,获取GetLastError函数返回ERROR_ALREADY_EXISTS*,则证明*“TEST”*的互斥对象已存在,程序已在运行中;否则,程序第一次运行。

标签:函数,对象,程序,第一章,互斥,实例,NULL,单一,运行
来源: https://blog.csdn.net/qq_45491298/article/details/121665829

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有