Module: wine Branch: master Commit: c66e876037b06b6fcc6faf12400fe55321bbe72c URL: https://gitlab.winehq.org/wine/wine/-/commit/c66e876037b06b6fcc6faf12400fe55...
Author: Eric Pouech eric.pouech@gmail.com Date: Mon Jan 30 13:45:50 2023 +0100
kernelbase: Let GetModuleFileNameEx succeed on 64bit modules in wow64.
Signed-off-by: Eric Pouech eric.pouech@gmail.com
---
dlls/kernelbase/debug.c | 16 +++++++++------- dlls/psapi/tests/psapi_main.c | 1 - 2 files changed, 9 insertions(+), 8 deletions(-)
diff --git a/dlls/kernelbase/debug.c b/dlls/kernelbase/debug.c index d34268c0828..fa2262daa2c 100644 --- a/dlls/kernelbase/debug.c +++ b/dlls/kernelbase/debug.c @@ -1409,7 +1409,7 @@ DWORD WINAPI DECLSPEC_HOTPATCH GetModuleFileNameExA( HANDLE process, HMODULE mod DWORD WINAPI DECLSPEC_HOTPATCH GetModuleFileNameExW( HANDLE process, HMODULE module, WCHAR *name, DWORD size ) { - BOOL wow64; + BOOL wow64, found = FALSE; DWORD len;
if (!size) return 0; @@ -1420,13 +1420,15 @@ DWORD WINAPI DECLSPEC_HOTPATCH GetModuleFileNameExW( HANDLE process, HMODULE mod { LDR_DATA_TABLE_ENTRY32 ldr_module32;
- if (!get_ldr_module32( process, module, &ldr_module32 )) return 0; - len = ldr_module32.FullDllName.Length / sizeof(WCHAR); - if (!ReadProcessMemory( process, (void *)(DWORD_PTR)ldr_module32.FullDllName.Buffer, - name, min( len, size ) * sizeof(WCHAR), NULL )) - return 0; + if (get_ldr_module32( process, module, &ldr_module32 )) + { + len = ldr_module32.FullDllName.Length / sizeof(WCHAR); + if (ReadProcessMemory( process, (void *)(DWORD_PTR)ldr_module32.FullDllName.Buffer, + name, min( len, size ) * sizeof(WCHAR), NULL )) + found = TRUE; + } } - else + if (!found) { LDR_DATA_TABLE_ENTRY ldr_module;
diff --git a/dlls/psapi/tests/psapi_main.c b/dlls/psapi/tests/psapi_main.c index 15b168cf83f..2237bad3665 100644 --- a/dlls/psapi/tests/psapi_main.c +++ b/dlls/psapi/tests/psapi_main.c @@ -243,7 +243,6 @@ static BOOL test_EnumProcessModulesEx_snapshot(HANDLE proc, struct moduleex_snap ret = GetModuleBaseNameA(proc, mxsnap[i].modules[j], buffer, sizeof(buffer)); ok(ret, "GetModuleBaseName failed: %lu (%u/%lu=%p)\n", GetLastError(), j, mxsnap[i].num_modules, mxsnap[i].modules[j]); ret = GetModuleFileNameExA(proc, mxsnap[i].modules[j], buffer, sizeof(buffer)); - todo_wine_if(fail) ok(ret, "GetModuleFileNameEx failed: %lu (%u/%lu=%p)\n", GetLastError(), j, mxsnap[i].num_modules, mxsnap[i].modules[j]); memset(&info, 0, sizeof(info)); ret = GetModuleInformation(proc, mxsnap[i].modules[j], &info, sizeof(info));