进程的遍历、获取与销毁
创建快照遍历
//获得进程所使用的堆,模块和线程的信息快照 HANDLE WINAPI CreateToolhelp32Snapshot ( DWORD dwFlags,//标志位 DWORD th32ProcessID //进程ID ) //dwFlags: 指定的快照中,指定需要拍的系统部分 TH32CS_INHERIT 声明快照句柄是可继承的。 TH32CS_SNAPALL 在快照中包含系统中所有的 进程和线程。 TH32CS_SNAPHEAPLIST 在快照中包含ID所指定的进程的所有的堆。 TH32CS_SNAPMODULE 在快照中包含在ID所指定的进程的所有的模块。 TH32CS_SNAPPROCESS 在快照中包含系统中所有的进程。 TH32CS_SNAPTHREAD 在快照中包含系统中所有的线程。 BOOL WINAPI Process32First( HANDLE hSnapshot, //快照句柄 LPPROCESSENTRY32 lppe //获得的信息 );获得快照中的第一个成员的信息 BOOL WINAPI Process32Next( HANDLE hSnapshot, //快照句柄 LPPROCESSENTRY32 lppe //获得的信息 );获得快照中后一个成员的信息
函数实现
DWORD find_processid_by_nameW(PWCHAR process_name) { HANDLE hand = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, NULL); if ((int)hand == -1) { return GetLastError(); } PROCESSENTRY32 process_info = { 0 }; process_info.dwSize = sizeof PROCESSENTRY32; if (!Process32First(hand, &process_info)) { return GetLastError(); } do { if (!wcscmp(process_info.szExeFile, process_name)) { return process_info.th32ProcessID; } } while (Process32Next(hand,&process_info)); return 0; }
进程的获取与销毁
//进程的获取 HANDLE OpenProcess( DWORD dwDesiredAccess, // 访问权限标识 BOOL bInheritHandle, // 获取的句柄能否被继承 DWORD dwProcessId // 目标进程的标识符 ); //退出 VOID ExitProcess( UINT uExitCode // 退出代码 (谁调用谁结束) ); BOOL TerminateProcess( HANDLE hProcess, // 关闭进程的句柄 UINT uExitCode // 进程的退出代码 );
exp:
hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pid); if (hProcess) { MessageBox(NULL, process_name, L"打开进程了!", MB_OK); TerminateProcess(hProcess, 0); }
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论