Module: wine Branch: master Commit: dae11519da7791bb0fe824111a65848816a31875 URL: https://source.winehq.org/git/wine.git/?a=commit;h=dae11519da7791bb0fe824111...
Author: Jacek Caban jacek@codeweavers.com Date: Wed Apr 13 15:07:48 2022 +0200
win32u: Introduce inline helpers for NtUserCallTwoParam calls.
Signed-off-by: Jacek Caban jacek@codeweavers.com Signed-off-by: Huw Davies huw@codeweavers.com Signed-off-by: Alexandre Julliard julliard@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_ */