• 你不一定知道的四种遍历进程的方法(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)

    六、结语

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

  • 相关阅读:
    网站变灰白css
    PMI-ACP练习题(26)
    MySQL 查询结果与分页 2022/09/08
    JSP自定义标签(下)
    【白话科普】聊聊网络架构变革的关键——SDN
    Golang入门笔记(最后一章 17 封版)—— 映射map
    Hbase与Hadoop的兼容性
    在Ubuntu中,使指定搜索动态库文件路径的环境变量LD_LIBRARY_PATH永久生效
    第三方API接口的好处以及免费API接口推荐
    Elasticsearch几种内部数据结构
  • 原文地址:https://blog.csdn.net/weixin_30852573/article/details/133828060