Am 26.07.26 um 12:18 schrieb Evgeny:
ping
https://patchew.org/QEMU/[email protected]/
https://lists.gnu.org/archive/html/qemu-devel/2026-06/msg05258.html
On Sun, Jun 21, 2026 at 4:08 PM Evgeny Kolmakov
<[email protected]> wrote:
Replace the abort() stub with a proper implementation using
QueryFullProcessImageNameW() and g_utf16_to_utf8() to retrieve
the process executable name on Windows. Returns NULL on error
to match POSIX behavior.
Signed-off-by: Evgeny Kolmakov <[email protected]>
---
util/oslib-win32.c | 19 +++++++++++++++++--
1 file changed, 17 insertions(+), 2 deletions(-)
diff --git a/util/oslib-win32.c b/util/oslib-win32.c
index 5f3e8f4d98..2b083b5d7a 100644
--- a/util/oslib-win32.c
+++ b/util/oslib-win32.c
@@ -287,8 +287,23 @@ bool qemu_finish_async_prealloc_mem(Error **errp)
char *qemu_get_pid_name(pid_t pid)
{
- /* XXX Implement me */
- abort();
+ HANDLE hProcess;
+ WCHAR path[4096];
Would it be better to dynamically allocate the maximum path length (32768)?
+ DWORD size = G_N_ELEMENTS(path);
+ char *name = NULL;
+
+ hProcess = OpenProcess(PROCESS_QUERY_LIMITED_INFORMATION,
FALSE, (DWORD)pid);
+ if (!hProcess) {
+ return NULL;
+ }
+
+ if (QueryFullProcessImageNameW(hProcess, 0, path, &size)) {
+ const WCHAR *base = wcsrchr(path, L'\\');
+ name = g_utf16_to_utf8(base ? base + 1 : path, -1, NULL,
NULL, NULL);
I think that base will never be NULL, so the code here could be simplified.
+ }
+
+ CloseHandle(hProcess);
+ return name;
}
--
2.43.0
Do you have a special use case which requires this implementation
because it triggers the assertion otherwise?
Regards
Stefan Weil