• 你不一定知道的四种遍历进程的方法(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()获得系统快照中的第一个进程信息,最后用一个循环调用来遍历系统中所有运行的进程。如图:

    在这里插入图片描述

    系统快照.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)

    六、结语

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

  • 相关阅读:
    AMD CPU 虚拟机安装 macos 系统的各虚拟机系统对比
    JVM面试速补:知识点梳理+学习路线+学习笔记+真题解析,够不够?
    java之日期相关
    什么是SystemUI
    图解LeetCode——1470. 重新排列数组(难度:简单)
    Java-软考总结
    M401H_山东移动_SM0_SD46_国科6323芯片_安卓4_AI语音_免拆卡刷固件包
    【面试题 - springcloud】 - Eureka服务注册中心
    微信小程序开发实战6_2 获取用户信息
    Rust所有权(非常重要)
  • 原文地址:https://blog.csdn.net/weixin_30852573/article/details/133828060