Leaked source code of windows server 2003
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
#include "precomp.h"
#include "ProcKiller.h"
// the only one we'll ever need
CProcKillerTimer g_procKillerTimer;
// terminate process
void CProcKiller::Die() { bool bDoIt = true; DWORD exitCode; // sleazy attempt to ensure that the proc is still running when we try to kill it
// proc could still terminate on its own in the interim.
if (GetExitCodeProcess(m_hProc, &exitCode)) bDoIt = (exitCode == STILL_ACTIVE); if (bDoIt) TerminateProcess(m_hProc, 1); CloseHandle(m_hProc); m_hProc = NULL; }
// hVictim is a handle to a process
// last meal is the scheduled execution date
HRESULT CProcKillerTimer::ScheduleAssassination(HANDLE hVictim, FILETIME lastMeal) { HRESULT hr = WBEM_E_FAILED;
CProcKiller* pKiller; // gotta dup the handle - caller may close it.
HANDLE hMyHandle;
if (DuplicateHandle(GetCurrentProcess(), hVictim, GetCurrentProcess(), &hMyHandle, 0, false, DUPLICATE_SAME_ACCESS)) { if (pKiller = new CProcKiller(hMyHandle, lastMeal, m_pControl)) { hr = CKillerTimer::ScheduleAssassination(pKiller); } else { // allocation failed
CloseHandle(hMyHandle); hr = WBEM_E_OUT_OF_MEMORY; } } else { ERRORTRACE((LOG_ESS, "DuplicateHandle failed, 0x%08X\n", GetLastError())); }
return hr; }
|