Jacek Caban : win32u: Introduce inline helpers for NtUserCallTwoParam calls.

Alexandre Julliard julliard at winehq.org
Wed Apr 13 15:14:45 CDT 2022


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

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Wed Apr 13 15:07:48 2022 +0200

win32u: Introduce inline helpers for NtUserCallTwoParam calls.

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/user.exe16/user.c  |  4 ++--
 dlls/user32/hook.c      |  2 +-
 dlls/user32/message.c   |  2 +-
 dlls/user32/sysparams.c |  6 ++---
 dlls/user32/winproc.c   |  2 +-
 dlls/win32u/sysparams.c | 20 ++++++++++++-----
 include/ntuser.h        | 60 +++++++++++++++++++++++++++++++++++++------------
 7 files changed, 68 insertions(+), 28 deletions(-)

diff --git a/dlls/user.exe16/user.c b/dlls/user.exe16/user.c
index b94d5958ce0..75b81b0ea05 100644
--- a/dlls/user.exe16/user.c
+++ b/dlls/user.exe16/user.c
@@ -300,7 +300,7 @@ static HICON store_icon_32( HICON16 icon16, HICON icon )
         {
             memcpy( &ret, (char *)(ptr + 1) + and_size + xor_size, sizeof(ret) );
             memcpy( (char *)(ptr + 1) + and_size + xor_size, &icon, sizeof(icon) );
-            NtUserCallTwoParam( HandleToUlong(icon), icon16, NtUserSetIconParam );
+            NtUserSetIconParam( icon, icon16 );
         }
         release_icon_ptr( icon16, ptr );
     }
@@ -342,7 +342,7 @@ HICON get_icon_32( HICON16 icon16 )
                 DeleteObject( iinfo.hbmMask );
                 DeleteObject( iinfo.hbmColor );
                 memcpy( (char *)(ptr + 1) + xor_size + and_size, &ret, sizeof(ret) );
-                NtUserCallTwoParam( HandleToUlong(ret), icon16, NtUserSetIconParam );
+                NtUserSetIconParam( ret, icon16 );
             }
         }
         release_icon_ptr( icon16, ptr );
diff --git a/dlls/user32/hook.c b/dlls/user32/hook.c
index e6db8590934..76033f0dee1 100644
--- a/dlls/user32/hook.c
+++ b/dlls/user32/hook.c
@@ -379,7 +379,7 @@ HHOOK WINAPI SetWindowsHookExW( INT id, HOOKPROC proc, HINSTANCE inst, DWORD tid
  */
 BOOL WINAPI UnhookWindowsHook( INT id, HOOKPROC proc )
 {
-    return NtUserCallTwoParam( id, (UINT_PTR)proc, NtUserUnhookWindowsHook );
+    return NtUserUnhookWindowsHook( id, proc );
 }
 
 
diff --git a/dlls/user32/message.c b/dlls/user32/message.c
index 72f5c084432..d2ab94dbf37 100644
--- a/dlls/user32/message.c
+++ b/dlls/user32/message.c
@@ -694,7 +694,7 @@ BOOL WINAPI SendMessageCallbackW( HWND hwnd, UINT msg, WPARAM wparam, LPARAM lpa
  */
 BOOL WINAPI ReplyMessage( LRESULT result )
 {
-    return NtUserCallTwoParam( result, 0, NtUserReplyMessage );
+    return NtUserReplyMessage( result, NULL );
 }
 
 
diff --git a/dlls/user32/sysparams.c b/dlls/user32/sysparams.c
index 4bfdde4bfcb..c2b570b6119 100644
--- a/dlls/user32/sysparams.c
+++ b/dlls/user32/sysparams.c
@@ -453,7 +453,7 @@ INT WINAPI GetSystemMetrics( INT index )
  */
 INT WINAPI GetSystemMetricsForDpi( INT index, UINT dpi )
 {
-    return NtUserCallTwoParam( index, dpi, NtUserGetSystemMetricsForDpi );
+    return NtUserGetSystemMetricsForDpi( index, dpi );
 }
 
 
@@ -994,7 +994,7 @@ BOOL WINAPI PhysicalToLogicalPointForPerMonitorDPI( HWND hwnd, POINT *pt )
  */
 HMONITOR WINAPI MonitorFromRect( const RECT *rect, DWORD flags )
 {
-    return UlongToHandle( NtUserCallTwoParam( (LONG_PTR)rect, flags, NtUserMonitorFromRect ));
+    return NtUserMonitorFromRect( rect, flags );
 }
 
 /***********************************************************************
@@ -1045,7 +1045,7 @@ BOOL WINAPI GetMonitorInfoA( HMONITOR monitor, LPMONITORINFO info )
  */
 BOOL WINAPI GetMonitorInfoW( HMONITOR monitor, LPMONITORINFO info )
 {
-    return NtUserCallTwoParam( HandleToUlong(monitor), (ULONG_PTR)info, NtUserGetMonitorInfo );
+    return NtUserGetMonitorInfo( monitor, info );
 }
 
 #ifdef __i386__
diff --git a/dlls/user32/winproc.c b/dlls/user32/winproc.c
index 9ac57b5239a..7b9b2000c06 100644
--- a/dlls/user32/winproc.c
+++ b/dlls/user32/winproc.c
@@ -1268,7 +1268,7 @@ BOOL WINAPI User32CallWindowProc( struct win_proc_params *params, ULONG size )
         msg.lParam  = params->lparam;
         dispatch_win_proc_params( params );
 
-        NtUserCallTwoParam( result, (UINT_PTR)&msg, NtUserReplyMessage );
+        NtUserReplyMessage( result, &msg );
         if (buffer != stack_buffer && buffer != params + 1)
             HeapFree( GetProcessHeap(), 0, buffer );
     }
diff --git a/dlls/win32u/sysparams.c b/dlls/win32u/sysparams.c
index 0a4fa4f524d..a760a2ca3a4 100644
--- a/dlls/win32u/sysparams.c
+++ b/dlls/win32u/sysparams.c
@@ -4762,23 +4762,31 @@ ULONG_PTR WINAPI NtUserCallTwoParam( ULONG_PTR arg1, ULONG_PTR arg2, ULONG code
 {
     switch(code)
     {
-    case NtUserGetMonitorInfo:
+    case NtUserCallTwoParam_GetMonitorInfo:
         return get_monitor_info( UlongToHandle(arg1), (MONITORINFO *)arg2 );
-    case NtUserGetSystemMetricsForDpi:
+
+    case NtUserCallTwoParam_GetSystemMetricsForDpi:
         return get_system_metrics_for_dpi( arg1, arg2 );
-    case NtUserMonitorFromRect:
+
+    case NtUserCallTwoParam_MonitorFromRect:
         return HandleToUlong( monitor_from_rect( (const RECT *)arg1, arg2, get_thread_dpi() ));
-    case NtUserReplyMessage:
+
+    case NtUserCallTwoParam_ReplyMessage:
         return reply_message_result( arg1, (MSG *)arg2 );
-    case NtUserSetIconParam:
+
+    case NtUserCallTwoParam_SetIconParam:
         return set_icon_param( UlongToHandle(arg1), arg2 );
-    case NtUserUnhookWindowsHook:
+
+    case NtUserCallTwoParam_UnhookWindowsHook:
         return unhook_windows_hook( arg1, (HOOKPROC)arg2 );
+
     /* temporary exports */
     case NtUserAllocWinProc:
         return (UINT_PTR)alloc_winproc( (WNDPROC)arg1, arg2 );
+
     case NtUserGetHandlePtr:
         return (UINT_PTR)get_user_handle_ptr( UlongToHandle(arg1), arg2 );
+
     default:
         FIXME( "invalid code %u\n", code );
         return 0;
diff --git a/include/ntuser.h b/include/ntuser.h
index 5cf25aca64f..8d94fc133da 100644
--- a/include/ntuser.h
+++ b/include/ntuser.h
@@ -131,20 +131,6 @@ struct win_hook_params
 #define NTUSER_DPI_PER_MONITOR_AWARE_V2   0x00000022
 #define NTUSER_DPI_PER_UNAWARE_GDISCALED  0x40006010
 
-/* NtUserCallTwoParam codes, not compatible with Windows */
-enum
-{
-    NtUserGetMonitorInfo,
-    NtUserGetSystemMetricsForDpi,
-    NtUserMonitorFromRect,
-    NtUserReplyMessage,
-    NtUserSetIconParam,
-    NtUserUnhookWindowsHook,
-    /* temporary exports */
-    NtUserAllocWinProc,
-    NtUserGetHandlePtr,
-};
-
 /* NtUserCallHwnd codes, not compatible with Windows */
 enum
 {
@@ -778,4 +764,50 @@ static inline UINT NtUserRealizePalette( HDC hdc )
     return NtUserCallOneParam( HandleToUlong(hdc), NtUserCallOneParam_RealizePalette );
 }
 
+/* NtUserCallTwoParam codes, not compatible with Windows */
+enum
+{
+    NtUserCallTwoParam_GetMonitorInfo,
+    NtUserCallTwoParam_GetSystemMetricsForDpi,
+    NtUserCallTwoParam_MonitorFromRect,
+    NtUserCallTwoParam_ReplyMessage,
+    NtUserCallTwoParam_SetIconParam,
+    NtUserCallTwoParam_UnhookWindowsHook,
+    /* temporary exports */
+    NtUserAllocWinProc,
+    NtUserGetHandlePtr,
+};
+
+static inline BOOL NtUserGetMonitorInfo( HMONITOR monitor, MONITORINFO *info )
+{
+    return NtUserCallTwoParam( HandleToUlong(monitor), (ULONG_PTR)info,
+                               NtUserCallTwoParam_GetMonitorInfo );
+}
+
+static inline INT NtUserGetSystemMetricsForDpi( INT index, UINT dpi )
+{
+    return NtUserCallTwoParam( index, dpi, NtUserCallTwoParam_GetSystemMetricsForDpi );
+}
+
+static inline HMONITOR NtUserMonitorFromRect( const RECT *rect, DWORD flags )
+{
+    ULONG ret = NtUserCallTwoParam( (LONG_PTR)rect, flags, NtUserCallTwoParam_MonitorFromRect );
+    return UlongToHandle( ret );
+}
+
+static inline BOOL NtUserReplyMessage( LRESULT result, MSG *msg )
+{
+    return NtUserCallTwoParam( result, (UINT_PTR)msg, NtUserCallTwoParam_ReplyMessage );
+}
+
+static inline UINT_PTR NtUserSetIconParam( HICON icon, ULONG_PTR param )
+{
+    return NtUserCallTwoParam( HandleToUlong(icon), param, NtUserCallTwoParam_SetIconParam );
+}
+
+static inline BOOL NtUserUnhookWindowsHook( INT id, HOOKPROC proc )
+{
+    return NtUserCallTwoParam( id, (UINT_PTR)proc, NtUserCallTwoParam_UnhookWindowsHook );
+}
+
 #endif /* _NTUSER_ */




More information about the wine-cvs mailing list