很巧妙的进程防杀方法[秋镇菜原创]
生活随笔
收集整理的這篇文章主要介紹了
很巧妙的进程防杀方法[秋镇菜原创]
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
剛剛學(xué)內(nèi)核對(duì)象,想寫(xiě)個(gè)可以防殺的進(jìn)程,但其他方法太高級(jí),
本菜鳥(niǎo)不感高攀,想了幾天,想到一個(gè)很本的辦法,不正確的
方還請(qǐng)高手指點(diǎn)一下.
程序運(yùn)行兩個(gè)事例,每個(gè)實(shí)例互相監(jiān)視另外的實(shí)例是否存在,
如果不存在,就運(yùn)行一個(gè).
代碼:
// 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;
}
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)
本菜鳥(niǎo)不感高攀,想了幾天,想到一個(gè)很本的辦法,不正確的
方還請(qǐng)高手指點(diǎn)一下.
程序運(yùn)行兩個(gè)事例,每個(gè)實(shí)例互相監(jiān)視另外的實(shí)例是否存在,
如果不存在,就運(yùn)行一個(gè).
代碼:
// 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;
}
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)
總結(jié)
以上是生活随笔為你收集整理的很巧妙的进程防杀方法[秋镇菜原创]的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 用VC写Assembly代码(6)--附
- 下一篇: oracle aced什么资质,ACOU