有的进程在任务管理器里不能被终止,通常会出现“访问被拒绝”的提示。
研究了一下以后发现当使用 PROCESS_TERMINATE 访问打开目标进程时会返回失败。不过这难不倒聪明好学的老汉,于是发明了以下结束进程的方法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
// prcterm.cpp : Defines the entry point for the console application. // #include <windows.h> #include <stdio.h> int main(int argc, char* argv[]) { DWORD dwPid, dwTid; printf("Please input a PID: "); scanf("%d", &dwPid); HANDLE hProcess = OpenProcess( PROCESS_CREATE_THREAD | PROCESS_QUERY_INFORMATION | PROCESS_VM_OPERATION | PROCESS_VM_WRITE | PROCESS_VM_READ, FALSE, dwPid); if(hProcess) { PVOID pFunc = NULL; HMODULE hKernel = GetModuleHandle("Kernel32"); if(hKernel) pFunc = GetProcAddress(hKernel, "ExitProcess"); if(pFunc) { HANDLE hThread = CreateRemoteThread(hProcess, NULL, 0, (LPTHREAD_START_ROUTINE)pFunc, NULL, 0, &dwTid); if(hThread) CloseHandle(hThread); } } return 0; } |
把 ExitProcess 作为线程起始地址,在目标进程内创建一个远程线程即可。
不过这个办法只能一时有效,那些保护进程的软件仍然可以通过检查 PROCESS_CREATE_THREAD 标志使 OpenProcess 函数失效。
不过老汉还有更强的办法,哈哈,就不告诉你!