[PATCH 4/5] user32: Use a critical section in RegisterUserApiHook.

Jacek Caban wine at gitlab.winehq.org
Tue Jun 7 19:41:41 CDT 2022


From: Jacek Caban <jacek at codeweavers.com>

Signed-off-by: Jacek Caban <jacek at codeweavers.com>
---
 dlls/user32/hook.c | 14 ++++++++++++--
 1 file changed, 12 insertions(+), 2 deletions(-)

diff --git a/dlls/user32/hook.c b/dlls/user32/hook.c
index 357a7fdb25a..7dddfb02638 100644
--- a/dlls/user32/hook.c
+++ b/dlls/user32/hook.c
@@ -100,6 +100,16 @@ struct hook_info
     WCHAR module[MAX_PATH];
 };
 
+static CRITICAL_SECTION api_hook_cs;
+static CRITICAL_SECTION_DEBUG critsect_debug =
+{
+    0, 0, &api_hook_cs,
+    { &critsect_debug.ProcessLocksList, &critsect_debug.ProcessLocksList },
+    0, 0, { (DWORD_PTR)(__FILE__ ": api_hook_cs") }
+};
+static CRITICAL_SECTION api_hook_cs = { &critsect_debug, -1, 0, 0, 0, 0 };
+
+
 #define WH_WINEVENT (WH_MAXHOOK+1)
 
 static const char * const hook_names[WH_WINEVENT - WH_MINHOOK + 1] =
@@ -487,12 +497,12 @@ BOOL WINAPI RegisterUserApiHook(const struct user_api_hook *new_hook, struct use
     if (!new_hook)
         return FALSE;
 
-    USER_Lock();
+    EnterCriticalSection( &api_hook_cs );
     hooked_user_api = *new_hook;
     user_api = &hooked_user_api;
     if (old_hook)
         *old_hook = original_user_api;
-    USER_Unlock();
+    LeaveCriticalSection( &api_hook_cs );
     return TRUE;
 }
 
-- 
GitLab


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



More information about the wine-devel mailing list