#include #include #include #include "dxwnd.h" #include "dxwcore.hpp" //#include #include //#include //#include "dxwnd.h" extern void HookModule(HMODULE, int); extern void HookOpenGLLibs(HMODULE, char *); extern void DumpImportTable(HMODULE); BOOL ListProcessModules(BOOL hook) { HANDLE hModuleSnap = INVALID_HANDLE_VALUE; MODULEENTRY32 me32; // Take a snapshot of all modules in the specified process. hModuleSnap = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, GetCurrentProcessId()); if( hModuleSnap == INVALID_HANDLE_VALUE){ OutTraceD("CreateToolhelp32Snapshot ERROR: err=%d\n", GetLastError()); return false; } // Set the size of the structure before using it. me32.dwSize = sizeof( MODULEENTRY32 ); // Retrieve information about the first module, // and exit if unsuccessful if( !Module32First(hModuleSnap, &me32)){ OutTraceE("Module32First ERROR: err=%d\n", GetLastError()); // Show cause of failure CloseHandle(hModuleSnap); // Must clean up the snapshot object! return false; } // Now walk the module list of the process, // and display information about each module do { if(IsDebug){ OutTraceD("MODULE NAME:%s\n", me32.szModule ); OutTraceD(" executable = %s\n", me32.szExePath ); OutTraceD(" process ID = 0x%08X\n", me32.th32ProcessID ); OutTraceD(" ref count (g) = 0x%04X\n", me32.GlblcntUsage ); OutTraceD(" ref count (p) = 0x%04X\n", me32.ProccntUsage ); OutTraceD(" base address = 0x%08X\n", (DWORD) me32.modBaseAddr ); OutTraceD(" base size = %d\n", me32.modBaseSize ); } extern void HookSysLibs(HMODULE); if(hook) HookSysLibs((HMODULE)me32.modBaseAddr); if (IsDebug) DumpImportTable((HMODULE)me32.modBaseAddr); } while( Module32Next( hModuleSnap, &me32 ) ); // Do not forget to clean up the snapshot object. CloseHandle( hModuleSnap ); return true; }