一、前言
有时候写代码的时候,我们需要遍历出系统的一些进程,一般我们是直接在任务管理器中查看,不过我们也可以自己写一个,下面小编将会从三个方面着手,给大家讲讲如何遍历进程。
二、系统快照
一般会用到了3个关键的函数:CreateToolhelp32Snapshot(),Process32First()和Process32Next()。用法如下:
HANDLE WINAPI CreateToolhelp32Snapshot(
DWORD dwFlags, //系统快照要查看的信息类型
DWORD th32ProcessID //值0表示当前进程
);
BOOL WINAPI Process32First(
HANDLE hSnapshot, //CreateToolhelp32Snapshot()创建的快照句柄
LPPROCESSENTRY32 lppe //指向进程入口结构
);
BOOL WINAPI Process32Next(
HANDLE hSnapshot, //这里参数同Process32First
LPPROCESSENTRY32 lppe //同上
);
首先使用CreateToolhelp32Snapshot()创建系统快照句柄(hprocess是我们声明用来保存创建的快照句柄),然后调用Process32First()获得系统快照中的第一个进程信息,最后用一个循环调用来遍历系统中所有运行的进程。如图:
系统快照.rar: https://url18.ctfile.com/f/7715018-957884766-e523a6?p=6511 (访问密码: 6511)
三、枚举
通过函数EnumProcesses和EnumProcessModules用来枚举进程,如图
枚举.rar: https://url18.ctfile.com/f/7715018-957884757-564a80?p=6511 (访问密码: 6511)
四、通过函数WTSEnumerateProcess()来实现
利用了Windows NT/2000下终端服务API函数WTSEnumerateProcess()来实现,这个函数定义在Wtsapi32.dll里,如图:
通过函数WTSEnumerateProcess()来实现.rar: https://url18.ctfile.com/f/7715018-957884763-311b38?p=6511 (访问密码: 6511)
五、通过NtQuerySystemInformation函数来实现
利用了Native Api的NtQuerySystemInformation函数来实现。没有该函数的导入库,要自己定义,如图:
通过NtQuerySystemInformation函数来实现.rar: https://url18.ctfile.com/f/7715018-957884760-c03e3e?p=6511 (访问密码: 6511)
六、结语
其实除了上述四种方法外,还有一种,那就是驱动级别的遍历进程,但是那种难度颇高,不适合新手学习,尤其是安装环境都很麻烦,所以新手掌握这几种方法就够了。今天就到这里,大家有什么疑问,欢迎通过公众号简易编程网添加我,我来为您解答。当然,最重要的还是要感谢大家的支持与鼓励,让我能持续不断地给大家输出干货。