摘要
Mxchild
生成中...
0x00 基础知识
在 Windows 系统编程中,获取当前运行的所有进程列表是一项常见需求。EnumProcesses 这个 Windows API 函数就用于此目的,它能够获取系统中所有进程的标识符(PID)。
🎯 函数概述
EnumProcesses 函数的基本原理是向系统请求当前活动进程的PID列表。它的函数原型如下:
BOOL EnumProcesses(
DWORD *lpidProcess, // 接收进程ID数组的指针
DWORD cb, // 数组的大小,以字节为单位
DWORD *cbNeeded // 接收实际返回数据大小的指针
);
📝 如何使用它
使用 EnumProcesses 通常包含以下几个步骤:
调用 EnumProcesses 获取PID数组:你需要准备一个足够大的 DWORD 数组,并调用 EnumProcesses。调用成功后,cbNeeded 会告诉你系统写入了多少字节的数据,进程的数量就是这个字节数除以 sizeof(DWORD)。这里需要注意,传入的数组可能不够大。一个可靠的判断方法是,如果返回的 cbNeeded 等于你传入的 cb,那么数组可能已满,有些进程信息可能没被列出。稳健的做法是分配一个更大的数组并重试。
转换PID为进程名(可选):EnumProcesses 只返回PID。如果你需要进程名或其他详细信息,还需以下步骤:
- 使用 OpenProcess 函数,通过PID获取进程句柄。
- 使用 EnumProcessModules 函数获取该进程的模块句柄(通常是主执行模块)。
- 使用 GetModuleFileNameEx 或 GetModuleBaseName 函数,结合进程句柄和模块句柄,来检索进程的可执行文件全路径或仅文件名。
💡 应用场景与特点
EnumProcesses 在以下场景中非常有用:
- 开发系统监控工具,例如类似任务管理器的软件。
- 生成系统运行环境快照,用于错误报告和诊断。
- 安全软件中用于检测可疑进程。
它的一个主要优点是接口相对简单直接。但也要注意它的局限性:它主要提供进程的PID,要获取更详细的信息(如进程名、路径)需要额外调用其他API。此外,在调用 EnumProcesses 后,进程列表可能已经发生变化(例如有新进程启动或旧进程退出),这意味着它返回的是调用时刻的系统状态快照。
🔄 与其他技术对比
- 除了PSAPI中的 EnumProcesses,Windows平台枚举进程还可以使用 ToolHelp32 系列函数(如 CreateToolhelp32Snapshot, Process32First, Process32Next)。相比之下,EnumProcesses 是PSAPI库的一部分,而ToolHelp32函数则在KERNEL32.dll中。
- 简单来说,EnumProcesses 是Windows程序员获取系统进程列表的一个实用工具。虽然它主要提供进程ID,需要借助其他API才能获取更丰富的信息,并且在不同的Windows版本中,其依赖的库和具体实现也有所差异,但它仍然是许多系统工具和诊断程序的重要组成部分。
0x01 示例代码
![图片[1]- AntiMonitor psapi EnumProcess 进程遍历- 侠者非攻社区](https://www.xiahub.com/wp-content/uploads/2025/11/image-1-1024x603.png)
版权声明
1
本站名称:侠者非攻社区
2
本站网址:https://www.xiahub.com
3
本站的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,请联系站长进行删除处理。
4
本站一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
5
本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报。
6
本站附件资源、教程等内容如因时效原因失效或不可用,请评论区留言或联系站长及时更新。
本站一切资源仅供学习交流使用请勿商业运营,严禁从事违法侵权等任何非法活动,否则后果自负!
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END




- 最新
- 最热
查看全部