列举进程对应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会出错