人人做人人澡人人爽欧美,国产主播一区二区,久久久精品五月天,羞羞视频在线观看免费

當(dāng)前位置:蘿卜系統(tǒng)下載站 > 技術(shù)開發(fā)教程 > 詳細(xì)頁面

VC++中如何取得進程模塊的信息

VC++中如何取得進程模塊的信息

更新時間:2022-08-17 文章作者:未知 信息來源:網(wǎng)絡(luò) 閱讀次數(shù):

一、 實現(xiàn)原理: 

    首先通過CreateToolhelp32Snapshot函數(shù)創(chuàng)建一個進程的快照,然后通過調(diào)用Process32First使用快照返回的句柄對進程進行遍歷,相關(guān)的信息存放在PROCESSENTRY32結(jié)構(gòu)類型的實例中,通過調(diào)用內(nèi)部的一個函數(shù)GetProcessModule,獲取對應(yīng)的進程的模塊名稱,然后通過對進程地址空間信息的讀取,從而獲取相應(yīng)的線程的ID等的信息。 

二、主要實現(xiàn)代碼: 

獲取進程地址空間內(nèi)的相關(guān)信息: 

hProcess = OpenProcess (PROCESS_ALL_ACCESS, 
FALSE, pe32.th32ProcessID); 

pfGetProcessMemoryInfo(hProcess,pmc,sizeof(pmc)); 


獲取進程的模塊信息: 

BOOL CEmuteFileDlg::GetProcessModule(DWORD dwPID, DWORD dwModuleID, LPMODULEENTRY32 lpMe32, DWORD cbMe32) 

BOOL bRet = FALSE; 
BOOL bFound = FALSE; 
HANDLE hModuleSnap = NULL; 
MODULEENTRY32 me32 = {0}; 

// Take a snapshot of all modules in the specified process. 

hModuleSnap = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, dwPID); 


if (hModuleSnap == INVALID_HANDLE_VALUE) 
return (FALSE); 

// Fill the size of the structure before using it. 

me32.dwSize = sizeof(MODULEENTRY32); 

// Walk the module list of the process, and find the module of 
// interest. Then copy the information to the buffer pointed 
// to by lpMe32 so that it can be returned to the caller. 

if (Module32First(hModuleSnap, &me32)) 

do 

if (me32.th32ModuleID == dwModuleID) 

CopyMemory (lpMe32, &me32, cbMe32); 
bFound = TRUE; 


while (!bFound && Module32Next(hModuleSnap, &me32)); 

bRet = bFound; // if this sets bRet to FALSE, dwModuleID 
// no longer exists in specified process 

else 
bRet = FALSE; // could not walk module list 

// Do not forget to clean up the snapshot object. 

CloseHandle (hModuleSnap); 

return (bRet); 


三、提高權(quán)限: 

BOOL EnableDebugPrivilege() 


HANDLE hToken; 
BOOL fOk=FALSE; 
if(OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES,&hToken)) 

TOKEN_PRIVILEGES tp; 
tp.PrivilegeCount=1; 
if(!LookupPrivilegeValue(NULL,SE_DEBUG_NAME,&tp.Privileges[0].Luid)) 
printf("Can’t lookup privilege value.\n"); 
tp.Privileges[0].Attributes=SE_PRIVILEGE_ENABLED; 
if(!AdjustTokenPrivileges(hToken,FALSE,&tp,sizeof(tp),NULL,NULL)) 
printf("Can’t adjust privilege value.\n"); 
fOk=(GetLastError()==ERROR_SUCCESS); 
CloseHandle(hToken); 

return fOk; 


四、后記: 

我感覺信息獲取的不夠完整,比如說,我很想知道怎么才能獲取進程的線程的模塊名稱,不知道那位大俠不吝賜教! 

monkeycd@163.com 

thanx!

溫馨提示:喜歡本站的話,請收藏一下本站!

本類教程下載

系統(tǒng)下載排行

網(wǎng)站地圖xml | 網(wǎng)站地圖html
主站蜘蛛池模板: 绥棱县| 大丰市| 丰原市| 漳浦县| 敦化市| 页游| 佛教| 固原市| 墨竹工卡县| 安龙县| 桑日县| 获嘉县| 彩票| 五大连池市| 根河市| 福州市| 晴隆县| 河北区| 衡水市| 南陵县| 洪江市| 永寿县| 友谊县| 乳山市| 安化县| 天全县| 沾益县| 正安县| 平果县| 石阡县| 古田县| 安庆市| 温宿县| 海淀区| 舟曲县| 革吉县| 平度市| 巴彦淖尔市| 宣化县| 渝中区| 安国市|