void ExitProcess(CString strTargetProcName, DWORD dwExceptProcId)
{
DWORD aProcesses[1024]={0,}, cbNeeded, cProcesses;
unsigned int i = 0;
//실행중인 프로세스를 모두 구한다
if (!EnumProcesses( aProcesses, sizeof(aProcesses), &cbNeeded))
return;
//실행중인 프로세스의 개수를 구한다
cProcesses = cbNeeded / sizeof(DWORD);
//각 프로세스에 대한 이름 및 프로세스 아이디를 구하고 타겟 프로세스를 강제로 종료시킨다
for ( i = 0; i < cProcesses; i++ )
{
TCHAR szProcessName[MAX_PATH] = _T("unknown");
HANDLE hProcess = OpenProcess( PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, aProcesses[i] );
if (NULL != hProcess )
{
HMODULE hMod;
DWORD cbNeeded;
if (EnumProcessModules( hProcess, &hMod, sizeof(hMod), &cbNeeded))
GetModuleBaseName( hProcess, hMod, szProcessName, sizeof(szProcessName)); //프로세스 이름을 구한다(szProcessName)
}
BOOL bRet;
CString strComp = szProcessName;
//실행중인 프로세스(strComp)와 죽이려는 프로세스(strTargetProcName) 이름을 비교하여 같으면 해당 프로세스 종료
//단 실행중인 나 자신은 죽이려는 프로세스에서 제외시킨다
if((strComp.MakeLower() == strTargetProcName.MakeLower()) && (aProcesses[i] != dwExceptProcId))
{
HANDLE hKillProc = OpenProcess(PROCESS_TERMINATE, FALSE, aProcesses[i]);
if(hKillProc != NULL)
{
DWORD ExitCode = 0;
GetExitCodeProcess( hKillProc, &ExitCode );
bRet = TerminateProcess(hKillProc, ExitCode );
if( bRet )
WaitForSingleObject(hKillProc, INFINITE);
CloseHandle(hKillProc);
}
}
CloseHandle( hProcess );
}
}
{
DWORD aProcesses[1024]={0,}, cbNeeded, cProcesses;
unsigned int i = 0;
//실행중인 프로세스를 모두 구한다
if (!EnumProcesses( aProcesses, sizeof(aProcesses), &cbNeeded))
return;
//실행중인 프로세스의 개수를 구한다
cProcesses = cbNeeded / sizeof(DWORD);
//각 프로세스에 대한 이름 및 프로세스 아이디를 구하고 타겟 프로세스를 강제로 종료시킨다
for ( i = 0; i < cProcesses; i++ )
{
TCHAR szProcessName[MAX_PATH] = _T("unknown");
HANDLE hProcess = OpenProcess( PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, aProcesses[i] );
if (NULL != hProcess )
{
HMODULE hMod;
DWORD cbNeeded;
if (EnumProcessModules( hProcess, &hMod, sizeof(hMod), &cbNeeded))
GetModuleBaseName( hProcess, hMod, szProcessName, sizeof(szProcessName)); //프로세스 이름을 구한다(szProcessName)
}
BOOL bRet;
CString strComp = szProcessName;
//실행중인 프로세스(strComp)와 죽이려는 프로세스(strTargetProcName) 이름을 비교하여 같으면 해당 프로세스 종료
//단 실행중인 나 자신은 죽이려는 프로세스에서 제외시킨다
if((strComp.MakeLower() == strTargetProcName.MakeLower()) && (aProcesses[i] != dwExceptProcId))
{
HANDLE hKillProc = OpenProcess(PROCESS_TERMINATE, FALSE, aProcesses[i]);
if(hKillProc != NULL)
{
DWORD ExitCode = 0;
GetExitCodeProcess( hKillProc, &ExitCode );
bRet = TerminateProcess(hKillProc, ExitCode );
if( bRet )
WaitForSingleObject(hKillProc, INFINITE);
CloseHandle(hKillProc);
}
}
CloseHandle( hProcess );
}
}
http://blog.daum.net/odega/21
http://blog.daum.net/odega/21
댓글 없음:
댓글 쓰기