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.
 
 
 
 
 
 

55 lines
1.3 KiB

#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;
}