用快照對進程、模塊、線程進行遍歷(代碼段)


前置知識:windows提供了一組快照API,使用前需要包含TlHelp32.h頭文件。

  1.能夠給當前系統中的所有進程拍一個快照,能夠獲取所有進程的一些基本信息;

  2.能夠給當前系統中的線程拍一個快照;

  3.能夠給某一個進程拍模塊快照;

  4.能夠給某一個進程拍堆快照。

一:遍歷進程

  

int _tmain(int argc, _TCHAR* argv[])
{
	HANDLE         hProcessSnap;   // 進程快照句柄
	HANDLE         hProcess;       // 進程句柄
	PROCESSENTRY32 stcPe32 = { 0 };  // 進程快照信息
	stcPe32.dwSize = sizeof(PROCESSENTRY32);
	
	// 1. 創建一個進程相關的快照句柄
	hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
	if (hProcessSnap == INVALID_HANDLE_VALUE)
		return false;

	// 2. 通過進程快照句柄獲取第一個進程信息
	if (!Process32First(hProcessSnap, &stcPe32))
	{
		CloseHandle(hProcessSnap);
		return false;
	}
	// 3. 循環遍歷進程信息
	do {
		// 3.2 獲取優先級信息
		hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, FALSE,
			stcPe32.th32ProcessID);
		if (hProcess)
		{
			int nPriority = GetPriorityClass(hProcess);//獲取進程優先級
			
			CloseHandle(hProcess);                           //關閉句柄
		}
		// 3.3 獲取進程的其他相關信息
	
		printf("進程ID:%d   ",stcPe32.th32ProcessID);
		printf("線程數:%d   ",stcPe32.cntThreads);
		printf("父進程ID:%d",stcPe32.th32ParentProcessID);
		printf("進程路徑:%s",stcPe32.szExeFile);
		printf("\n");
	} while (Process32Next(hProcessSnap, &stcPe32));
	// 4. 關閉句柄退出函數
	CloseHandle(hProcessSnap);

	return 0;
}

二:遍歷模塊

HANDLE        hModuleSnap = INVALID_HANDLE_VALUE;
	MODULEENTRY32 me32 = { sizeof(MODULEENTRY32) };
	// 1. 創建一個模塊相關的快照句柄
	hModuleSnap = CreateToolhelp32Snapshot(
		TH32CS_SNAPMODULE,  // 指定快照的類型
		dwPId);            // 指定進程
	if (hModuleSnap == INVALID_HANDLE_VALUE)
		return false;
	// 2. 通過模塊快照句柄獲取第一個模塊信息
	if (!Module32First(hModuleSnap, &me32)) {
		CloseHandle(hModuleSnap);
		return false;
	}
	// 3. 循環獲取模塊信息
	do {
		//me32.th32ProcessID;
		printf("模塊句柄%d  ",me32.hModule);
		printf("加載基址%d  ",me32.modBaseAddr);
		printf("模塊名%s  ",me32.szExePath);
		printf("\n");
	} while (Module32Next(hModuleSnap, &me32));
	// 4. 關閉句柄並退出函數
	CloseHandle(hModuleSnap);

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM