很巧妙的程序防殺方法 秋鎮菜原創
阿新 • • 發佈:2018-11-12
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow
也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!
剛剛學核心物件,想寫個可以防殺的程序,但其他方法太高階,本菜鳥不感高攀,想了幾天,想到一個很本的辦法,不正確的
方還請高手指點一下.
程式執行兩個事例,每個例項互相監視另外的例項是否存在,
如果不存在,就執行一個.
程式碼:
// test_process.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include "tchar.h"
#include "iostream.h"
#include "windows.h"
LPCTSTR lpszMutex1 = _T("mutex1");
LPCTSTR lpszMutex2 = _T("mutex2");
DWORD WINAPI Thread1(LPARAM lParam);
DWORD WINAPI Thread2(LPARAM lParam);
int main(int argc, char* argv[])
{
HANDLE hMutex1 = CreateMutex(NULL, FALSE, lpszMutex1);
if (hMutex1 != NULL)
if (GetLastError() == ERROR_ALREADY_EXISTS)
{
CloseHandle(hMutex1);
cout << lpszMutex1 << " already exist." << endl;
HANDLE hMutex2 = CreateMutex(NULL, FALSE, lpszMutex2);
if (hMutex2 != NULL)
if (GetLastError() == ERROR_ALREADY_EXISTS)
{
cout << lpszMutex2 << " already exist." << endl;
return 1;
}
}
DWORD dwThreadId;
HANDLE hThread = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)Thread1,NULL,0,&dwThreadId);
CloseHandle(hThread);
while (1)
Sleep(1);
return 0;
}
DWORD WINAPI Thread1(LPARAM lParam)
{
HANDLE hMutex;
while (1)
{
hMutex = OpenMutex(MUTEX_ALL_ACCESS, TRUE, lpszMutex1);
if (! hMutex)
{
STARTUPINFO si = { sizeof STARTUPINFO };
PROCESS_INFORMATION pi;
TCHAR szBuf[MAX_PATH];
GetModuleFileName(GetModuleHandle(NULL), szBuf, MAX_PATH);
CreateProcess(szBuf, NULL, NULL, NULL, TRUE, CREATE_NEW_CONSOLE, NULL, NULL, &si, &pi);
CloseHandle(pi.hThread);
CloseHandle(pi.hProcess);
}
CloseHandle(hMutex);
hMutex = OpenMutex(MUTEX_ALL_ACCESS, TRUE, lpszMutex2);
if (! hMutex)
{
cout << "mutex 2 created." << endl;
STARTUPINFO si = { sizeof STARTUPINFO };
PROCESS_INFORMATION pi;
TCHAR szBuf[MAX_PATH];
GetModuleFileName(GetModuleHandle(NULL), szBuf, MAX_PATH);
CreateProcess(szBuf, NULL, NULL, NULL, TRUE, CREATE_NEW_CONSOLE, NULL, NULL, &si, &pi);
CloseHandle(pi.hThread);
CloseHandle(pi.hProcess);
}
CloseHandle(hMutex);
cout << "Thread ..." << endl;
Sleep(1);
}
return 1;
}