30#define wcsicmp _wcsicmp
59unsigned int* pkill_list;
66static PWCHAR opList[] = {
L"f",
L"im",
L"pid",
L"?",
L"t"};
68#define OP_PARAM_INVALID -1
70#define OP_PARAM_FORCE_TERMINATE 0
71#define OP_PARAM_IMAGE 1
73#define OP_PARAM_HELP 3
74#define OP_PARAM_TERMINATE_CHILD 4
82 WCHAR msg_buffer[8192];
124 WCHAR msg_buffer[8192];
138 WCHAR msg_buffer[8192];
153 if (hwnd_pid ==
info->pid)
238 pkill_list[pkill_size++] =
i;
257 pkill_list[pkill_size++] =
i;
350 pkill_list[pkill_size++] =
i;
393static void queue_children(
DWORD ppid)
398 if (!get_pid_creation_time(ppid, &parent_creation_time))
415 if (!get_pid_creation_time(
pid, &child_creation_time))
425 pkill_list[pkill_size++] =
i;
450 unsigned int front = 0;
456 while (pkill_size -
front > 0)
459 unsigned int len = pkill_size -
front;
479 const WCHAR *process_name;
522 const WCHAR *process_name;
576 static unsigned int list_size = 16;
602static int get_argument_type(
WCHAR* argument)
606 if (argument[0] !=
L'/' && argument[0] !=
L'-')
608 return OP_PARAM_INVALID;
619 return OP_PARAM_INVALID;
631 int argument = get_argument_type(
argv[
i]);
635 case OP_PARAM_FORCE_TERMINATE:
657 if (argument == OP_PARAM_IMAGE)
659 if (argument == OP_PARAM_PID)
662 if (has_im && has_pid)
669 if (get_argument_type(
argv[
i + 1]) != OP_PARAM_INVALID)
693 case OP_PARAM_TERMINATE_CHILD:
705 case OP_PARAM_INVALID:
730 else if (!has_im && !has_pid)
758 if ((*argdata ==
'/' || *argdata ==
'-') && !
lstrcmpW(
L"?", argdata + 1))
770 if (*argdata !=
'/' && *argdata !=
'-')
780 else if ((got_im = !
wcsicmp(
L"im", argdata)) ||
781 (got_pid = !
wcsicmp(
L"pid", argdata)))
790 if (got_im) has_im =
TRUE;
791 if (got_pid) has_pid =
TRUE;
793 if (has_im && has_pid)
827 int search_status = 0, terminate_status;
857 return search_status ? search_status : terminate_status;
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
#define STRING_INVALID_SYNTAX
#define STRING_INVALID_OPTION
HANDLE WINAPI GetStdHandle(IN DWORD nStdHandle)
#define INVALID_HANDLE_VALUE
#define WideCharToMultiByte
BOOL WINAPI DECLSPEC_HOTPATCH WriteConsoleW(IN HANDLE hConsoleOutput, IN CONST VOID *lpBuffer, IN DWORD nNumberOfCharsToWrite, OUT LPDWORD lpNumberOfCharsWritten, LPVOID lpReserved)
BOOL WINAPI WriteFile(IN HANDLE hFile, IN LPCVOID lpBuffer, IN DWORD nNumberOfBytesToWrite OPTIONAL, OUT LPDWORD lpNumberOfBytesWritten, IN LPOVERLAPPED lpOverlapped OPTIONAL)
HMODULE WINAPI GetModuleHandleW(LPCWSTR lpModuleName)
BOOL WINAPI TerminateProcess(IN HANDLE hProcess, IN UINT uExitCode)
HANDLE WINAPI OpenProcess(IN DWORD dwDesiredAccess, IN BOOL bInheritHandle, IN DWORD dwProcessId)
BOOL WINAPI GetProcessTimes(IN HANDLE hProcess, IN LPFILETIME lpCreationTime, IN LPFILETIME lpExitTime, IN LPFILETIME lpKernelTime, IN LPFILETIME lpUserTime)
LONG WINAPI CompareFileTime(IN CONST FILETIME *lpFileTime1, IN CONST FILETIME *lpFileTime2)
int WINAPI lstrcmpW(LPCWSTR str1, LPCWSTR str2)
UINT WINAPI GetOEMCP(void)
GLuint GLuint GLsizei count
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
_Check_return_ long __cdecl wcstol(_In_z_ const wchar_t *_Str, _Out_opt_ _Deref_post_z_ wchar_t **_EndPtr, _In_ int _Radix)
#define PROCESS_TERMINATE
#define PROCESS_QUERY_INFORMATION
static const WCHAR invalid[]
static struct address_cache * front
static int terminate_processes(void)
static BOOL find_parent(unsigned int process_index, unsigned int *parent_index)
static BOOL force_termination
static void taskkill_message_print_process(int msg, unsigned int index)
static int taskkill_message(int msg)
static BOOL CALLBACK pid_enum_proc(HWND hwnd, LPARAM lParam)
static unsigned int process_count
static BOOL kill_child_processes
static WCHAR ** task_list
static void mark_task_process(const WCHAR *str, int *status_code)
static int WINAPIV taskkill_printfW(const WCHAR *msg,...)
static BOOL process_arguments(int argc, WCHAR *argv[])
static struct @6 * process_list
static int taskkill_vprintfW(const WCHAR *msg, va_list va_args)
static BOOL add_to_task_list(WCHAR *name)
static int WINAPIV taskkill_message_printfW(int msg,...)
static void mark_child_processes(void)
static int send_close_messages(void)
static unsigned int task_count
static BOOL enumerate_processes(void)
#define STRING_TERM_CHILD_FAILED
#define STRING_ENUM_FAILED
#define STRING_SEARCH_FAILED
#define STRING_TERM_CHILD
#define STRING_MISSING_PARAM
#define STRING_CLOSE_CHILD
#define STRING_MISSING_OPTION
#define STRING_TERMINATE_FAILED
#define STRING_CLOSE_PROC_SRCH
#define STRING_TERM_PROC_SEARCH
#define STRING_PARAM_TOO_MUCH
#define STRING_SELF_TERMINATION
#define STRING_MUTUAL_EXCLUSIVE
#define STRING_CLOSE_PID_SEARCH
#define STRING_TERM_PID_SEARCH
#define TH32CS_SNAPPROCESS
#define success(from, fromstr, to, tostr)
#define STD_OUTPUT_HANDLE
#define FORMAT_MESSAGE_FROM_STRING
DWORD WINAPI GetCurrentProcessId(void)
DWORD WINAPI GetWindowThreadProcessId(HWND hWnd, PDWORD lpdwProcessId)
_In_ ULONG_PTR _In_ ULONG _Out_ ULONG_PTR * pid
BOOL WINAPI PostMessageW(_In_opt_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
int WINAPI LoadStringW(_In_opt_ HINSTANCE hInstance, _In_ UINT uID, _Out_writes_to_(cchBufferMax, return+1) LPWSTR lpBuffer, _In_ int cchBufferMax)
int WINAPIV wsprintfW(_Out_ LPWSTR, _In_ _Printf_format_string_ LPCWSTR,...)
BOOL WINAPI EnumWindows(_In_ WNDENUMPROC lpEnumFunc, _In_ LPARAM lParam)