系统进程的检测

本文介绍了一种在Windows系统中枚举所有进程的方法,通过使用PROCESSENTRY32结构体和CreateToolhelp32Snapshot函数创建系统快照,再利用Process32First及Process32Next函数遍历快照中的进程列表。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

      本周末研究了一下如何枚举系统中的进程

一、在ring3层:

比较常见的方法是利用PROCESSENTRY32 结构体,此结构体中包含了进程的各种信息。

      首先,用 CreateToolhelp32Snapshot 将当前系统的进程、线程、DLL、堆的信息保存到一个缓冲区,这就是一个系统快照。如果你只是对进程信息感兴趣,那么只要包含 TH32CS_SNAPPROCESS 标志即可。

      然后,调用一次 Process32First 函数,从快照中获取第一个进程,重复调用 Process32Next,直到函数返回 FALSE 为止。这样将遍历快照中进程列表。这两个函数都带两个参数,它们分别是快照句柄和一个 PROCESSENTRY32 结构。

     注意:在调用 Process32First() 之前,要将 PROCESSENTRY32 结构的 dwSize 成员设置成 sizeof(PROCESSENTRY32)。否则,Process32First()总返回错误。

下面是核心代码:

PROCESSENTRY32 pe32;

memset(&pe32,0,sizeof(PROCESSENTRY32));

…… HANDLE handle=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);

if(INVALID_HANDLE_VALUE==handle) { goto Exit0; }

pe32.dwSize=sizeof(PROCESSENTRY32);

bRet=Process32First(handle,&pe32);

if(!bRet) { goto Exit0; }

do {

   wsprintf(buffer,"%-10s %-20d",pe32.szExeFile,pe32.th32ProcessID);

   m_plist->InsertString (i++,buffer);

}while(Process32Next(handle,&pe32));

得到的结果如下图所示:

 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值