列举进程对应Module其实是个比较常见的问题,最开始想到的是TlHelp32.h头文件里的Module32First和Module32Next函数,代码很简单:
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | BOOL CProcessExplorer::SimpleReadModule(DWORD dwProcessID) { 	HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, dwProcessID); 	if (INVALID_HANDLE_VALUE == hSnapshot) 	{ 		return FALSE; 	} 	MODULEENTRY32 me32 = { sizeof(MODULEENTRY32) }; 	if (!Module32First(hSnapshot, &me32)) 	{ 		CloseHandle(hSnapshot); 		return FALSE; 	} 	do 	{ 		//这里根据me32结构体做自己的事情 	} while (Module32Next(hSnapshot, &me32)); 	CloseHandle(hSnapshot); 	return TRUE; } | 
但是运行起来会发现,通过这套函数在编译成64位的时候,读32位的程序的Module会出错