diff --git a/src/hook.cpp b/src/hook.cpp index dad42f5..e8553dc 100644 --- a/src/hook.cpp +++ b/src/hook.cpp @@ -2,7 +2,10 @@ #include +#include +#include #include +#include #include #include @@ -618,17 +621,24 @@ unsigned int hook_pkfs_open(const char* name) { } static void dump_loaded_dll_info() { - log_verbose("DLLs loaded:"); - auto peb = NtCurrentTeb()->ProcessEnvironmentBlock; - auto head = peb->Ldr->InMemoryOrderModuleList.Flink; - bool first = true; - for (auto mod = head; mod && (first || mod != head); mod = mod->Flink) { - auto ldr = reinterpret_cast(mod); - std::string narrow_dll_name( - ldr->FullDllName.Buffer, ldr->FullDllName.Buffer + ldr->FullDllName.Length); - log_verbose(" {}", narrow_dll_name); - first = false; + HANDLE snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, GetCurrentProcessId()); + if (snapshot == INVALID_HANDLE_VALUE) { + log_verbose("Could not dump loaded DLLs"); + return; } + + ScopeGuard _guard([=]() { CloseHandle(snapshot); }); + + MODULEENTRY32 mod = {.dwSize = sizeof(mod)}; + if (!Module32First(snapshot, &mod)) { + log_verbose("Could not dump loaded DLLs (Module32First)"); + return; + } + + log_verbose("DLLs loaded:"); + do { + log_verbose(" {}", mod.szModule); + } while (Module32Next(snapshot, &mod)); } extern "C" {