/* (C) 2003-2007 Willem Jan Hengeveld * Web: http://www.xs4all.nl/~itsme/ * http://wiki.xda-developers.com/ * * $Id: pkill.cpp 1921 2008-07-31 17:08:31Z itsme $ */ #include #include #include #include #include #include "debug.h" #include "args.h" #include "ptrutils.h" #include "ItsUtils.h" #include "dllversion.h" // todo: kill by handle does not seem to work. void ITTerminateProcess(DWORD dwProcessHandle, char *szProcessName, bool bWait); void ITTerminateThread(DWORD dwThreadHandle); void usage() { printf("(C) 2003-2008 Willem jan Hengeveld itsme@xs4all.nl\n"); printf("Usage: pkill [-w] [-t HANDLE] [ {-h HANDLE } | { processname } ]...\n"); printf(" -w : wait until process has terminated\n"); } int main( int argc, char *argv[]) { DebugStdOut(); if (argc==1) { return 1; } CheckITSDll(); bool bWaitForProcess= false; for (int i=1 ; iwszProcessName+strlen(szProcessName)+1) : PTR_DIFF(inbuf, inbuf->wszProcessName+1); inbuf= (TerminateProcessParams*)LocalAlloc(LPTR, insize); DWORD outsize=0; inbuf->dwProcessHandle= dwProcessHandle; inbuf->bWait= bWait; if (szProcessName) { _snwprintf(inbuf->wszProcessName, strlen(szProcessName), L"%hs", szProcessName); inbuf->wszProcessName[strlen(szProcessName)]= 0; } else { inbuf->wszProcessName[0]= 0; } HRESULT res= ItsutilsInvoke(L"ITTerminateProcess", insize, (BYTE*)inbuf, &outsize, NULL); if (res) error(res, "killing %08lx | %s", dwProcessHandle, szProcessName?szProcessName:"-"); else debug("%08lx | %s killed\n", dwProcessHandle, szProcessName?szProcessName:"-"); } void ITTerminateThread(DWORD dwThreadHandle) { TerminateThreadParams inbuf; DWORD insize= sizeof(inbuf); DWORD outsize=0; inbuf.dwThreadHandle= dwThreadHandle; HRESULT res= ItsutilsInvoke(L"ITTerminateThread", insize, (BYTE*)&inbuf, &outsize, NULL); if (res) error(res, "killing thread %08lx", dwThreadHandle); else debug("thread %08lx killed\n", dwThreadHandle); }