[PATCH 5/5] win32u: Use user_callbacks for alertable NtWaitForMultipleObjects calls.

Jacek Caban wine at gitlab.winehq.org
Tue May 31 07:52:17 CDT 2022


From: Jacek Caban <jacek at codeweavers.com>

Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=53020
Signed-off-by: Jacek Caban <jacek at codeweavers.com>
---
 dlls/user32/user_main.c      | 1 +
 dlls/win32u/driver.c         | 7 +++++--
 dlls/win32u/ntuser_private.h | 1 +
 3 files changed, 7 insertions(+), 2 deletions(-)

diff --git a/dlls/user32/user_main.c b/dlls/user32/user_main.c
index 9cd9bd60146..e470d2ad688 100644
--- a/dlls/user32/user_main.c
+++ b/dlls/user32/user_main.c
@@ -162,6 +162,7 @@ static const struct user_callbacks user_funcs =
     EndMenu,
     ImmProcessKey,
     ImmTranslateMessage,
+    NtWaitForMultipleObjects,
     free_win_ptr,
     MENU_GetSysMenu,
     MENU_IsMenuActive,
diff --git a/dlls/win32u/driver.c b/dlls/win32u/driver.c
index b4cea3d42c8..1f538d100ed 100644
--- a/dlls/win32u/driver.c
+++ b/dlls/win32u/driver.c
@@ -813,8 +813,11 @@ static NTSTATUS nulldrv_MsgWaitForMultipleObjectsEx( DWORD count, const HANDLE *
 {
     if (!count && timeout && !timeout->QuadPart) return WAIT_TIMEOUT;
 
-    return NtWaitForMultipleObjects( count, handles, !(flags & MWMO_WAITALL),
-                                     !!(flags & MWMO_ALERTABLE), timeout );
+    if (!user_callbacks)
+        return NtWaitForMultipleObjects( count, handles, !(flags & MWMO_WAITALL),
+                                         !!(flags & MWMO_ALERTABLE), timeout );
+    return user_callbacks->pNtWaitForMultipleObjects( count, handles, !(flags & MWMO_WAITALL),
+                                                      !!(flags & MWMO_ALERTABLE), timeout );
 }
 
 static void nulldrv_ReleaseDC( HWND hwnd, HDC hdc )
diff --git a/dlls/win32u/ntuser_private.h b/dlls/win32u/ntuser_private.h
index 931c87a6e1c..e39e3f54169 100644
--- a/dlls/win32u/ntuser_private.h
+++ b/dlls/win32u/ntuser_private.h
@@ -35,6 +35,7 @@ struct user_callbacks
     BOOL (WINAPI *pEndMenu)(void);
     BOOL (WINAPI *pImmProcessKey)(HWND, HKL, UINT, LPARAM, DWORD);
     BOOL (WINAPI *pImmTranslateMessage)(HWND, UINT, WPARAM, LPARAM);
+    NTSTATUS (WINAPI *pNtWaitForMultipleObjects)(ULONG,const HANDLE*,BOOLEAN,BOOLEAN,const LARGE_INTEGER*);
     void (CDECL *free_win_ptr)( struct tagWND *win );
     HMENU (CDECL *get_sys_menu)( HWND hwnd, HMENU popup );
     HWND (CDECL *is_menu_active)(void);
-- 
GitLab

https://gitlab.winehq.org/wine/wine/-/merge_requests/162



More information about the wine-devel mailing list