27 #include <wine/unicode.h> 40 static WCHAR opForceTerminate[] =
L"f";
41 static WCHAR opImage[] =
L"im";
42 static WCHAR opPID[] =
L"pid";
43 static WCHAR opHelp[] =
L"?";
44 static WCHAR opTerminateChildren[] =
L"t";
46 static PWCHAR opList[] = {opForceTerminate, opImage, opPID, opHelp, opTerminateChildren};
48 #define OP_PARAM_INVALID -1 50 #define OP_PARAM_FORCE_TERMINATE 0 51 #define OP_PARAM_IMAGE 1 52 #define OP_PARAM_PID 2 53 #define OP_PARAM_HELP 3 54 #define OP_PARAM_TERMINATE_CHILD 4 68 WCHAR msg_buffer[8192];
113 WCHAR msg_buffer[8192];
127 static const WCHAR formatW[] = {
'%',
'1',0};
128 WCHAR msg_buffer[8192];
143 if (hwnd_pid ==
info->pid)
154 DWORD *pid_list, alloc_bytes = 1024 *
sizeof(*pid_list), needed_bytes;
175 if (alloc_bytes != needed_bytes)
185 pid_list = realloc_list;
188 *
list_count = needed_bytes /
sizeof(*pid_list);
237 DWORD *pid_list, pid_list_size;
299 found_process =
TRUE;
300 if (pid_list[
index] == self_pid)
324 #endif // __REACTOS__ 332 DWORD *pid_list, pid_list_size;
426 found_process =
TRUE;
431 if (pid_list[
index] == self_pid)
460 found_process =
TRUE;
490 static unsigned int list_size = 16;
518 static int get_argument_type(
WCHAR* argument)
522 if (argument[0] !=
L'/' && argument[0] !=
L'-')
524 return OP_PARAM_INVALID;
535 return OP_PARAM_INVALID;
551 int argument = get_argument_type(
argv[
i]);
555 case OP_PARAM_FORCE_TERMINATE:
577 if (argument == OP_PARAM_IMAGE)
579 if (argument == OP_PARAM_PID)
582 if (has_im && has_pid)
589 if (get_argument_type(
argv[
i + 1]) != OP_PARAM_INVALID)
603 if (has_help ==
TRUE)
613 case OP_PARAM_TERMINATE_CHILD:
618 case OP_PARAM_INVALID:
643 else if ((!has_im) && (!has_pid))
661 static const WCHAR opForceTerminate[] = {
'f',0};
662 static const WCHAR opImage[] = {
'i',
'm',0};
663 static const WCHAR opPID[] = {
'p',
'i',
'd',0};
664 static const WCHAR opHelp[] = {
'?',0};
665 static const WCHAR opTerminateChildren[] = {
't',0};
677 if ((*argdata ==
'/' || *argdata ==
'-') && !
strcmpW(opHelp, argdata + 1))
689 if (*argdata !=
'/' && *argdata !=
'-')
693 if (!
strcmpiW(opTerminateChildren, argdata))
695 if (!
strcmpiW(opForceTerminate, argdata))
699 else if ((got_im = !
strcmpiW(opImage, argdata)) ||
700 (got_pid = !
strcmpiW(opPID, argdata)))
709 if (got_im) has_im =
TRUE;
710 if (got_pid) has_pid =
TRUE;
712 if (has_im && has_pid)
742 #endif // __REACTOS__
#define STRING_CLOSE_PID_SEARCH
static const WCHAR invalid[]
BOOL WINAPI WriteFile(IN HANDLE hFile, IN LPCVOID lpBuffer, IN DWORD nNumberOfBytesToWrite OPTIONAL, OUT LPDWORD lpNumberOfBytesWritten, IN LPOVERLAPPED lpOverlapped OPTIONAL)
_In_ ULONG_PTR _In_ ULONG _Out_ ULONG_PTR * pid
#define STRING_CLOSE_PROC_SRCH
static BOOL force_termination
DWORD WINAPI GetWindowThreadProcessId(HWND hWnd, PDWORD lpdwProcessId)
#define WideCharToMultiByte
static static const char __ms_va_list
#define PROCESS_QUERY_INFORMATION
#define STRING_ENUM_FAILED
BOOL WINAPI DECLSPEC_HOTPATCH WriteConsoleW(IN HANDLE hConsoleOutput, IN CONST VOID *lpBuffer, IN DWORD nNumberOfCharsToWrite, OUT LPDWORD lpNumberOfCharsWritten, LPVOID lpReserved)
GLuint GLuint GLsizei count
#define FORMAT_MESSAGE_FROM_STRING
static int terminate_processes(void)
static BOOL get_process_name_from_pid(DWORD pid, WCHAR *buf, DWORD chars)
#define STRING_TERM_PROC_SEARCH
static int taskkill_vprintfW(const WCHAR *msg, __ms_va_list va_args)
HANDLE WINAPI GetStdHandle(IN DWORD nStdHandle)
WINE_DEFAULT_DEBUG_CHANNEL(taskkill)
int WINAPI LoadStringW(_In_opt_ HINSTANCE hInstance, _In_ UINT uID, _Out_writes_to_(cchBufferMax, return+1) LPWSTR lpBuffer, _In_ int cchBufferMax)
int wmain(int argc, WCHAR *argv[])
struct status_code status_code
GLenum GLuint GLenum GLsizei const GLchar * buf
#define STRING_MISSING_PARAM
__WINE_SERVER_LIST_INLINE unsigned int list_count(const struct list *list)
UINT WINAPI DECLSPEC_HOTPATCH GetConsoleOutputCP(VOID)
#define STRING_MISSING_OPTION
static WCHAR ** task_list
DWORD WINAPI GetModuleBaseNameW(HANDLE hProcess, HMODULE hModule, LPWSTR lpBaseName, DWORD nSize)
#define STRING_SELF_TERMINATION
static int WINAPIV taskkill_printfW(const WCHAR *msg,...)
BOOL WINAPI EnumProcessModules(HANDLE hProcess, HMODULE *lphModule, DWORD cb, LPDWORD lpcbNeeded)
PVOID WINAPI HeapAlloc(HANDLE, DWORD, SIZE_T)
static int taskkill_message(int msg)
#define STRING_INVALID_SYNTAX
static BOOL add_to_task_list(WCHAR *name)
static int send_close_messages(void)
static BOOL process_arguments(int argc, WCHAR *argv[])
static DWORD * enumerate_processes(DWORD *list_count)
BOOL WINAPI EnumWindows(_In_ WNDENUMPROC lpEnumFunc, _In_ LPARAM lParam)
#define STRING_PARAM_TOO_MUCH
#define STRING_TERMINATE_FAILED
#define STD_OUTPUT_HANDLE
static BOOL CALLBACK pid_enum_proc(HWND hwnd, LPARAM lParam)
static int WINAPIV taskkill_message_printfW(int msg,...)
HANDLE WINAPI OpenProcess(IN DWORD dwDesiredAccess, IN BOOL bInheritHandle, IN DWORD dwProcessId)
#define PROCESS_TERMINATE
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
BOOL WINAPI EnumProcesses(DWORD *lpidProcess, DWORD cb, LPDWORD lpcbNeeded)
#define STRING_SEARCH_FAILED
BOOL WINAPI TerminateProcess(IN HANDLE hProcess, IN UINT uExitCode)
WINE_UNICODE_INLINE int isdigitW(WCHAR wc)
#define __ms_va_end(list)
#define __ms_va_start(list, arg)
BOOL WINAPI PostMessageW(_In_opt_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
WINE_UNICODE_INLINE int strcmpW(const WCHAR *str1, const WCHAR *str2)
HMODULE WINAPI GetModuleHandleW(LPCWSTR lpModuleName)
#define STRING_INVALID_OPTION
#define STRING_TERM_PID_SEARCH
static unsigned int task_count
#define HeapFree(x, y, z)
#define STRING_MUTUAL_EXCLUSIVE
DWORD WINAPI GetCurrentProcessId(VOID)
WINE_UNICODE_INLINE int atoiW(const WCHAR *str)
GLuint const GLchar * name