#include <windows.h>
#include <Tlhelp32.h>
#include <stdio.h>
bool ProcessProc(void);
bool ProcessModule(DWORD);
int main (void)
{
ProcessProc();
return 0;
}
bool ProcessProc(void)
{
//擷取程序快照
HANDLE hProcessSnap=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
if (hProcessSnap)
{
PROCESSENTRY32 pe32;
pe32.dwSize=sizeof(PROCESSENTRY32);
if (!Process32First(hProcessSnap,&pe32)) //查找第一個程序
{
printf("列舉程序失敗\n");
CloseHandle(hProcessSnap);
return false;
}
do
{
printf("%s\t\t\t%d\n",pe32.szExeFile,pe32.th32ProcessID); //可執行子產品的名字//程序标示符
ProcessModule(pe32.th32ProcessID);//擷取程序子產品資訊
} while (Process32Next(hProcessSnap,&pe32));//查找下一個程序
}
else
{
printf("擷取程序快照失敗\n");
return true;
}
return true;
}
bool ProcessModule(DWORD pid)
{
HANDLE hProcessSnap=CreateToolhelp32Snapshot(TH32CS_SNAPMODULE,pid);
if (hProcessSnap)
{
MODULEENTRY32 me32;
me32.dwSize=sizeof(MODULEENTRY32);
Module32First(hProcessSnap,&me32);//擷取程序第一個子產品資訊
do
{
//printf("子產品路徑:%s\n",me32.szExePath);
printf("子產品名:%s\n",me32.szModule);
printf("子產品基址:0x%08X\n",(DWORD)me32.modBaseAddr);
}
while (Module32Next(hProcessSnap,&me32));
CloseHandle(hProcessSnap);
return true;
}
else
{
printf("擷取程序快照失敗\n");
return false;
}
return true;
}