Kernel32.dll 에 있는 ExitProcess()라는 함수에 대한 포인터를 얻고 이를
CreateRemoteThread()를 이용하여 프로세스를 호출하고 스스로 종료되게 하는 기능입니다.
BOOL SafeTerminateProcess(HANDLE hProcess, UNIT uExitCode)
{
DWORD dwTID, dwCode, dwErr = 0;
HANDLE hProcessDup = INVALID_HANDLE_VALUE;
HANDLE hRT = NULL;
HINSTANCE hKernel = GetModule Handle("Kernel32");
BOOL bSuccess = FALSE;
BOOL bDup = DuplicateHandle(GetCurrentProcess(),
hProcess,
GetCurrentProcess(),
&hProcessDup,
PROCESS_ALL_ACCESS,
FALSE,
0};
if (GetExitCodeProcess((bDup) ? hProcessDup : hProcess, &dwCode) && (dwCode == STILL_ACTIVE) )
{
FARPROC pfnExitProc;
pfnExitProc = GetProcAddress(hKernel, "ExitProcess");
hRT = CreateRemoteThread((bDup) ? hProcessDup : hProcess,
NULL,
0,
(LPTHREAD_START_ROUTINE) pfnExitProc,
(PVOID) uExitCode, 0, &dwTID);
if (hRT == NULL) dwErr = GetLastError();
}
else
{
dwErr = ERROR_PROCESS_ABORTED;
}
if (hRT)
{
WaitForSingleObject((bDup) ? hProcessDup : hProcess, INFINITE);
Closehandle(hRT);
bSuccess = TRUE;
}
if (bDup)
CloseHandle(hProcessDup);
if (! bSuccess)
SetLastError(dwErr);
return bSuccess;
}
'IT-개발,DB' 카테고리의 다른 글
[개발/php] PHP로 모바일 브라우저 여부 체크( mobile user agent) (0) | 2012.04.03 |
---|---|
[개발/MFC] MFC 팁 54개 (0) | 2012.04.03 |
[개발/IE] 툴바 상태 레지스트리에서 확인 (0) | 2012.04.03 |
[개발/MFC] 문자열 변환 BSTR to CString, CString to BSTR, BSTR to char* (0) | 2012.04.03 |
[IT/개발] 2012년도 창의도전형 SW R&D 프로그램 (0) | 2012.03.09 |
댓글