MCPcopy Create free account
hub / github.com/ThirteenAG/WidescreenFixesPack / Enumerate

Method Enumerate

includes/ModuleList.hpp:21–77  ·  view source on GitHub ↗

Initializes module list Needs to be called before any calls to Get or GetAll

Source from the content-addressed store, hash-verified

19 // Initializes module list
20 // Needs to be called before any calls to Get or GetAll
21 void Enumerate(SearchLocation location = SearchLocation::All)
22 {
23 constexpr size_t INITIAL_SIZE = sizeof(HMODULE) * 256;
24 HMODULE* modules = static_cast<HMODULE*>(malloc(INITIAL_SIZE));
25 if (modules != nullptr)
26 {
27 typedef BOOL(WINAPI * Func)(HANDLE hProcess, HMODULE *lphModule, DWORD cb, LPDWORD lpcbNeeded);
28
29 HMODULE hLib = LoadLibrary(TEXT("kernel32"));
30 assert(hLib != nullptr); // If this fails then everything is probably broken anyway
31
32 Func pEnumProcessModules = reinterpret_cast<Func>(GetProcAddress(hLib, "K32EnumProcessModules"));
33 if (pEnumProcessModules == nullptr)
34 {
35 // Try psapi
36 FreeLibrary(hLib);
37 hLib = LoadLibrary(TEXT("psapi"));
38 if (hLib != nullptr)
39 {
40 pEnumProcessModules = reinterpret_cast<Func>(GetProcAddress(hLib, "EnumProcessModules"));
41 }
42 }
43
44 if (pEnumProcessModules != nullptr)
45 {
46 const HANDLE currentProcess = GetCurrentProcess();
47 DWORD cbNeeded = 0;
48 if (pEnumProcessModules(currentProcess, modules, INITIAL_SIZE, &cbNeeded) != 0)
49 {
50 if (cbNeeded > INITIAL_SIZE)
51 {
52 HMODULE* newModules = static_cast<HMODULE*>(realloc(modules, cbNeeded));
53 if (newModules != nullptr)
54 {
55 modules = newModules;
56
57 if (pEnumProcessModules(currentProcess, modules, cbNeeded, &cbNeeded) != 0)
58 {
59 EnumerateInternal(modules, location, cbNeeded / sizeof(HMODULE));
60 }
61 }
62 }
63 else
64 {
65 EnumerateInternal(modules, location, cbNeeded / sizeof(HMODULE));
66 }
67 }
68 }
69
70 if (hLib != nullptr)
71 {
72 FreeLibrary(hLib);
73 }
74
75 free(modules);
76 }
77 }
78

Callers 1

InitFunction · 0.80

Calls

no outgoing calls

Tested by

no test coverage detected