進(jìn)程遍歷工具(ProcessView),由吾愛大神原創(chuàng)制作的一個(gè)進(jìn)程遍歷工具,本次帶來源碼資源下載,使用C++編輯器環(huán)境進(jìn)行導(dǎo)入編輯即可,可以在進(jìn)程列表欄目上查詢進(jìn)程模塊,進(jìn)程線程,進(jìn)程窗口等信息,查看進(jìn)程和線程的ID,基址和大小等項(xiàng)目,是編程人員根據(jù)進(jìn)程來進(jìn)行一系列操作的好幫手。
進(jìn)程遍歷工具作者說明
學(xué)習(xí)WIN32編程的時(shí)候,做了一個(gè)進(jìn)程遍歷工具,支持dll注入,供大家學(xué)習(xí)參考下
查詢進(jìn)程模塊源碼
//遍歷模塊信息,添加到列表
void CMyModuleInfoDlg::GetModuleInfo()
{
//拍進(jìn)程快照
HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, m_ProcessId);
//獲取快照失敗,直接返回
if (INVALID_HANDLE_VALUE == hSnapshot)
{
return;
}
MODULEENTRY32 me32 = { 0 };
me32.dwSize = sizeof(MODULEENTRY32);
//遍歷進(jìn)程
if (Module32First(hSnapshot, &me32))
{
int nRow = 0;
CString strFmt;
do
{
//將模塊路徑加入列表
m_ListCtrl.InsertItem(nRow, me32.szExePath);
//將模塊基地址加入列表
strFmt.Format(_T("0x%016X"), me32.modBaseAddr);
m_ListCtrl.SetItemText(nRow, 1, strFmt);
//將模塊大小加入列表
strFmt.Format(_T("0x%016X"), me32.modBaseSize);
m_ListCtrl.SetItemText(nRow, 2, strFmt);
nRow++;
} while (Module32Next(hSnapshot, &me32));
}
//關(guān)閉句柄
CloseHandle(hSnapshot);
相關(guān)新聞
進(jìn)程原理:
首先通過CreateToolhelp32Snapshot函數(shù)創(chuàng)建一個(gè)進(jìn)程的快照,然后通過調(diào)用Process32First使用快照返回的句柄對(duì)進(jìn)程進(jìn)行遍歷,相關(guān)的信息存放在PROCESSENTRY32結(jié)構(gòu)類型的實(shí)例中,通過調(diào)用內(nèi)部的一個(gè)函數(shù)GetProcessModule,獲取對(duì)應(yīng)的進(jìn)程的模塊名稱,然后通過對(duì)進(jìn)程地址空間信息的讀取,從而獲取相應(yīng)的線程的ID等的信息。