TlHelp32枚举进程线程模块信息

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了TlHelp32枚举进程线程模块信息相关的知识,希望对你有一定的参考价值。

通过tlhelp32提供的api,可以很容易的获取进程、模块、线程的快照信息。

所涉及头文件:

tlhelp32.h


枚举进程Process信息:

        HANDLE hSnapshot;

PROCESSENTRY32 pe32 = { sizeof(PROCESSENTRY32) }; 

HANDLE hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, dwPid);

if(hProcessSnap == INVALID_HANDLE_VALUE)

{

return -1; 

}

if(Process32First(hProcessSnap, &pe32)) 

do 

     printf("process id: %d\n", pe32.th32ProcessID);

while(Process32Next(hProcessSnap, &pe32));

}

CloseHandle(hProcessSnap);


枚举模块module信息:

MODULEENTRY32 Mod32;

Mod32.dwSize=sizeof(Mod32);

HANDLE hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, dwPid);

if( hSnap == INVALID_HANDLE_VALUE ) 

printf("无法打开该程序模块!"); 

CloseHandle(hSnap);

return;  

}

BOOL bModule = Module32First(hSnap,&Mod32);

while(bModule)

{

printf("module process id: %d \n", Mod32.th32ProcessID);

bModule=Module32Next(hSnap,&Mod32);

}

CloseHandle(hSnap);


枚举线程Thread信息:

THREADENTRY32 te32;

te32.dwSize=sizeof(te32);

HANDLE hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, 0);

if( hSnap == INVALID_HANDLE_VALUE ) 

printf("无法打开该程序模块!"); 

CloseHandle(hSnap);

return;  

}

BOOL bThread = Thread32First(hSnap,&te32);

while(bThread)

{

        printf("owner process id: %d \n", te32.th32OwnerProcessID);

        printf("thread id: %d \n", te32.th32ThreadID);

bThread = Thread32Next(hSnap,&te32);

}

CloseHandle(hSnap);


以上是关于TlHelp32枚举进程线程模块信息的主要内容,如果未能解决你的问题,请参考以下文章

API获取当前进程的线程数。

进程枚举技术

C++/Win32 - 如何迭代特定进程的线程列表并将起始地址解析为模块?

如何从 win32 进程获取线程句柄列表?

旧文章搬运ZwQuerySystemInformation枚举进线程信息

进程(WINAPI),遍历并查找树状的进程信息,实现控制系统进程