进程遍历

来源:互联网 发布:mac 双系统丢失 编辑:程序博客网 时间:2024/06/10 20:36

对进程的遍历可以通过微软提供的Tool Help库来实现
里面的几个主要函数有

这里写图片描述

HANDLE WINAPI CreateToolhelp32Snapshot(  _In_ DWORD dwFlags,  _In_ DWORD th32ProcessID//0代表当前进程,);// 该函数用来获取当前进程的快照,通过flags来决定获取的内容,它的返回值将用于之后函数使用

这里写图片描述

BOOL WINAPI Process32First(  _In_    HANDLE           hSnapshot,//之前获取的句柄  _Inout_ LPPROCESSENTRY32 lppe);BOOL WINAPI Process32Next(  _In_  HANDLE           hSnapshot,  _Out_ LPPROCESSENTRY32 lppe);//用上面的这两个函数可以对进程进行遍历typedef struct tagPROCESSENTRY32 {  DWORD     dwSize;//结构体大小  DWORD     cntUsage;//不再使用,置0  DWORD     th32ProcessID;//PID  ULONG_PTR th32DefaultHeapID;//不再使用,置0  DWORD     th32ModuleID;//不再使用,置0  DWORD     cntThreads;//由进程开始执行线程的数目  DWORD     th32ParentProcessID;//父进程ID  LONG      pcPriClassBase;//线程优先级  DWORD     dwFlags;//不再使用,置0  TCHAR     szExeFile[MAX_PATH];//进程可执行文件名} PROCESSENTRY32, *PPROCESSENTRY32;

简单实例

HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);PROCESSENTRY32 pe = { 0 };pe.dwSize = sizeof(PROCESSENTRY32);if(hSnapshot != INVALID_HANDLE_VALUE && Process32First(hSnapshot, &pe)){    do    {            _tprintf(_T("ProcessName:%s\tParentID:%d\tThreads:%d\tPriClassBase:%d\n"), pe.szExeFile, pe.th32ParentProcessID, pe.cntThreads, pe.pcPriClassBase);    }while(Process32Next(hSnapshot, &pe))}

之后可以通过进程的ID对线程和模块进行遍历

原创粉丝点击