#include <Windows.h>
#include <tchar.h>
#include <TlHelp32.h>
#include <vector>
#include <map>
#include <iostream>
using namespace std;
PVOID GetModulBaseAddr(DWORD dwProcessID,PVOID pvModuleRemote)
{
PVOID pvBaseAddr = NULL;
IMAGE_DOS_HEADER dosHdr;
IMAGE_NT_HEADERS ntHdr;
Toolhelp32ReadProcessMemory(dwProcessID,pvModuleRemote,&dosHdr,sizeof(dosHdr),NULL);
if(dosHdr.e_magic == IMAGE_DOS_SIGNATURE)
{
Toolhelp32ReadProcessMemory(dwProcessID,(PBYTE)pvModuleRemote+dosHdr.e_lfanew,&ntHdr,sizeof(ntHdr),NULL);
if(ntHdr.Signature == IMAGE_NT_SIGNATURE)
{
pvBaseAddr = (PVOID)ntHdr.OptionalHeader.ImageBase;
}
}
return pvBaseAddr;
}
int main()
{
HANDLE hHandle = CreateToolhelp32Snapshot(TH32CS_SNAPALL,0);
PROCESSENTRY32 pe;
pe.dwSize = sizeof(pe);
BOOL bOk = Process32First(hHandle,&pe);
int ProcessCnt = 0;
while(bOk)
{
ProcessCnt++;
if(pe.th32ProcessID == 0)
{
bOk = Process32Next(hHandle,&pe);
if(!bOk) break;
}
wcout<<"进程名:"<<pe.szExeFile<<endl;
wcout<<"进程ID:"<<pe.th32ProcessID<<endl;
wcout<<"父进程ID:"<<pe.th32ParentProcessID<<endl;
wcout<<"进程优先级:"<<pe.pcPriClassBase<<endl;
wcout<<"子线程个数:"<<pe.cntThreads<<endl;
HANDLE hHandle2 = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE,pe.th32ProcessID);
MODULEENTRY32 me;
me.dwSize = sizeof(me);
if(Module32First(hHandle2,&me))
{
// if(me.th32ProcessID == pe.th32ProcessID)
{
wcout<<"模块名:"<<_tcsrchr(me.szExePath,TEXT('\\'))+1;
PVOID pAddr = GetModulBaseAddr(pe.th32ProcessID,me.modBaseAddr);
if(pAddr == me.modBaseAddr)
{
wcout<<" 模块地址:"<<(LPINT)pAddr<<endl;
}
else
{
wcout<<" 模块地址:("<<(LPINT)me.modBaseAddr<<")"<<endl;
}
}
while(Module32Next(hHandle2,&me))
{
// if(me.th32ProcessID == pe.th32ProcessID)
{
wcout<<"模块名:"<<_tcsrchr(me.szExePath,TEXT('\\'))+1;
PVOID pAddr = GetModulBaseAddr(pe.th32ProcessID,me.modBaseAddr);
if(pAddr == me.modBaseAddr)
{
wcout<<" 模块李承鹏地址:"<<(LPINT)pAddr<<endl;
}
else
{
wcout<<" 模块地址:("<<(LPINT)me.modBaseAddr<<")"<<endl;
}
}
}
}
THREADENTRY32 te;
te.dwSize = sizeof(te);
if(Thread32First(hHandle,&te))
{
if(te.th32OwnerProcessID == pe.th32ProcessID)
wcout<<" 线程ID:"<<te.th32ThreadID;
while(Thread32Next(hHandle,&te))
{
if(te.th32OwnerProcessID == pe.th32ProcessID)
wcout<<" 线程ID:"<<te.th32ThreadID;
}
}
wcout<<endl<<"============================"<<endl;
bOk = Process32Next(hHandle,&pe);
}
wcout<<"共统计进程数"<<ProcessCnt<<endl;
getchar();
return 0;
}
所有进程的名字和他使用的模块名以及其它信息
最新推荐文章于 2024-02-07 11:42:06 发布