From: Eric Pouech eric.pouech@gmail.com
Even is MSDN states that it enumerates modules' name, the first parameter to the callback is the fullpath to the image. So - fix EnumerateLoadedModules() to pass the image name for the considered module - fix all callbacks in Wine code to EnumerateLoadedModules to handle the image name instead of module name
Signed-off-by: Eric Pouech eric.pouech@gmail.com --- dlls/dbghelp/dbghelp.c | 6 +----- dlls/dbghelp/minidump.c | 8 ++------ dlls/dbghelp/module.c | 7 +++---- dlls/dbghelp/tests/dbghelp.c | 2 -- 4 files changed, 6 insertions(+), 17 deletions(-)
diff --git a/dlls/dbghelp/dbghelp.c b/dlls/dbghelp/dbghelp.c index 67ac7765c6f..81a0d50f25d 100644 --- a/dlls/dbghelp/dbghelp.c +++ b/dlls/dbghelp/dbghelp.c @@ -306,13 +306,9 @@ BOOL WINAPI SymGetSearchPath(HANDLE hProcess, PSTR szSearchPath, */ static BOOL WINAPI process_invade_cb(PCWSTR name, ULONG64 base, ULONG size, PVOID user) { - WCHAR tmp[MAX_PATH]; HANDLE hProcess = user;
- if (!GetModuleFileNameExW(hProcess, (HMODULE)(DWORD_PTR)base, tmp, ARRAY_SIZE(tmp))) - lstrcpynW(tmp, name, ARRAY_SIZE(tmp)); - - SymLoadModuleExW(hProcess, 0, tmp, name, base, size, NULL, 0); + SymLoadModuleExW(hProcess, 0, name, NULL, base, size, NULL, 0); return TRUE; }
diff --git a/dlls/dbghelp/minidump.c b/dlls/dbghelp/minidump.c index 4d3818a8f54..11ce767aa71 100644 --- a/dlls/dbghelp/minidump.c +++ b/dlls/dbghelp/minidump.c @@ -213,12 +213,8 @@ static BOOL add_module(struct dump_context* dc, const WCHAR* name, dc->alloc_modules = dc->num_modules = 0; return FALSE; } - if (is_elf || - !GetModuleFileNameExW(dc->process->handle, (HMODULE)(DWORD_PTR)base, - dc->modules[dc->num_modules].name, - ARRAY_SIZE(dc->modules[dc->num_modules].name))) - lstrcpynW(dc->modules[dc->num_modules].name, name, - ARRAY_SIZE(dc->modules[dc->num_modules].name)); + lstrcpynW(dc->modules[dc->num_modules].name, name, + ARRAY_SIZE(dc->modules[dc->num_modules].name)); dc->modules[dc->num_modules].base = base; dc->modules[dc->num_modules].size = size; dc->modules[dc->num_modules].timestamp = timestamp; diff --git a/dlls/dbghelp/module.c b/dlls/dbghelp/module.c index 5b99b5eea58..4bd7b0e5009 100644 --- a/dlls/dbghelp/module.c +++ b/dlls/dbghelp/module.c @@ -1270,7 +1270,7 @@ BOOL WINAPI EnumerateLoadedModulesW64(HANDLE hProcess, PVOID UserContext) { HMODULE* hMods; - WCHAR baseW[256], modW[256]; + WCHAR imagenameW[MAX_PATH]; DWORD i, sz; MODULEINFO mi; BOOL wow64; @@ -1300,10 +1300,9 @@ BOOL WINAPI EnumerateLoadedModulesW64(HANDLE hProcess, for (i = 0; i < sz; i++) { if (!GetModuleInformation(hProcess, hMods[i], &mi, sizeof(mi)) || - !GetModuleBaseNameW(hProcess, hMods[i], baseW, ARRAY_SIZE(baseW))) + !GetModuleFileNameExW(hProcess, hMods[i], imagenameW, ARRAY_SIZE(imagenameW))) continue; - module_fill_module(baseW, modW, ARRAY_SIZE(modW)); - EnumLoadedModulesCallback(modW, (DWORD_PTR)mi.lpBaseOfDll, mi.SizeOfImage, + EnumLoadedModulesCallback(imagenameW, (DWORD_PTR)mi.lpBaseOfDll, mi.SizeOfImage, UserContext); } HeapFree(GetProcessHeap(), 0, hMods); diff --git a/dlls/dbghelp/tests/dbghelp.c b/dlls/dbghelp/tests/dbghelp.c index 015f045d213..8f2d6ce1991 100644 --- a/dlls/dbghelp/tests/dbghelp.c +++ b/dlls/dbghelp/tests/dbghelp.c @@ -326,10 +326,8 @@ static BOOL CALLBACK aggregate_cb(PCWSTR imagename, DWORD64 base, ULONG sz, PVOI { ok(!ret, "Module %ls shouldn't be loaded\n", imagename); ret = SymLoadModuleExW(aggregation->proc, NULL, imagename, NULL, base, sz, NULL, 0); - todo_wine ok(ret, "SymLoadModuleExW failed on %ls: %lu\n", imagename, GetLastError()); ret = SymGetModuleInfoW64(aggregation->proc, base, &im); - todo_wine ok(ret, "SymGetModuleInfoW64 failed: %lu\n", GetLastError()); } if (image_len >= 4 && !wcsicmp(imagename + image_len - 4, L".exe"))