Initial revision
[reactos.git] / reactos / apps / tests / kill / kill.cpp
1 /* Kill for Win32 by chris@dbn.lia.net
2 * http://users.lia.net/chris/win32/
3 * Public domain
4 */
5
6
7 #include <windows.h>
8
9 inline int h2i(char x)
10 {
11 return (x + ((x & 0x40) >> 6) | ((x & 0x40) >> 3)) & 0x0f;
12 }
13
14 void msg(HANDLE out, LPCTSTR fmt...)
15 {
16 char tmp[256];
17 wvsprintf(tmp,fmt,(char*)&fmt+sizeof(fmt));
18 DWORD w;
19 WriteFile(out,tmp,lstrlen(tmp),&w,NULL);
20 }
21
22 void main(void)
23 {
24 HANDLE stdout = GetStdHandle(STD_OUTPUT_HANDLE);
25 HANDLE stderr = GetStdHandle(STD_ERROR_HANDLE);
26
27 LPTSTR cmdline = GetCommandLine();
28
29 //Scan command line to end of program name
30 while(*cmdline && *cmdline != ' ')
31 if(*cmdline++ == '"')
32 while(*cmdline && *cmdline++ != '"');
33
34 // Loop while we have parameters.
35 while(*cmdline)
36 {
37 //scan past spaces..
38 while(*cmdline == ' ')
39 cmdline++;
40
41 //read in pid
42 int pid = 0;
43 while(*cmdline)
44 pid = (pid << 4) + h2i(*cmdline++);
45
46 HANDLE p = OpenProcess(PROCESS_ALL_ACCESS,FALSE,pid);
47 if(p)
48 {
49 if(TerminateProcess(p,(unsigned int)-9))
50 msg(stdout,"Terminated PID: %08X\n",pid);
51 else
52 msg(stdout,"Couldn't kill PID: %08X, error=%d\n",pid,GetLastError());
53 CloseHandle(p);
54 }
55 else
56 msg(stderr,"No such PID: %08X, error=%d\n",pid,GetLastError());
57 }
58 }