使用互斥体防止程序多开技术
使用互斥体防止程序多开技术
学习完线程的同步函数. 互斥体的应用.那么我们可以使用互斥体进行放多开设置.
一丶编写思路.
在编写互斥体防止多开的时候.我们要查询下MSDN.看下互斥体的介绍.
看到互斥体MSDN返回值说的一段话.
If the function succeeds, the return value is a handle to the mutex object. If the named mutex object existed before the function call, the function returns a handle to the existing object and GetLastError returns ERROR_ALREADY_EXISTS. Otherwise, the caller created the mutex.
If the function fails, the return value is NULL. To get extended error information, call GetLastError
上面的英文意思是.如果函数成功.则返回互斥体的句柄.如果调用此函数.发现名字已经有了.表示这个函数在之前已经调用过了.所以则会返回 ERROR_ALREADY_EXISTS的宏. 这个宏的意思就是已经存在.
如果函数失败.则返回NULL. 返回的宏必须调用 GetlastError获取.
根据上面返回值的意思我们明白了. 这个函数如果调用过则会返回 已经存在的宏. 那么我们可以写程序来校验一下.
#include "stdafx.h" #include <Windows.h> //创建临界区结构 int main(int argc, char *argv[]) { //初始化临界区全局原子变量 HANDLE MutexHandle = CreateMutex(NULL, FALSE, TEXT("AAA")); //创建互斥体. 信号量为0. 有信号的状态.wait可以等待 DWORD ErrorCode = 0; ErrorCode = GetLastError(); if (ERROR_ALREADY_EXISTS == ErrorCode) { printf("对不起,程序已经启动一份了.这份即将关闭\r\n"); CloseHandle(MutexHandle); system("pause"); } if (NULL == MutexHandle) { return 0; //表示句柄获取失败 } for (size_t i = 0; i < 10; i++) { Sleep(1000); printf("当前程序运行中. EIP 位置 等于 %d \r\n", i); } system("pause"); return 0; }
我们打开同样的两个程序
一份提示正在执行.一份提示即将关闭.这个则是互斥体防止多开的原理.
当然有很多这样的方法.这个只是其中一种.
坚持两字,简单,轻便,但是真正的执行起来确实需要很长很长时间.当你把坚持两字当做你要走的路,那么你总会成功. 想学习,有问题请加群.群号:725864912(收费)群名称: 逆向学习小分队 群里有大量学习资源. 以及定期直播答疑.有一个良好的学习氛围. 涉及到外挂反外挂病毒 司法取证加解密 驱动过保护 VT 等技术,期待你的进入。
详情请点击链接查看置顶博客 https://www.cnblogs.com/iBinary/p/7572603.html
本文来自博客园,作者:iBinary,未经允许禁止转载 转载前可联系本人.对于爬虫人员来说如果发现保留起诉权力.https://www.cnblogs.com/iBinary/p/9574278.html
欢迎大家关注我的微信公众号.不定期的更新文章.更新技术. 关注公众号后请大家养成 不白嫖的习惯.欢迎大家赞赏. 也希望在看完公众号文章之后 不忘 点击 收藏 转发 以及点击在看功能. QQ群: