Jacek Caban : win32u: Move NtUserUnhookWindowsHookEx implementation from user32.

Alexandre Julliard julliard at winehq.org
Wed Feb 16 15:30:25 CST 2022


Module: wine
Branch: master
Commit: 6490088e7442b7d26041bfb7e9ac97ce83b691f9
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=6490088e7442b7d26041bfb7e9ac97ce83b691f9

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Wed Feb 16 12:31:04 2022 +0100

win32u: Move NtUserUnhookWindowsHookEx implementation from user32.

Signed-off-by: Jacek Caban <jacek at codeweavers.com>
Signed-off-by: Huw Davies <huw at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/user32/hook.c      | 21 ---------------------
 dlls/user32/user32.spec |  2 +-
 dlls/win32u/hook.c      | 19 +++++++++++++++++++
 dlls/win32u/syscall.c   |  1 +
 dlls/win32u/win32u.spec |  2 +-
 dlls/wow64win/syscall.h |  3 ++-
 dlls/wow64win/user.c    |  7 +++++++
 include/ntuser.h        |  1 +
 8 files changed, 32 insertions(+), 24 deletions(-)

diff --git a/dlls/user32/hook.c b/dlls/user32/hook.c
index 71ddb6860dc..7a9cff63298 100644
--- a/dlls/user32/hook.c
+++ b/dlls/user32/hook.c
@@ -538,27 +538,6 @@ BOOL WINAPI UnhookWindowsHook( INT id, HOOKPROC proc )
 }
 
 
-
-/***********************************************************************
- *		UnhookWindowsHookEx (USER32.@)
- */
-BOOL WINAPI UnhookWindowsHookEx( HHOOK hhook )
-{
-    BOOL ret;
-
-    SERVER_START_REQ( remove_hook )
-    {
-        req->handle = wine_server_user_handle( hhook );
-        req->id     = 0;
-        ret = !wine_server_call_err( req );
-        if (ret) get_user_thread_info()->active_hooks = reply->active_hooks;
-    }
-    SERVER_END_REQ;
-    if (!ret && GetLastError() == ERROR_INVALID_HANDLE) SetLastError( ERROR_INVALID_HOOK_HANDLE );
-    return ret;
-}
-
-
 /***********************************************************************
  *		CallNextHookEx (USER32.@)
  */
diff --git a/dlls/user32/user32.spec b/dlls/user32/user32.spec
index 16342d15ee7..d60b424321b 100644
--- a/dlls/user32/user32.spec
+++ b/dlls/user32/user32.spec
@@ -772,7 +772,7 @@
 # @ stub TranslateMessageEx
 @ stdcall UnhookWinEvent(long) NtUserUnhookWinEvent
 @ stdcall UnhookWindowsHook(long ptr)
-@ stdcall UnhookWindowsHookEx(long)
+@ stdcall UnhookWindowsHookEx(long) NtUserUnhookWindowsHookEx
 @ stdcall UnionRect(ptr ptr ptr)
 @ stdcall UnloadKeyboardLayout(long)
 @ stub UnlockWindowStation
diff --git a/dlls/win32u/hook.c b/dlls/win32u/hook.c
index c91ccf41f6f..b7630a14f16 100644
--- a/dlls/win32u/hook.c
+++ b/dlls/win32u/hook.c
@@ -126,6 +126,25 @@ HHOOK WINAPI NtUserSetWindowsHookEx( HINSTANCE inst, UNICODE_STRING *module, DWO
     return handle;
 }
 
+/***********************************************************************
+ *	     NtUserUnhookWindowsHookEx   (win32u.@)
+ */
+BOOL WINAPI NtUserUnhookWindowsHookEx( HHOOK handle )
+{
+    NTSTATUS status;
+
+    SERVER_START_REQ( remove_hook )
+    {
+        req->handle = wine_server_user_handle( handle );
+        req->id     = 0;
+        status = wine_server_call_err( req );
+        if (!status) get_user_thread_info()->active_hooks = reply->active_hooks;
+    }
+    SERVER_END_REQ;
+    if (status == STATUS_INVALID_HANDLE) SetLastError( ERROR_INVALID_HOOK_HANDLE );
+    return !status;
+}
+
 /***********************************************************************
  *           NtUserSetWinEventHook   (win32u.@)
  */
diff --git a/dlls/win32u/syscall.c b/dlls/win32u/syscall.c
index 9258b6b6377..d97688d7c8c 100644
--- a/dlls/win32u/syscall.c
+++ b/dlls/win32u/syscall.c
@@ -143,6 +143,7 @@ static void * const syscalls[] =
     NtUserSetWinEventHook,
     NtUserSetWindowsHookEx,
     NtUserUnhookWinEvent,
+    NtUserUnhookWindowsHookEx,
 };
 
 static BYTE arguments[ARRAY_SIZE(syscalls)];
diff --git a/dlls/win32u/win32u.spec b/dlls/win32u/win32u.spec
index 0088d21eda5..20faca70c5e 100644
--- a/dlls/win32u/win32u.spec
+++ b/dlls/win32u/win32u.spec
@@ -1285,7 +1285,7 @@
 @ stub NtUserTranslateMessage
 @ stub NtUserUndelegateInput
 @ stdcall -syscall NtUserUnhookWinEvent(long)
-@ stub NtUserUnhookWindowsHookEx
+@ stdcall -syscall NtUserUnhookWindowsHookEx(long)
 @ stub NtUserUnloadKeyboardLayout
 @ stub NtUserUnlockWindowStation
 @ stub NtUserUnregisterClass
diff --git a/dlls/wow64win/syscall.h b/dlls/wow64win/syscall.h
index 6c70d95f263..47e95a98a4b 100644
--- a/dlls/wow64win/syscall.h
+++ b/dlls/wow64win/syscall.h
@@ -129,6 +129,7 @@
     SYSCALL_ENTRY( NtUserSetThreadDesktop ) \
     SYSCALL_ENTRY( NtUserSetWinEventHook ) \
     SYSCALL_ENTRY( NtUserSetWindowsHookEx ) \
-    SYSCALL_ENTRY( NtUserUnhookWinEvent )
+    SYSCALL_ENTRY( NtUserUnhookWinEvent ) \
+    SYSCALL_ENTRY( NtUserUnhookWindowsHookEx )
 
 #endif /* __WOW64WIN_SYSCALL_H */
diff --git a/dlls/wow64win/user.c b/dlls/wow64win/user.c
index b78ae290049..cd4dc32d407 100644
--- a/dlls/wow64win/user.c
+++ b/dlls/wow64win/user.c
@@ -408,3 +408,10 @@ NTSTATUS WINAPI wow64_NtUserSetWindowsHookEx( UINT *args )
                                   tid, id, proc, ansi );
     return HandleToUlong( ret );
 }
+
+NTSTATUS WINAPI wow64_NtUserUnhookWindowsHookEx( UINT *args )
+{
+    HHOOK handle = get_handle( &args );
+
+    return NtUserUnhookWindowsHookEx( handle );
+}
diff --git a/include/ntuser.h b/include/ntuser.h
index a591363f77e..14ff5d861d0 100644
--- a/include/ntuser.h
+++ b/include/ntuser.h
@@ -204,6 +204,7 @@ BOOL    WINAPI NtUserSystemParametersInfoForDpi( UINT action, UINT val, PVOID pt
 INT     WINAPI NtUserToUnicodeEx( UINT virt, UINT scan, const BYTE *state,
                                   WCHAR *str, int size, UINT flags, HKL layout );
 BOOL    WINAPI NtUserUnhookWinEvent( HWINEVENTHOOK hEventHook );
+BOOL    WINAPI NtUserUnhookWindowsHookEx( HHOOK handle );
 BOOL    WINAPI NtUserUnregisterHotKey( HWND hwnd, INT id );
 WORD    WINAPI NtUserVkKeyScanEx( WCHAR chr, HKL layout );
 




More information about the wine-cvs mailing list