对进程的遍历可以通过微软提供的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对线程和模块进行遍历