From bc9a58174b75c445dcb14259443a74746f0b3d43 Mon Sep 17 00:00:00 2001 From: jp9000 Date: Mon, 6 Mar 2017 18:21:53 -0800 Subject: [PATCH] UI/updater: Use better function for getting process names EnumProcessModules may not work correctly cross-arch, so use GetProcessImageFileName instead to ensure no issues in that case. --- UI/win-update/updater/updater.cpp | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/UI/win-update/updater/updater.cpp b/UI/win-update/updater/updater.cpp index bbff86da8..5ada4618d 100644 --- a/UI/win-update/updater/updater.cpp +++ b/UI/win-update/updater/updater.cpp @@ -480,8 +480,9 @@ try { static inline DWORD WaitIfOBS(DWORD id, const wchar_t *expected) { - wchar_t name[MAX_PATH]; - *name = 0; + wchar_t path[MAX_PATH]; + wchar_t *name; + *path = 0; WinHandle proc = OpenProcess( PROCESS_QUERY_INFORMATION | @@ -491,13 +492,14 @@ static inline DWORD WaitIfOBS(DWORD id, const wchar_t *expected) if (!proc.Valid()) return WAITIFOBS_WRONG_PROCESS; - HMODULE mod; - DWORD temp; - - if (!EnumProcessModules(proc, &mod, sizeof(mod), &temp)) + if (!GetProcessImageFileName(proc, path, _countof(path))) return WAITIFOBS_WRONG_PROCESS; - GetModuleBaseName(proc, mod, name, _countof(name)); + name = wcsrchr(path, L'\\'); + if (name) + name += 1; + else + name = path; if (_wcsnicmp(name, expected, 5) == 0) { HANDLE hWait[2]; @@ -505,7 +507,6 @@ static inline DWORD WaitIfOBS(DWORD id, const wchar_t *expected) hWait[1] = cancelRequested; int i = WaitForMultipleObjects(2, hWait, false, INFINITE); - DWORD err = GetLastError(); if (i == WAIT_OBJECT_0 + 1) return WAITIFOBS_CANCELLED;