使用TerminateProcess结束其他进程,通常的作法是(1)建立快照,获得目标进程的pid;(2)调用TerminateProcess结束对方。
贴出代码如下:
BOOL KillProcess(LPSTR szProcessName)
{
DWORD dwPid;
HANDLE hProcess;
char szShow[BUFSIZE];
DWORD dwExitCode;
while(1)
{
dwPid = FindProcess(szProcessName);
if(dwPid == -1)
{
break;
wsprintf(szShow,"Error to find process %s, pid %d",szProcessName,dwPid);
// MessageBox(NULL,szShow,"error",MB_OK|MB_ICONERROR);
}
hProcess = OpenProcess(PROCESS_ALL_ACCESS,TRUE,dwPid);
if(hProcess == NULL)
{
wsprintf(szShow,"Error to open process with error code %d",GetLastError());
// MessageBox(NULL,szShow,"error",MB_OK|MB_ICONERROR);
return -1;
}
// printf("%d",++i);
//terminate it
if(!TerminateProcess(hProcess,GetExitCodeProcess(hProcess,&dwExitCode)))
{
// wsprintf(szShow,"Error to terminate process with error code %d",GetLastError());
// MessageBox(NULL,szShow,"error",MB_OK|MB_ICONERROR);
}
CloseHandle(hProcess);
// Sleep(500);
}
return 1;
}
DWORD FindProcess(LPSTR szProcessName)
{
PROCESSENTRY32 pe32 = {0};
HANDLE hSnapshot;
pe32.dwSize=sizeof(PROCESSENTRY32);
hSnapshot=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0); //创建快照
while (Process32Next(hSnapshot,&pe32)) //遍历进程信息
{
if(lstrcmpi(pe32.szExeFile,szProcessName)==0)
{
return pe32.th32ProcessID;
}
}
return -1;
}
但是遇到多个同名进程时,如同时打开多个notepad.exe,这时如果结束全部进程,一个方法是使用上面的while(1)。 如果结束两个不同的进程,就调用两次KillProcess方法。 但是在实际的实验过程中,发现有时候可以完全结束进程,有时候只能结束一个。
请教。。。
[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法