你不一定知道的四种遍历进程的方法(c语言)

一、前言

有时候写代码的时候,我们需要遍历出系统的一些进程,一般我们是直接在任务管理器中查看,不过我们也可以自己写一个,下面小编将会从三个方面着手,给大家讲讲如何遍历进程。

二、系统快照

一般会用到了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()获得系统快照中的第一个进程信息,最后用一个循环调用来遍历系统中所有运行的进程。如图:

你不一定知道的四种遍历进程的方法(c语言)_第1张图片

系统快照.rar: https://url18.ctfile.com/f/7715018-957884766-e523a6?p=6511 (访问密码: 6511)

三、枚举

通过函数EnumProcesses和EnumProcessModules用来枚举进程,如图

你不一定知道的四种遍历进程的方法(c语言)_第2张图片

枚举.rar: https://url18.ctfile.com/f/7715018-957884757-564a80?p=6511 (访问密码: 6511)

四、通过函数WTSEnumerateProcess()来实现

利用了Windows NT/2000下终端服务API函数WTSEnumerateProcess()来实现,这个函数定义在Wtsapi32.dll里,如图:

你不一定知道的四种遍历进程的方法(c语言)_第3张图片

通过函数WTSEnumerateProcess()来实现.rar: https://url18.ctfile.com/f/7715018-957884763-311b38?p=6511 (访问密码: 6511)

五、通过NtQuerySystemInformation函数来实现

利用了Native Api的NtQuerySystemInformation函数来实现。没有该函数的导入库,要自己定义,如图:

你不一定知道的四种遍历进程的方法(c语言)_第4张图片

通过NtQuerySystemInformation函数来实现.rar: https://url18.ctfile.com/f/7715018-957884760-c03e3e?p=6511 (访问密码: 6511)

六、结语

其实除了上述四种方法外,还有一种,那就是驱动级别的遍历进程,但是那种难度颇高,不适合新手学习,尤其是安装环境都很麻烦,所以新手掌握这几种方法就够了。今天就到这里,大家有什么疑问,欢迎通过公众号简易编程网添加我,我来为您解答。当然,最重要的还是要感谢大家的支持与鼓励,让我能持续不断地给大家输出干货。

你可能感兴趣的:(c/c++,c语言,c语言,开发语言)