标签:for hand ssi 目的 att har pre rev ntp
// 单例2:事件。
/************************************************************************/
/*
HANDLE CreateEvent(
LPSECURITY_ATTRIBUTES lpEventAttributes,// 安全属性,如果为空的话表示句柄不能被子进程继承,大部分情况设置为NULL即可
BOOL bManualReset,// 复位方式,TRUE表示手动SetEvent复位,FALSE表示线程结束自动复位,一般FALSE就可以
BOOL bInitialState,// 初始状态,初始为有信号还是无信号状态
LPCTSTR lpName // 对象名称,是否命名,如果设置成NULL的话就达不到进程单例的目的了
);
*/
/************************************************************************/
CString strCurProcessName;
HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, 0, GetCurrentProcessId());
if (hProcess)
{
TCHAR wsz[MAX_PATH] = { 0 };
GetModuleFileNameEx(hProcess, 0, wsz, (MAX_PATH - 1) * sizeof(TCHAR));
strCurProcessName = wsz;
CloseHandle(hProcess);
}
if (strCurProcessName.GetLength())
{
strCurProcessName.Replace(_T("/"), _T("\\"));
strCurProcessName = strCurProcessName.Mid(1 + strCurProcessName.ReverseFind(_T(‘\\‘)));
HANDLE hSingleton = ::CreateEvent(0, 0, 1, strCurProcessName);
if (GetLastError() == ERROR_ALREADY_EXISTS)
{
TerminateProcess(GetCurrentProcess(), 0);
}
}
标签:for hand ssi 目的 att har pre rev ntp
原文地址:https://www.cnblogs.com/dailycode/p/12896622.html