특정 EXE 프로세스를 죽이기
등록자 : cpueblo (유광희), 2008-10-16
Intro
안녕하세요. cpueblo 입니다 ^^
CreateToolhelp32Snapshot 함수를 통하여 프로세스 목록의 Handle 을 얻은 후에
Process32First 를 이용하여 PE 정보를 얻습니다.
PE 정보에는 프로세스에 관련된 정보가 포함되어 있습니다.
typedef struct tagPROCESSENTRY32
{
DWORD dwSize;
DWORD cntUsage;
DWORD th32ProcessID; // this process
ULONG_PTR th32DefaultHeapID;
DWORD th32ModuleID; // associated exe
DWORD cntThreads;
DWORD th32ParentProcessID; // this process's parent process
LONG pcPriClassBase; // Base priority of process's threads
DWORD dwFlags;
CHAR szExeFile[MAX_PATH]; // Path
} PROCESSENTRY32;
소스
반드시 Tlhelp32.h 를 Include 하셔야 합니다
#include "Tlhelp32.h"
namespace cpueblo
{
void KillProcess(const char *EXEName)
{
HANDLE snapshot_handle = ::CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if (INVALID_HANDLE_VALUE != snapshot_handle)
{
PROCESSENTRY32 pe;
if (Process32First(snapshot_handle, &pe))
{
do
{
TRACE("KillProcess() PID = %04u, FileName = %s\n", pe.th32ProcessID, pe.szExeFile);
if (!_tcscmp(pe.szExeFile, (LPCTSTR)EXEName))
{
HANDLE process_handle = OpenProcess(PROCESS_TERMINATE, FALSE, pe.th32ProcessID);
if (INVALID_HANDLE_VALUE != process_handle)
{
TRACE("프로세스 중지!\n");
TerminateProcess(process_handle, 0);
CloseHandle(process_handle);
}
}
} while (Process32Next(snapshot_handle, &pe));
}
CloseHandle(snapshot_handle);
snapshot_handle = INVALID_HANDLE_VALUE;
}
}
}
Usage
cpueblo::KillProcess("Merong.exe");
Result
KillProcess() PID = 0000, FileName = [System Process]
KillProcess() PID = 0004, FileName = System
...
KillProcess() PID = 2648, FileName = rapimgr.exe
KillProcess() PID = 3220, FileName = NateOnMain.exe
프로세스 중지!
KillProcess() PID = 3276, FileName = svchost.exe
KillProcess() PID = 1904, FileName = TestApp.exe
...
Keywords
프로세스 강제 서스펜드
프로세스 Kill
process kill
http://codesarang.com. mail to cpueblo cpueblo.com
|