Alexandre Julliard : winedbg: Use QueryFullProcessImageNameW to retrieve the main image name.
Alexandre Julliard
julliard at winehq.org
Tue Apr 13 16:31:20 CDT 2021
Module: wine
Branch: master
Commit: 39b20a2bd375828739fb3d3f141ad5dade76bb80
URL: https://source.winehq.org/git/wine.git/?a=commit;h=39b20a2bd375828739fb3d3f141ad5dade76bb80
Author: Alexandre Julliard <julliard at winehq.org>
Date: Tue Apr 13 12:14:15 2021 +0200
winedbg: Use QueryFullProcessImageNameW to retrieve the main image name.
Remove the psapi fallback that didn't work anyway.
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
programs/winedbg/gdbproxy.c | 7 +++----
programs/winedbg/tgt_active.c | 36 ++++++++++--------------------------
2 files changed, 13 insertions(+), 30 deletions(-)
diff --git a/programs/winedbg/gdbproxy.c b/programs/winedbg/gdbproxy.c
index a19b5950ccc..4fd669032ec 100644
--- a/programs/winedbg/gdbproxy.c
+++ b/programs/winedbg/gdbproxy.c
@@ -404,6 +404,7 @@ static BOOL handle_debug_event(struct gdb_context* gdbctx)
char bufferA[256];
WCHAR buffer[256];
} u;
+ DWORD size;
gdbctx->exec_tid = de->dwThreadId;
gdbctx->other_tid = de->dwThreadId;
@@ -417,10 +418,8 @@ static BOOL handle_debug_event(struct gdb_context* gdbctx)
if (!gdbctx->process)
return TRUE;
- memory_get_string_indirect(gdbctx->process,
- de->u.CreateProcessInfo.lpImageName,
- de->u.CreateProcessInfo.fUnicode,
- u.buffer, ARRAY_SIZE(u.buffer));
+ size = ARRAY_SIZE(u.buffer);
+ QueryFullProcessImageNameW( gdbctx->process->handle, 0, u.buffer, &size );
dbg_set_process_name(gdbctx->process, u.buffer);
fprintf(stderr, "%04x:%04x: create process '%s'/%p @%p (%u<%u>)\n",
diff --git a/programs/winedbg/tgt_active.c b/programs/winedbg/tgt_active.c
index e71f4615735..a38fe41dfc5 100644
--- a/programs/winedbg/tgt_active.c
+++ b/programs/winedbg/tgt_active.c
@@ -297,33 +297,15 @@ static DWORD dbg_handle_exception(const EXCEPTION_RECORD* rec, BOOL first_chance
static BOOL tgt_process_active_close_process(struct dbg_process* pcs, BOOL kill);
static void fetch_module_name(void* name_addr, BOOL unicode, void* mod_addr,
- WCHAR* buffer, size_t bufsz, BOOL is_pcs)
+ WCHAR* buffer, size_t bufsz)
{
- static const WCHAR pcspid[] = {'P','r','o','c','e','s','s','_','%','0','8','x',0};
static const WCHAR dlladdr[] = {'D','L','L','_','%','0','8','l','x',0};
memory_get_string_indirect(dbg_curr_process, name_addr, unicode, buffer, bufsz);
if (!buffer[0] &&
!GetModuleFileNameExW(dbg_curr_process->handle, mod_addr, buffer, bufsz))
{
- if (is_pcs)
- {
- HMODULE h;
- WORD (WINAPI *gpif)(HANDLE, LPWSTR, DWORD);
-
- /* On Windows, when we get the process creation debug event for a process
- * created by winedbg, the modules' list is not initialized yet. Hence,
- * GetModuleFileNameExA (on the main module) will generate an error.
- * Psapi (starting on XP) provides GetProcessImageFileName() which should
- * give us the expected result
- */
- if (!(h = GetModuleHandleA("psapi")) ||
- !(gpif = (void*)GetProcAddress(h, "GetProcessImageFileNameW")) ||
- !(gpif)(dbg_curr_process->handle, buffer, bufsz))
- snprintfW(buffer, bufsz, pcspid, dbg_curr_pid);
- }
- else
- snprintfW(buffer, bufsz, dlladdr, (ULONG_PTR)mod_addr);
+ snprintfW(buffer, bufsz, dlladdr, (ULONG_PTR)mod_addr);
}
}
@@ -333,7 +315,7 @@ static unsigned dbg_handle_debug_event(DEBUG_EVENT* de)
char bufferA[256];
WCHAR buffer[256];
} u;
- DWORD cont = DBG_CONTINUE;
+ DWORD size, cont = DBG_CONTINUE;
dbg_curr_pid = de->dwProcessId;
dbg_curr_tid = de->dwThreadId;
@@ -383,10 +365,12 @@ static unsigned dbg_handle_debug_event(DEBUG_EVENT* de)
WINE_ERR("Couldn't create process\n");
break;
}
- fetch_module_name(de->u.CreateProcessInfo.lpImageName,
- de->u.CreateProcessInfo.fUnicode,
- de->u.CreateProcessInfo.lpBaseOfImage,
- u.buffer, ARRAY_SIZE(u.buffer), TRUE);
+ size = ARRAY_SIZE(u.buffer);
+ if (!QueryFullProcessImageNameW( dbg_curr_process->handle, 0, u.buffer, &size ))
+ {
+ static const WCHAR pcspid[] = {'P','r','o','c','e','s','s','_','%','0','8','x',0};
+ snprintfW( u.buffer, ARRAY_SIZE(u.buffer), pcspid, dbg_curr_pid);
+ }
WINE_TRACE("%04x:%04x: create process '%s'/%p @%p (%u<%u>)\n",
de->dwProcessId, de->dwThreadId,
@@ -481,7 +465,7 @@ static unsigned dbg_handle_debug_event(DEBUG_EVENT* de)
fetch_module_name(de->u.LoadDll.lpImageName,
de->u.LoadDll.fUnicode,
de->u.LoadDll.lpBaseOfDll,
- u.buffer, ARRAY_SIZE(u.buffer), FALSE);
+ u.buffer, ARRAY_SIZE(u.buffer));
WINE_TRACE("%04x:%04x: loads DLL %s @%p (%u<%u>)\n",
de->dwProcessId, de->dwThreadId,
More information about the wine-cvs
mailing list