文章目录
进程遍历-系统快照
1. 相关函数及结构体
1.1 CreateToolhelp32Snapshot
获取指定进程以及这些进程使用的堆、模块和线程的快照。
HANDLE CreateToolhelp32Snapshot(
[in] DWORD dwFlags,
[in] DWORD th32ProcessID
);
dwFlags 指出在快照中要包含的系统部分
th32ProcessID 为 0 遍历当前程序,不为0则创建指定进程的快照进行遍历
1.2 Process32First
检索有关系统快照中遇到的第一个进程的信息。
BOOL Process32First(
[in] HANDLE hSnapshot,
[in, out] LPPROCESSENTRY32 lppe
);
hSnapshot CreateToolhelp32Snapshot 函数返回的句柄
lppe 指向 PROCESSENTRY32 结构的指针,它包含进程信息
1.3 Process32Next
检索有关系统快照中记录的下一个进程的信息。
BOOL Process32Next(
[in] HANDLE hSnapshot,
[out] LPPROCESSENTRY32 lppe
);
hSnapshot CreateToolhelp32Snapshot 函数返回的句柄
lppe 指向 PROCESSENTRY32 结构的指针,它包含进程信息
1.4 PROCESSENTRY32
描述采用快照时驻留在系统地址空间中的进程的列表中的条目。
typedef struct tagPROCESSENTRY32 {
DWORD dwSize; 结构大小(以字节为单位)。 在调用 Process32First 函数之前,请将此成员设置为 sizeof(PROCESSENTRY32)
DWORD cntUsage; 始终设置为零
DWORD th32ProcessID; 进程标识符
ULONG_PTR th32DefaultHeapID; 始终设置为零
DWORD th32ModuleID; 始终设置为零
DWORD cntThreads; 进程启动的执行线程数
DWORD th32ParentProcessID; 创建此进程的进程的标识符 (其父进程)
LONG pcPriClassBase; 此进程创建的任何线程的基本优先级
DWORD dwFlags; 始终设置为零
CHAR szExeFile[MAX_PATH]; 进程的可执行文件的名称
} PROCESSENTRY32;
2. 遍历进程
2.1 遍历进程思路分析
- 通过CreateToolhelp32Snapshot 创建进程快照
- 通过Process32First 遍历第一个发现的进程
- 通过Process32Next 依次遍历后续发现的进程
- 处理进程信息结构体
2.2 遍历进程具体实现
#include <windows.h>
#include <tlhelp32.h>
#include <stdio.h>
int main(int argc, char* argv[]) {
PROCESSENTRY32 pEntity32 = { 0 };
pEntity32.dwSize = sizeof(PROCESSENTRY32);
INT pCount = 0;
HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
BOOL result = Process32First(hSnapshot, &pEntity32);
while (result) {
pCount++;
printf_s("[%d]:[%ws]\n", pEntity32.th32ProcessID, pEntity32.szExeFile);
result = Process32Next(hSnapshot, &pEntity32);
}
CloseHandle(hSnapshot);
printf_s("There are totally %d process running on the system.", pCount);
return 1;
}
参考文献
[1] https://learn.microsoft.com/zh-cn/windows/win32/api/tlhelp32/nf-tlhelp32-createtoolhelp32snapshot
[2] https://learn.microsoft.com/zh-cn/windows/win32/api/tlhelp32/nf-tlhelp32-process32first
[3] https://learn.microsoft.com/zh-cn/windows/win32/api/tlhelp32/nf-tlhelp32-process32next
[4] https://learn.microsoft.com/zh-cn/windows/win32/api/tlhelp32/ns-tlhelp32-processentry32
关注我们,咱们在安全的路上,扬帆起航