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>
This commit is contained in:
Jacek Caban 2022-04-13 15:07:48 +02:00 committed by Alexandre Julliard
parent 322ee79383
commit dae11519da
7 changed files with 68 additions and 28 deletions

View File

@ -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 );

View File

@ -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 );
}

View File

@ -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 );
}

View File

@ -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__

View File

@ -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 );
}

View File

@ -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;

View File

@ -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_ */