From: Shengdun Wang <uwgghhbcad@gmail.com> Add multitouch and gesture support on top of the existing pointer message flow. Touch events arriving as WM_POINTER* hardware messages are translated into WM_TOUCH messages containing the full snapshot of active contacts, and WM_GESTURE messages recognized from the contact stream (zoom, rotate, pan). server: Track touch registration and gesture configuration per window; generate WM_TOUCH / WM_GESTURE messages; add set/get_window_touch_flags and set/get_gesture_config requests. win32u: Implement NtUserRegisterTouchWindow, NtUserUnregisterTouchWindow, NtUserIsTouchWindow, NtUserGetTouchInputInfo, NtUserCloseTouchInputHandle, NtUserSetGestureConfig, NtUserGetGestureConfig, NtUserGetGestureInfo, NtUserGetGestureExtArgs, NtUserCloseGestureInfoHandle. user32: Forward the touch and gesture APIs to win32u. wow64win: Add thunks for the new syscalls. winewayland.drv: Add wl_touch handling feeding the pointer message flow. winemac.drv: Implement touch handling for mac --- dlls/user32/input.c | 101 - dlls/user32/user32.spec | 20 +- dlls/win32u/driver.c | 2 + dlls/win32u/input.c | 235 ++ dlls/win32u/message.c | 95 +- dlls/win32u/ntuser_private.h | 20 + dlls/win32u/sysparams.c | 4 + dlls/win32u/win32syscalls.h | 2770 +++++++++-------- dlls/win32u/win32u.spec | 16 +- dlls/win32u/win32u_private.h | 2 + dlls/winemac.drv/Makefile.in | 1 + dlls/winemac.drv/cocoa_app.h | 6 + dlls/winemac.drv/cocoa_app.m | 87 + dlls/winemac.drv/cocoa_window.m | 1 + dlls/winemac.drv/event.c | 6 + dlls/winemac.drv/gdi.c | 1 + dlls/winemac.drv/macdrv.h | 2 + dlls/winemac.drv/macdrv_cocoa.h | 8 + dlls/winemac.drv/mouse.c | 10 + dlls/winemac.drv/touch.c | 86 + dlls/winewayland.drv/Makefile.in | 7 +- dlls/winewayland.drv/wayland.c | 280 ++ dlls/winewayland.drv/wayland_csd.c | 469 +++ dlls/winewayland.drv/wayland_keyboard.c | 4 + dlls/winewayland.drv/wayland_pointer.c | 16 + dlls/winewayland.drv/wayland_surface.c | 71 + dlls/winewayland.drv/wayland_touch.c | 232 ++ dlls/winewayland.drv/waylanddrv.h | 58 + dlls/winewayland.drv/waylanddrv_main.c | 2 + dlls/winewayland.drv/window.c | 101 +- dlls/winewayland.drv/window_surface.c | 29 +- .../xdg-decoration-unstable-v1.xml | 176 ++ dlls/winex11.drv/init.c | 1 + dlls/winex11.drv/mouse.c | 46 + dlls/winex11.drv/x11drv.h | 1 + dlls/wow64win/user.c | 87 + include/ntuser.h | 10 + include/wine/gdi_driver.h | 5 +- include/wine/server_protocol.h | 74 +- server/protocol.def | 34 + server/queue.c | 699 ++++- server/request_handlers.h | 24 + server/request_trace.h | 48 + server/user.h | 40 + server/window.c | 106 + server/winstation.c | 1 + 46 files changed, 4566 insertions(+), 1528 deletions(-) create mode 100644 dlls/winemac.drv/touch.c create mode 100644 dlls/winewayland.drv/wayland_csd.c create mode 100644 dlls/winewayland.drv/wayland_touch.c create mode 100644 dlls/winewayland.drv/xdg-decoration-unstable-v1.xml diff --git a/dlls/user32/input.c b/dlls/user32/input.c index 051f4e48ec9..6065ac4c85a 100644 --- a/dlls/user32/input.c +++ b/dlls/user32/input.c @@ -641,107 +641,6 @@ LRESULT WINAPI DefRawInputProc( RAWINPUT **data, INT data_count, UINT header_siz return header_size == sizeof(RAWINPUTHEADER) ? 0 : -1; } -/***************************************************************************** - * CloseTouchInputHandle (USER32.@) - */ -BOOL WINAPI CloseTouchInputHandle( HTOUCHINPUT handle ) -{ - FIXME( "handle %p stub!\n", handle ); - SetLastError( ERROR_CALL_NOT_IMPLEMENTED ); - return FALSE; -} - -/***************************************************************************** - * GetTouchInputInfo (USER32.@) - */ -BOOL WINAPI GetTouchInputInfo( HTOUCHINPUT handle, UINT count, TOUCHINPUT *ptr, int size ) -{ - FIXME( "handle %p, count %u, ptr %p, size %u stub!\n", handle, count, ptr, size ); - SetLastError( ERROR_CALL_NOT_IMPLEMENTED ); - return FALSE; -} - -/********************************************************************** - * IsTouchWindow (USER32.@) - */ -BOOL WINAPI IsTouchWindow( HWND hwnd, ULONG *flags ) -{ - FIXME( "hwnd %p, flags %p stub!\n", hwnd, flags ); - return FALSE; -} - -/***************************************************************************** - * RegisterTouchWindow (USER32.@) - */ -BOOL WINAPI RegisterTouchWindow( HWND hwnd, ULONG flags ) -{ - FIXME( "hwnd %p, flags %#lx stub!\n", hwnd, flags ); - return TRUE; -} - -/***************************************************************************** - * UnregisterTouchWindow (USER32.@) - */ -BOOL WINAPI UnregisterTouchWindow( HWND hwnd ) -{ - FIXME( "hwnd %p stub!\n", hwnd ); - return TRUE; -} - -/***************************************************************************** - * GetGestureInfo (USER32.@) - */ -BOOL WINAPI CloseGestureInfoHandle( HGESTUREINFO handle ) -{ - FIXME( "handle %p stub!\n", handle ); - SetLastError( ERROR_CALL_NOT_IMPLEMENTED ); - return FALSE; -} - -/***************************************************************************** - * GetGestureInfo (USER32.@) - */ -BOOL WINAPI GetGestureExtraArgs( HGESTUREINFO handle, UINT count, BYTE *args ) -{ - FIXME( "handle %p, count %u, args %p stub!\n", handle, count, args ); - SetLastError( ERROR_CALL_NOT_IMPLEMENTED ); - return FALSE; -} - -/***************************************************************************** - * GetGestureInfo (USER32.@) - */ -BOOL WINAPI GetGestureInfo( HGESTUREINFO handle, GESTUREINFO *ptr ) -{ - FIXME( "handle %p, ptr %p stub!\n", handle, ptr ); - SetLastError( ERROR_CALL_NOT_IMPLEMENTED ); - return FALSE; -} - -/***************************************************************************** - * GetGestureConfig (USER32.@) - */ -BOOL WINAPI GetGestureConfig( HWND hwnd, DWORD reserved, DWORD flags, UINT *count, - GESTURECONFIG *config, UINT size ) -{ - FIXME( "handle %p, reserved %#lx, flags %#lx, count %p, config %p, size %u stub!\n", - hwnd, reserved, flags, count, config, size ); - SetLastError( ERROR_CALL_NOT_IMPLEMENTED ); - return FALSE; -} - -/********************************************************************** - * SetGestureConfig (USER32.@) - */ -BOOL WINAPI SetGestureConfig( HWND hwnd, DWORD reserved, UINT count, - GESTURECONFIG *config, UINT size ) -{ - FIXME( "handle %p, reserved %#lx, count %u, config %p, size %u stub!\n", - hwnd, reserved, count, config, size ); - SetLastError( ERROR_CALL_NOT_IMPLEMENTED ); - return FALSE; -} - BOOL WINAPI GetPointerDeviceProperties( HANDLE device, UINT32 *count, POINTER_DEVICE_PROPERTY *properties) { diff --git a/dlls/user32/user32.spec b/dlls/user32/user32.spec index 241b40054b8..00c7677f8cc 100644 --- a/dlls/user32/user32.spec +++ b/dlls/user32/user32.spec @@ -301,8 +301,8 @@ @ stdcall -import ClipCursor(ptr) NtUserClipCursor @ stdcall CloseClipboard() NtUserCloseClipboard @ stdcall CloseDesktop(long) NtUserCloseDesktop -@ stdcall CloseGestureInfoHandle(long) -@ stdcall CloseTouchInputHandle(long) +@ stdcall CloseGestureInfoHandle(long) NtUserCloseGestureInfoHandle +@ stdcall CloseTouchInputHandle(long) NtUserCloseTouchInputHandle @ stdcall CloseWindow(long) @ stdcall CloseWindowStation(long) NtUserCloseWindowStation # @ stub ConsoleControl @@ -567,9 +567,9 @@ @ stdcall GetFocus() @ stdcall GetForegroundWindow() NtUserGetForegroundWindow @ stdcall GetGUIThreadInfo(long ptr) NtUserGetGUIThreadInfo -@ stdcall GetGestureConfig(long long long ptr ptr long) -@ stdcall GetGestureExtraArgs(long long ptr) -@ stdcall GetGestureInfo(long ptr) +@ stdcall GetGestureConfig(long long long ptr ptr long) NtUserGetGestureConfig +@ stdcall GetGestureExtraArgs(long long ptr) NtUserGetGestureExtArgs +@ stdcall GetGestureInfo(long ptr) NtUserGetGestureInfo @ stdcall GetGuiResources(long long) @ stdcall GetIconInfo(long ptr) @ stdcall GetIconInfoExA(long ptr) @@ -686,7 +686,7 @@ @ stdcall GetTitleBarInfo(long ptr) NtUserGetTitleBarInfo # @ stub GetTopLevelWindow @ stdcall GetTopWindow(long) -@ stdcall GetTouchInputInfo(long long ptr long) +@ stdcall GetTouchInputInfo(long long ptr long) NtUserGetTouchInputInfo # @ stub GetUnpredictedMessagePos @ stdcall GetUpdateRect(long ptr long) NtUserGetUpdateRect @ stdcall GetUpdateRgn(long long long) NtUserGetUpdateRgn @@ -798,7 +798,7 @@ # @ stub IsThreadDesktopComposited # @ stub IsThreadTSFEventAware # @ stub IsTopLevelWindow -@ stdcall IsTouchWindow(long ptr) +@ stdcall IsTouchWindow(long ptr) NtUserIsTouchWindow @ stdcall IsValidDpiAwarenessContext(long) @ stdcall IsWinEventHookInstalled(long) @ stdcall IsWindow(long) @@ -978,7 +978,7 @@ @ stdcall RegisterSystemThread(long long) @ stdcall RegisterTasklist(long) @ stdcall RegisterTouchHitTestingWindow(long long) -@ stdcall RegisterTouchWindow(long long) +@ stdcall RegisterTouchWindow(long long) NtUserRegisterTouchWindow @ stdcall RegisterUserApiHook(ptr ptr) @ stdcall RegisterWindowMessageA(str) @ stdcall RegisterWindowMessageW(wstr) @@ -1046,7 +1046,7 @@ # @ stub SetForegroundRedirectionForActivationObject @ stdcall SetForegroundWindow(long) NtUserSetForegroundWindow # @ stub SetFullscreenMagnifierOffsetsDWMUpdated -@ stdcall SetGestureConfig(ptr long long ptr long) +@ stdcall SetGestureConfig(ptr long long ptr long) NtUserSetGestureConfig @ stdcall SetInternalWindowPos(long long ptr ptr) NtUserSetInternalWindowPos @ stdcall SetKeyboardState(ptr) NtUserSetKeyboardState @ stdcall SetLastErrorEx(long long) @@ -1184,7 +1184,7 @@ @ stdcall UnregisterPowerSettingNotification(ptr) # @ stub UnregisterSessionPort @ stdcall UnregisterSuspendResumeNotification(ptr) -@ stdcall UnregisterTouchWindow(long) +@ stdcall UnregisterTouchWindow(long) NtUserUnregisterTouchWindow @ stdcall UnregisterUserApiHook() # @ stub UpdateDefaultDesktopThumbnail @ stdcall UpdateLayeredWindow(long long ptr ptr long ptr long ptr long) diff --git a/dlls/win32u/driver.c b/dlls/win32u/driver.c index 50ecbdc18b3..9b4d60081f4 100644 --- a/dlls/win32u/driver.c +++ b/dlls/win32u/driver.c @@ -1338,6 +1338,8 @@ static const struct user_driver_funcs lazy_load_driver = nulldrv_WindowPosChanged, /* system parameters */ nulldrv_SystemParametersInfo, + /* digitizer capabilities */ + NULL, /* wintab support */ loaderdrv_WintabProc, /* vulkan support */ diff --git a/dlls/win32u/input.c b/dlls/win32u/input.c index a3f345b6d7c..09478a76f6b 100644 --- a/dlls/win32u/input.c +++ b/dlls/win32u/input.c @@ -36,6 +36,7 @@ #include "wine/server.h" #include "wine/debug.h" #include "kbd.h" +#include <inttypes.h> WINE_DEFAULT_DEBUG_CHANNEL(win); WINE_DECLARE_DEBUG_CHANNEL(keyboard); @@ -2930,6 +2931,240 @@ BOOL WINAPI NtUserRegisterTouchPadCapable( BOOL capable ) return FALSE; } +/********************************************************************** + * NtUserRegisterTouchWindow (win32u.@) + */ +BOOL WINAPI NtUserRegisterTouchWindow( HWND hwnd, ULONG flags ) +{ + BOOL ret = TRUE; + + TRACE( "hwnd %p, flags %#" PRIx32 "\n", hwnd, flags ); + + SERVER_START_REQ( set_window_touch_flags ) + { + req->handle = wine_server_user_handle( hwnd ); + req->flags = flags; + req->set = 1; + ret = !wine_server_call( req ); + } + SERVER_END_REQ; + + return ret; +} + +/********************************************************************** + * NtUserUnregisterTouchWindow (win32u.@) + */ +BOOL WINAPI NtUserUnregisterTouchWindow( HWND hwnd ) +{ + BOOL ret = TRUE; + + TRACE( "hwnd %p\n", hwnd ); + + SERVER_START_REQ( set_window_touch_flags ) + { + req->handle = wine_server_user_handle( hwnd ); + req->flags = 0; + req->set = 0; + ret = !wine_server_call( req ); + } + SERVER_END_REQ; + + return ret; +} + +/********************************************************************** + * NtUserIsTouchWindow (win32u.@) + */ +BOOL WINAPI NtUserIsTouchWindow( HWND hwnd, ULONG *flags ) +{ + unsigned int touch_flags = 0; + + TRACE( "hwnd %p, flags %p\n", hwnd, flags ); + + SERVER_START_REQ( get_window_touch_flags ) + { + req->handle = wine_server_user_handle( hwnd ); + if (!wine_server_call( req )) touch_flags = reply->flags; + } + SERVER_END_REQ; + + if (!(touch_flags & WIN_TOUCH_FLAG_REGISTERED)) return FALSE; + if (flags) *flags = touch_flags & ~WIN_TOUCH_FLAG_REGISTERED; + return TRUE; +} + +/********************************************************************** + * NtUserGetTouchInputInfo (win32u.@) + */ +BOOL WINAPI NtUserGetTouchInputInfo( HTOUCHINPUT handle, UINT count, TOUCHINPUT *ptr, int size ) +{ + struct user_thread_info *thread_info = get_user_thread_info(); + struct touch_input *touch_input = thread_info->touch_input; + + TRACE( "handle %p, count %u, ptr %p, size %d\n", handle, count, ptr, size ); + + if (!touch_input || touch_input->hw_id != (UINT_PTR)handle || size != sizeof(TOUCHINPUT)) + { + RtlSetLastWin32Error( ERROR_INVALID_HANDLE ); + return FALSE; + } + if (count > touch_input->count) + { + RtlSetLastWin32Error( ERROR_INVALID_PARAMETER ); + return FALSE; + } + + memcpy( ptr, touch_input->data, count * sizeof(TOUCHINPUT) ); + return TRUE; +} + +/********************************************************************** + * NtUserCloseTouchInputHandle (win32u.@) + */ +BOOL WINAPI NtUserCloseTouchInputHandle( HTOUCHINPUT handle ) +{ + struct user_thread_info *thread_info = get_user_thread_info(); + struct touch_input *touch_input = thread_info->touch_input; + + TRACE( "handle %p\n", handle ); + + if (!touch_input || touch_input->hw_id != (UINT_PTR)handle) + { + RtlSetLastWin32Error( ERROR_INVALID_HANDLE ); + return FALSE; + } + + free( touch_input ); + thread_info->touch_input = NULL; + return TRUE; +} + +/********************************************************************** + * NtUserSetGestureConfig (win32u.@) + */ +BOOL WINAPI NtUserSetGestureConfig( HWND hwnd, DWORD reserved, UINT count, GESTURECONFIG *config, UINT size ) +{ + BOOL ret; + + TRACE( "hwnd %p, reserved %#" PRIx32 ", count %u, config %p, size %u\n", hwnd, reserved, count, config, size ); + + if (size != sizeof(GESTURECONFIG) || count > GESTURECONFIGMAXCOUNT) + { + RtlSetLastWin32Error( ERROR_INVALID_PARAMETER ); + return FALSE; + } + + SERVER_START_REQ( set_gesture_config ) + { + req->handle = wine_server_user_handle( hwnd ); + req->count = count; + wine_server_add_data( req, config, count * sizeof(GESTURECONFIG) ); + ret = !wine_server_call( req ); + } + SERVER_END_REQ; + + return ret; +} + +/********************************************************************** + * NtUserGetGestureConfig (win32u.@) + */ +BOOL WINAPI NtUserGetGestureConfig( HWND hwnd, DWORD reserved, DWORD flags, UINT *count, GESTURECONFIG *config, UINT size ) +{ + BOOL ret = FALSE; + + TRACE( "hwnd %p, reserved %#" PRIx32 ", flags %#" PRIx32 ", count %p, config %p, size %u\n", hwnd, reserved, flags, count, config, size ); + + if (size != sizeof(GESTURECONFIG) || !count) + { + RtlSetLastWin32Error( ERROR_INVALID_PARAMETER ); + return FALSE; + } + + SERVER_START_REQ( get_gesture_config ) + { + req->handle = wine_server_user_handle( hwnd ); + req->count = *count; + wine_server_set_reply( req, config, *count * size ); + if (!(ret = !wine_server_call( req ))) *count = reply->count; + } + SERVER_END_REQ; + + return ret; +} + +/********************************************************************** + * NtUserGetGestureInfo (win32u.@) + */ +BOOL WINAPI NtUserGetGestureInfo( HGESTUREINFO handle, GESTUREINFO *info ) +{ + struct user_thread_info *thread_info = get_user_thread_info(); + struct gesture_info *gesture_info = thread_info->gesture_info; + + TRACE( "handle %p, info %p\n", handle, info ); + + if (!info || info->cbSize != sizeof(GESTUREINFO)) + { + RtlSetLastWin32Error( ERROR_INVALID_PARAMETER ); + return FALSE; + } + if (!gesture_info || gesture_info->hw_id != (UINT_PTR)handle) + { + RtlSetLastWin32Error( ERROR_INVALID_HANDLE ); + return FALSE; + } + + *info = gesture_info->info; + return TRUE; +} + +/********************************************************************** + * NtUserGetGestureExtArgs (win32u.@) + */ +BOOL WINAPI NtUserGetGestureExtArgs( HGESTUREINFO handle, UINT size, BYTE *args ) +{ + struct user_thread_info *thread_info = get_user_thread_info(); + struct gesture_info *gesture_info = thread_info->gesture_info; + + TRACE( "handle %p, size %u, args %p\n", handle, size, args ); + + if (!gesture_info || gesture_info->hw_id != (UINT_PTR)handle || !gesture_info->info.cbExtraArgs) + { + RtlSetLastWin32Error( ERROR_INVALID_HANDLE ); + return FALSE; + } + + if (size < gesture_info->info.cbExtraArgs) + { + RtlSetLastWin32Error( ERROR_INSUFFICIENT_BUFFER ); + return FALSE; + } + + return TRUE; +} + +/********************************************************************** + * NtUserCloseGestureInfoHandle (win32u.@) + */ +BOOL WINAPI NtUserCloseGestureInfoHandle( HGESTUREINFO handle ) +{ + struct user_thread_info *thread_info = get_user_thread_info(); + struct gesture_info *gesture_info = thread_info->gesture_info; + + TRACE( "handle %p\n", handle ); + + if (!gesture_info || gesture_info->hw_id != (UINT_PTR)handle) + { + RtlSetLastWin32Error( ERROR_INVALID_HANDLE ); + return FALSE; + } + + free( gesture_info ); + thread_info->gesture_info = NULL; + return TRUE; +} + /********************************************************************** * NtUserScheduleDispatchNotification (win32u.@) */ diff --git a/dlls/win32u/message.c b/dlls/win32u/message.c index 8c9a2aaef7c..1fe22a395e7 100644 --- a/dlls/win32u/message.c +++ b/dlls/win32u/message.c @@ -2753,12 +2753,23 @@ static BOOL process_mouse_message( MSG *msg, UINT hw_id, ULONG_PTR extra_info, H hittest != HTCLIENT || (get_class_long( msg->hwnd, GCL_STYLE, FALSE ) & CS_DBLCLKS)) { + LONG dclk_cx = get_system_metrics( SM_CXDOUBLECLK ) / 2; + LONG dclk_cy = get_system_metrics( SM_CYDOUBLECLK ) / 2; + + /* touch-synthesized clicks are less precise than mouse clicks, so + * allow a wider area when matching them for double-click detection */ + if ((extra_info & 0xffffff00) == 0xff515700) + { + dclk_cx = get_system_metrics( SM_CXDOUBLECLK ) * 8; + dclk_cy = get_system_metrics( SM_CYDOUBLECLK ) * 8; + } + if ((msg->message == clk_msg.message) && (msg->hwnd == clk_msg.hwnd) && (msg->wParam == clk_msg.wParam) && (msg->time - clk_msg.time < NtUserGetDoubleClickTime()) && - (abs(msg->pt.x - clk_msg.pt.x) < get_system_metrics( SM_CXDOUBLECLK ) / 2) && - (abs(msg->pt.y - clk_msg.pt.y) < get_system_metrics( SM_CYDOUBLECLK ) / 2)) + (abs(msg->pt.x - clk_msg.pt.x) < dclk_cx) && + (abs(msg->pt.y - clk_msg.pt.y) < dclk_cy)) { message += (WM_LBUTTONDBLCLK - WM_LBUTTONDOWN); if (update) @@ -2894,6 +2905,10 @@ static BOOL process_hardware_message( MSG *msg, UINT hw_id, const struct hardwar if (msg->message == WM_INPUT || msg->message == WM_INPUT_DEVICE_CHANGE) ret = process_rawinput_message( msg, hw_id, msg_data ); + else if (msg->message == WM_TOUCH) + ret = process_touch_message( msg, hw_id, msg_data ); + else if (msg->message == WM_GESTURE) + ret = process_gesture_message( msg, hw_id, msg_data ); else if (is_keyboard_message( msg->message )) ret = process_keyboard_message( msg, hw_id, hwnd_filter, first, last, remove ); else if (is_mouse_message( msg->message )) @@ -2911,6 +2926,82 @@ static BOOL process_hardware_message( MSG *msg, UINT hw_id, const struct hardwar return ret; } +/*********************************************************************** + * process_touch_message + * + * Cache the touch input data for a WM_TOUCH message and translate the + * touch coordinates into client coordinates of the target window. + * + * returns TRUE if the contents of 'msg' should be passed to the application + */ +BOOL process_touch_message( MSG *msg, UINT hw_id, const struct hardware_msg_data *msg_data ) +{ + struct user_thread_info *thread_info = get_user_thread_info(); + struct touch_input *touch_input; + TOUCHINPUT *data; + UINT count, i; + BOOL ret = FALSE; + + if (msg_data->size < sizeof(*msg_data)) return FALSE; + count = (msg_data->size - sizeof(*msg_data)) / sizeof(TOUCHINPUT); + if (!count) return FALSE; + + if (!(touch_input = realloc( thread_info->touch_input, sizeof(*touch_input) + (count - 1) * sizeof(TOUCHINPUT) ))) + return FALSE; + thread_info->touch_input = touch_input; + + touch_input->hw_id = hw_id; + touch_input->count = count; + data = (TOUCHINPUT *)((char *)msg_data + sizeof(*msg_data)); + memcpy( touch_input->data, data, count * sizeof(TOUCHINPUT) ); + + for (i = 0; i < count; i++) + { + POINT pt = { touch_input->data[i].x / 100, touch_input->data[i].y / 100 }; + + pt = point_phys_to_win_dpi( msg->hwnd, pt ); + if (screen_to_client( msg->hwnd, &pt )) + { + touch_input->data[i].x = pt.x * 100; + touch_input->data[i].y = pt.y * 100; + } + } + + msg->lParam = (LPARAM)hw_id; + msg->wParam = count; + msg->pt = point_phys_to_win_dpi( msg->hwnd, msg->pt ); + ret = TRUE; + + return ret; +} + +/*********************************************************************** + * process_gesture_message + * + * Cache the gesture data for a WM_GESTURE message. + * + * returns TRUE if the contents of 'msg' should be passed to the application + */ +BOOL process_gesture_message( MSG *msg, UINT hw_id, const struct hardware_msg_data *msg_data ) +{ + struct user_thread_info *thread_info = get_user_thread_info(); + struct gesture_info *gesture_info; + + if (msg_data->size < sizeof(*msg_data) + sizeof(GESTUREINFO)) return FALSE; + + if (!(gesture_info = realloc( thread_info->gesture_info, sizeof(*gesture_info) ))) return FALSE; + thread_info->gesture_info = gesture_info; + + gesture_info->hw_id = hw_id; + memcpy( &gesture_info->info, (char *)msg_data + sizeof(*msg_data), sizeof(GESTUREINFO) ); + gesture_info->info.hwndTarget = msg->hwnd; + + msg->lParam = (LPARAM)hw_id; + msg->wParam = 0; + msg->pt = point_phys_to_win_dpi( msg->hwnd, msg->pt ); + return TRUE; +} + /*********************************************************************** * check_queue_bits * diff --git a/dlls/win32u/ntuser_private.h b/dlls/win32u/ntuser_private.h index 26bab84b2e7..dcd91886cae 100644 --- a/dlls/win32u/ntuser_private.h +++ b/dlls/win32u/ntuser_private.h @@ -100,6 +100,24 @@ struct mouse_tracking_info POINT last_mouse_message_pos; }; +/* touch input data cached for GetTouchInputInfo */ +struct touch_input +{ + unsigned int hw_id; /* hardware message id (also the handle) */ + unsigned int count; /* number of touch points */ + TOUCHINPUT data[1]; /* touch data */ +}; + +/* internal flag marking a window as registered for touch (matches server) */ +#define WIN_TOUCH_FLAG_REGISTERED 0x80000000 + +/* gesture data cached for GetGestureInfo */ +struct gesture_info +{ + unsigned int hw_id; /* hardware message id (also the handle) */ + GESTUREINFO info; /* the gesture data */ +}; + /* internal per-thread data */ struct user_thread_info { @@ -125,6 +143,8 @@ struct user_thread_info INPUT mouse_motion; /* accumulated hardware mouse motion */ HWND mouse_hwnd; /* hardware mouse motion target window */ struct hardware_msg_data *rawinput; /* Current rawinput message data */ + struct touch_input *touch_input; /* Current touch input message data */ + struct gesture_info *gesture_info; /* Current gesture message data */ UINT spy_indent; /* Current spy indent */ BOOL clipping_cursor; /* thread is currently clipping */ DWORD clipping_reset; /* time when clipping was last reset */ diff --git a/dlls/win32u/sysparams.c b/dlls/win32u/sysparams.c index fa22d6294c0..813d4113ebf 100644 --- a/dlls/win32u/sysparams.c +++ b/dlls/win32u/sysparams.c @@ -7006,6 +7006,10 @@ int get_system_metrics( int index ) return 0; case SM_MOUSEPRESENT: return 1; + case SM_DIGITIZER: + return user_driver->pGetTouchCapabilities ? LOWORD( user_driver->pGetTouchCapabilities() ) : 0; + case SM_MAXIMUMTOUCHES: + return user_driver->pGetTouchCapabilities ? HIWORD( user_driver->pGetTouchCapabilities() ) : 0; case SM_DEBUG: return 0; case SM_SWAPBUTTON: diff --git a/dlls/win32u/win32syscalls.h b/dlls/win32u/win32syscalls.h index 132ac47836b..1c7f2cfa28b 100644 --- a/dlls/win32u/win32syscalls.h +++ b/dlls/win32u/win32syscalls.h @@ -852,695 +852,699 @@ SYSCALL_ENTRY( 0x1350, NtUserClipCursor, 4 ) \ SYSCALL_ENTRY( 0x1351, NtUserCloseClipboard, 0 ) \ SYSCALL_ENTRY( 0x1352, NtUserCloseDesktop, 4 ) \ - SYSCALL_ENTRY( 0x1353, NtUserCloseWindowStation, 4 ) \ - SYSCALL_ENTRY( 0x1354, NtUserCompositionInputSinkLuidFromPoint, 0 ) \ - SYSCALL_ENTRY( 0x1355, NtUserCompositionInputSinkViewInstanceIdFromPoint, 0 ) \ - SYSCALL_ENTRY( 0x1356, NtUserConfigureActivationObject, 0 ) \ - SYSCALL_ENTRY( 0x1357, NtUserConfirmResizeCommit, 0 ) \ - SYSCALL_ENTRY( 0x1358, NtUserConsoleControl, 0 ) \ - SYSCALL_ENTRY( 0x1359, NtUserConvertMemHandle, 0 ) \ - SYSCALL_ENTRY( 0x135a, NtUserCopyAcceleratorTable, 12 ) \ - SYSCALL_ENTRY( 0x135b, NtUserCountClipboardFormats, 0 ) \ - SYSCALL_ENTRY( 0x135c, NtUserCreateAcceleratorTable, 8 ) \ - SYSCALL_ENTRY( 0x135d, NtUserCreateActivationGroup, 0 ) \ - SYSCALL_ENTRY( 0x135e, NtUserCreateActivationObject, 0 ) \ - SYSCALL_ENTRY( 0x135f, NtUserCreateBaseWindow, 0 ) \ - SYSCALL_ENTRY( 0x1360, NtUserCreateCaret, 16 ) \ - SYSCALL_ENTRY( 0x1361, NtUserCreateDCompositionHwndTarget, 0 ) \ - SYSCALL_ENTRY( 0x1362, NtUserCreateDesktopEx, 24 ) \ - SYSCALL_ENTRY( 0x1363, NtUserCreateEmptyCursorObject, 0 ) \ - SYSCALL_ENTRY( 0x1364, NtUserCreateInputContext, 4 ) \ - SYSCALL_ENTRY( 0x1365, NtUserCreateLocalMemHandle, 0 ) \ - SYSCALL_ENTRY( 0x1366, NtUserCreateMenu, 0 ) \ - SYSCALL_ENTRY( 0x1367, NtUserCreatePalmRejectionDelayZone, 0 ) \ - SYSCALL_ENTRY( 0x1368, NtUserCreatePopupMenu, 0 ) \ - SYSCALL_ENTRY( 0x1369, NtUserCreateSyntheticPointerDevice2, 0 ) \ - SYSCALL_ENTRY( 0x136a, NtUserCreateSystemThreads, 0 ) \ - SYSCALL_ENTRY( 0x136b, NtUserCreateWindowEx, 68 ) \ - SYSCALL_ENTRY( 0x136c, NtUserCreateWindowGroup, 0 ) \ - SYSCALL_ENTRY( 0x136d, NtUserCreateWindowStation, 28 ) \ - SYSCALL_ENTRY( 0x136e, NtUserCsDdeUninitialize, 0 ) \ - SYSCALL_ENTRY( 0x136f, NtUserCtxDisplayIOCtl, 0 ) \ - SYSCALL_ENTRY( 0x1370, NtUserDWP_GetEnabledPopupOffset, 0 ) \ - SYSCALL_ENTRY( 0x1371, NtUserDdeInitialize, 0 ) \ - SYSCALL_ENTRY( 0x1372, NtUserDefSetText, 0 ) \ - SYSCALL_ENTRY( 0x1373, NtUserDeferWindowDpiChanges, 0 ) \ - SYSCALL_ENTRY( 0x1374, NtUserDeferWindowPosAndBand, 40 ) \ - SYSCALL_ENTRY( 0x1375, NtUserDeferredDesktopRotation, 0 ) \ - SYSCALL_ENTRY( 0x1376, NtUserDelegateCapturePointers, 0 ) \ - SYSCALL_ENTRY( 0x1377, NtUserDelegateInput, 0 ) \ - SYSCALL_ENTRY( 0x1378, NtUserDeleteMenu, 12 ) \ - SYSCALL_ENTRY( 0x1379, NtUserDeleteWindowGroup, 0 ) \ - SYSCALL_ENTRY( 0x137a, NtUserDeregisterShellHookWindow, 0 ) \ - SYSCALL_ENTRY( 0x137b, NtUserDestroyAcceleratorTable, 4 ) \ - SYSCALL_ENTRY( 0x137c, NtUserDestroyActivationGroup, 0 ) \ - SYSCALL_ENTRY( 0x137d, NtUserDestroyActivationObject, 0 ) \ - SYSCALL_ENTRY( 0x137e, NtUserDestroyCaret, 0 ) \ - SYSCALL_ENTRY( 0x137f, NtUserDestroyCursor, 8 ) \ - SYSCALL_ENTRY( 0x1380, NtUserDestroyDCompositionHwndTarget, 0 ) \ - SYSCALL_ENTRY( 0x1381, NtUserDestroyInputContext, 4 ) \ - SYSCALL_ENTRY( 0x1382, NtUserDestroyMenu, 4 ) \ - SYSCALL_ENTRY( 0x1383, NtUserDestroyPalmRejectionDelayZone, 0 ) \ - SYSCALL_ENTRY( 0x1384, NtUserDestroyWindow, 4 ) \ - SYSCALL_ENTRY( 0x1385, NtUserDirectedYield, 0 ) \ - SYSCALL_ENTRY( 0x1386, NtUserDisableImmersiveOwner, 0 ) \ - SYSCALL_ENTRY( 0x1387, NtUserDisableProcessWindowFiltering, 0 ) \ - SYSCALL_ENTRY( 0x1388, NtUserDisableProcessWindowsGhosting, 0 ) \ - SYSCALL_ENTRY( 0x1389, NtUserDisableThreadIme, 4 ) \ - SYSCALL_ENTRY( 0x138a, NtUserDiscardPointerFrameMessages, 0 ) \ - SYSCALL_ENTRY( 0x138b, NtUserDispatchMessage, 4 ) \ - SYSCALL_ENTRY( 0x138c, NtUserDisplayConfigGetDeviceInfo, 4 ) \ - SYSCALL_ENTRY( 0x138d, NtUserDisplayConfigSetDeviceInfo, 0 ) \ - SYSCALL_ENTRY( 0x138e, NtUserDoInitMessagePumpHook, 0 ) \ - SYSCALL_ENTRY( 0x138f, NtUserDoSoundConnect, 0 ) \ - SYSCALL_ENTRY( 0x1390, NtUserDoSoundDisconnect, 0 ) \ - SYSCALL_ENTRY( 0x1391, NtUserDoUninitMessagePumpHook, 0 ) \ - SYSCALL_ENTRY( 0x1392, NtUserDownlevelTouchpad, 0 ) \ - SYSCALL_ENTRY( 0x1393, NtUserDragDetect, 12 ) \ - SYSCALL_ENTRY( 0x1394, NtUserDragObject, 20 ) \ - SYSCALL_ENTRY( 0x1395, NtUserDrainThreadCoreMessagingCompletions, 0 ) \ - SYSCALL_ENTRY( 0x1396, NtUserDrainThreadCoreMessagingCompletions2, 0 ) \ - SYSCALL_ENTRY( 0x1397, NtUserDrawAnimatedRects, 0 ) \ - SYSCALL_ENTRY( 0x1398, NtUserDrawCaption, 0 ) \ - SYSCALL_ENTRY( 0x1399, NtUserDrawCaptionTemp, 28 ) \ - SYSCALL_ENTRY( 0x139a, NtUserDrawIconEx, 36 ) \ - SYSCALL_ENTRY( 0x139b, NtUserDrawMenuBar, 4 ) \ - SYSCALL_ENTRY( 0x139c, NtUserDrawMenuBarTemp, 20 ) \ - SYSCALL_ENTRY( 0x139d, NtUserDwmGetRemoteSessionOcclusionEvent, 0 ) \ - SYSCALL_ENTRY( 0x139e, NtUserDwmGetRemoteSessionOcclusionState, 0 ) \ - SYSCALL_ENTRY( 0x139f, NtUserDwmKernelShutdown, 0 ) \ - SYSCALL_ENTRY( 0x13a0, NtUserDwmKernelStartup, 0 ) \ - SYSCALL_ENTRY( 0x13a1, NtUserDwmLockScreenUpdates, 0 ) \ - SYSCALL_ENTRY( 0x13a2, NtUserDwmValidateWindow, 0 ) \ - SYSCALL_ENTRY( 0x13a3, NtUserDwmWindowNotificationsEnabled, 0 ) \ - SYSCALL_ENTRY( 0x13a4, NtUserEmptyClipboard, 0 ) \ - SYSCALL_ENTRY( 0x13a5, NtUserEnableChildWindowDpiMessage, 0 ) \ - SYSCALL_ENTRY( 0x13a6, NtUserEnableIAMAccess, 0 ) \ - SYSCALL_ENTRY( 0x13a7, NtUserEnableMenuItem, 12 ) \ - SYSCALL_ENTRY( 0x13a8, NtUserEnableModernAppWindowKeyboardIntercept, 0 ) \ - SYSCALL_ENTRY( 0x13a9, NtUserEnableMouseInPointer, 4 ) \ - SYSCALL_ENTRY( 0x13aa, NtUserEnableMouseInPointerForThread, 0 ) \ - SYSCALL_ENTRY( 0x13ab, NtUserEnableMouseInPointerForWindow, 0 ) \ - SYSCALL_ENTRY( 0x13ac, NtUserEnableMouseInputForCursorSuppression, 0 ) \ - SYSCALL_ENTRY( 0x13ad, NtUserEnableNonClientDpiScaling, 0 ) \ - SYSCALL_ENTRY( 0x13ae, NtUserEnablePerMonitorMenuScaling, 0 ) \ - SYSCALL_ENTRY( 0x13af, NtUserEnableResizeLayoutSynchronization, 0 ) \ - SYSCALL_ENTRY( 0x13b0, NtUserEnableScrollBar, 12 ) \ - SYSCALL_ENTRY( 0x13b1, NtUserEnableSessionForMMCSS, 0 ) \ - SYSCALL_ENTRY( 0x13b2, NtUserEnableShellWindowManagementBehavior, 0 ) \ - SYSCALL_ENTRY( 0x13b3, NtUserEnableSoftwareCursorForScreenCapture, 0 ) \ - SYSCALL_ENTRY( 0x13b4, NtUserEnableTouchPad, 0 ) \ - SYSCALL_ENTRY( 0x13b5, NtUserEnableWindow, 8 ) \ - SYSCALL_ENTRY( 0x13b6, NtUserEnableWindowGDIScaledDpiMessage, 0 ) \ - SYSCALL_ENTRY( 0x13b7, NtUserEnableWindowGroupPolicy, 0 ) \ - SYSCALL_ENTRY( 0x13b8, NtUserEnableWindowResizeOptimization, 0 ) \ - SYSCALL_ENTRY( 0x13b9, NtUserEnableWindowShellWindowManagementBehavior, 0 ) \ - SYSCALL_ENTRY( 0x13ba, NtUserEndDeferWindowPosEx, 8 ) \ - SYSCALL_ENTRY( 0x13bb, NtUserEndMenu, 0 ) \ - SYSCALL_ENTRY( 0x13bc, NtUserEndPaint, 8 ) \ - SYSCALL_ENTRY( 0x13bd, NtUserEnsureDpiDepSysMetCacheForPlateau, 0 ) \ - SYSCALL_ENTRY( 0x13be, NtUserEnumClipboardFormats, 4 ) \ - SYSCALL_ENTRY( 0x13bf, NtUserEnumDisplayDevices, 16 ) \ - SYSCALL_ENTRY( 0x13c0, NtUserEnumDisplayMonitors, 16 ) \ - SYSCALL_ENTRY( 0x13c1, NtUserEnumDisplaySettings, 16 ) \ - SYSCALL_ENTRY( 0x13c2, NtUserEvent, 0 ) \ - SYSCALL_ENTRY( 0x13c3, NtUserExcludeUpdateRgn, 8 ) \ - SYSCALL_ENTRY( 0x13c4, NtUserFillWindow, 0 ) \ - SYSCALL_ENTRY( 0x13c5, NtUserFindExistingCursorIcon, 12 ) \ - SYSCALL_ENTRY( 0x13c6, NtUserFindWindowEx, 20 ) \ - SYSCALL_ENTRY( 0x13c7, NtUserFlashWindowEx, 4 ) \ - SYSCALL_ENTRY( 0x13c8, NtUserForceEnableNumpadTranslation, 0 ) \ - SYSCALL_ENTRY( 0x13c9, NtUserForceWindowToDpiForTest, 0 ) \ - SYSCALL_ENTRY( 0x13ca, NtUserFrostCrashedWindow, 0 ) \ - SYSCALL_ENTRY( 0x13cb, NtUserFunctionalizeDisplayConfig, 0 ) \ - SYSCALL_ENTRY( 0x13cc, NtUserGetActiveProcessesDpis, 0 ) \ - SYSCALL_ENTRY( 0x13cd, NtUserGetAltTabInfo, 0 ) \ - SYSCALL_ENTRY( 0x13ce, NtUserGetAncestor, 8 ) \ - SYSCALL_ENTRY( 0x13cf, NtUserGetAppImeLevel, 0 ) \ - SYSCALL_ENTRY( 0x13d0, NtUserGetAsyncKeyState, 4 ) \ - SYSCALL_ENTRY( 0x13d1, NtUserGetAtomName, 8 ) \ - SYSCALL_ENTRY( 0x13d2, NtUserGetAutoRotationState, 0 ) \ - SYSCALL_ENTRY( 0x13d3, NtUserGetCIMSSM, 0 ) \ - SYSCALL_ENTRY( 0x13d4, NtUserGetCPD, 0 ) \ - SYSCALL_ENTRY( 0x13d5, NtUserGetCaretBlinkTime, 0 ) \ - SYSCALL_ENTRY( 0x13d6, NtUserGetCaretPos, 4 ) \ - SYSCALL_ENTRY( 0x13d7, NtUserGetClassIcoCur, 0 ) \ - SYSCALL_ENTRY( 0x13d8, NtUserGetClassInfoEx, 20 ) \ - SYSCALL_ENTRY( 0x13d9, NtUserGetClassName, 12 ) \ - SYSCALL_ENTRY( 0x13da, NtUserGetClipCursor, 4 ) \ - SYSCALL_ENTRY( 0x13db, NtUserGetClipboardAccessToken, 0 ) \ - SYSCALL_ENTRY( 0x13dc, NtUserGetClipboardData, 8 ) \ - SYSCALL_ENTRY( 0x13dd, NtUserGetClipboardFormatName, 12 ) \ - SYSCALL_ENTRY( 0x13de, NtUserGetClipboardMetadata, 0 ) \ - SYSCALL_ENTRY( 0x13df, NtUserGetClipboardOwner, 0 ) \ - SYSCALL_ENTRY( 0x13e0, NtUserGetClipboardSequenceNumber, 0 ) \ - SYSCALL_ENTRY( 0x13e1, NtUserGetClipboardViewer, 0 ) \ - SYSCALL_ENTRY( 0x13e2, NtUserGetComboBoxInfo, 0 ) \ - SYSCALL_ENTRY( 0x13e3, NtUserGetControlBrush, 0 ) \ - SYSCALL_ENTRY( 0x13e4, NtUserGetControlColor, 0 ) \ - SYSCALL_ENTRY( 0x13e5, NtUserGetCurrentDpiInfoForWindow, 0 ) \ - SYSCALL_ENTRY( 0x13e6, NtUserGetCurrentInputMessageSource, 4 ) \ - SYSCALL_ENTRY( 0x13e7, NtUserGetCursor, 0 ) \ - SYSCALL_ENTRY( 0x13e8, NtUserGetCursorFrameInfo, 16 ) \ - SYSCALL_ENTRY( 0x13e9, NtUserGetCursorInfo, 4 ) \ - SYSCALL_ENTRY( 0x13ea, NtUserGetCursorPos, 4 ) \ - SYSCALL_ENTRY( 0x13eb, NtUserGetDC, 4 ) \ - SYSCALL_ENTRY( 0x13ec, NtUserGetDCEx, 12 ) \ - SYSCALL_ENTRY( 0x13ed, NtUserGetDCompositionHwndBitmap, 0 ) \ - SYSCALL_ENTRY( 0x13ee, NtUserGetDManipHookInitFunction, 0 ) \ - SYSCALL_ENTRY( 0x13ef, NtUserGetDesktopID, 0 ) \ - SYSCALL_ENTRY( 0x13f0, NtUserGetDesktopVisualTransform, 0 ) \ - SYSCALL_ENTRY( 0x13f1, NtUserGetDeviceChangeInfo, 0 ) \ - SYSCALL_ENTRY( 0x13f2, NtUserGetDisplayAutoRotationPreferences, 0 ) \ - SYSCALL_ENTRY( 0x13f3, NtUserGetDisplayAutoRotationPreferencesByProcessId, 0 ) \ - SYSCALL_ENTRY( 0x13f4, NtUserGetDisplayConfigBufferSizes, 12 ) \ - SYSCALL_ENTRY( 0x13f5, NtUserGetDoubleClickTime, 0 ) \ - SYSCALL_ENTRY( 0x13f6, NtUserGetDpiForCurrentProcess, 0 ) \ - SYSCALL_ENTRY( 0x13f7, NtUserGetDpiForMonitor, 16 ) \ - SYSCALL_ENTRY( 0x13f8, NtUserGetDwmCursorShape, 0 ) \ - SYSCALL_ENTRY( 0x13f9, NtUserGetExtendedPointerDeviceProperty, 0 ) \ - SYSCALL_ENTRY( 0x13fa, NtUserGetForegroundWindow, 0 ) \ - SYSCALL_ENTRY( 0x13fb, NtUserGetGUIThreadInfo, 8 ) \ - SYSCALL_ENTRY( 0x13fc, NtUserGetGestureConfig, 0 ) \ - SYSCALL_ENTRY( 0x13fd, NtUserGetGestureExtArgs, 0 ) \ - SYSCALL_ENTRY( 0x13fe, NtUserGetGestureInfo, 0 ) \ - SYSCALL_ENTRY( 0x13ff, NtUserGetGuiResources, 0 ) \ - SYSCALL_ENTRY( 0x1400, NtUserGetHDevName, 0 ) \ - SYSCALL_ENTRY( 0x1401, NtUserGetHimetricScaleFactorFromPixelLocation, 0 ) \ - SYSCALL_ENTRY( 0x1402, NtUserGetIMEShowStatus, 0 ) \ - SYSCALL_ENTRY( 0x1403, NtUserGetIconInfo, 24 ) \ - SYSCALL_ENTRY( 0x1404, NtUserGetIconSize, 16 ) \ - SYSCALL_ENTRY( 0x1405, NtUserGetImeHotKey, 0 ) \ - SYSCALL_ENTRY( 0x1406, NtUserGetImeInfoEx, 0 ) \ - SYSCALL_ENTRY( 0x1407, NtUserGetInputContainerId, 0 ) \ - SYSCALL_ENTRY( 0x1408, NtUserGetInputDesktop, 0 ) \ - SYSCALL_ENTRY( 0x1409, NtUserGetInputEvent, 0 ) \ - SYSCALL_ENTRY( 0x140a, NtUserGetInputLocaleInfo, 0 ) \ - SYSCALL_ENTRY( 0x140b, NtUserGetInteractiveControlDeviceInfo, 0 ) \ - SYSCALL_ENTRY( 0x140c, NtUserGetInteractiveControlInfo, 0 ) \ - SYSCALL_ENTRY( 0x140d, NtUserGetInteractiveCtrlSupportedWaveforms, 0 ) \ - SYSCALL_ENTRY( 0x140e, NtUserGetInternalWindowPos, 12 ) \ - SYSCALL_ENTRY( 0x140f, NtUserGetKeyNameText, 12 ) \ - SYSCALL_ENTRY( 0x1410, NtUserGetKeyState, 4 ) \ - SYSCALL_ENTRY( 0x1411, NtUserGetKeyboardLayout, 4 ) \ - SYSCALL_ENTRY( 0x1412, NtUserGetKeyboardLayoutList, 8 ) \ - SYSCALL_ENTRY( 0x1413, NtUserGetKeyboardLayoutName, 4 ) \ - SYSCALL_ENTRY( 0x1414, NtUserGetKeyboardState, 4 ) \ - SYSCALL_ENTRY( 0x1415, NtUserGetKeyboardType, 0 ) \ - SYSCALL_ENTRY( 0x1416, NtUserGetLayeredWindowAttributes, 16 ) \ - SYSCALL_ENTRY( 0x1417, NtUserGetListBoxInfo, 0 ) \ - SYSCALL_ENTRY( 0x1418, NtUserGetMenuBarInfo, 16 ) \ - SYSCALL_ENTRY( 0x1419, NtUserGetMenuIndex, 0 ) \ - SYSCALL_ENTRY( 0x141a, NtUserGetMenuItemRect, 16 ) \ - SYSCALL_ENTRY( 0x141b, NtUserGetMessage, 16 ) \ - SYSCALL_ENTRY( 0x141c, NtUserGetMessagePos, 0 ) \ - SYSCALL_ENTRY( 0x141d, NtUserGetMinuserIdForBaseWindow, 0 ) \ - SYSCALL_ENTRY( 0x141e, NtUserGetModernAppWindow, 0 ) \ - SYSCALL_ENTRY( 0x141f, NtUserGetMouseMovePointsEx, 20 ) \ - SYSCALL_ENTRY( 0x1420, NtUserGetObjectInformation, 20 ) \ - SYSCALL_ENTRY( 0x1421, NtUserGetOemBitmapSize, 0 ) \ - SYSCALL_ENTRY( 0x1422, NtUserGetOpenClipboardWindow, 0 ) \ - SYSCALL_ENTRY( 0x1423, NtUserGetOwnerTransformedMonitorRect, 0 ) \ - SYSCALL_ENTRY( 0x1424, NtUserGetPhysicalDeviceRect, 0 ) \ - SYSCALL_ENTRY( 0x1425, NtUserGetPointerCursorId, 0 ) \ - SYSCALL_ENTRY( 0x1426, NtUserGetPointerDevice, 0 ) \ - SYSCALL_ENTRY( 0x1427, NtUserGetPointerDeviceCursors, 0 ) \ - SYSCALL_ENTRY( 0x1428, NtUserGetPointerDeviceInputSpace, 0 ) \ - SYSCALL_ENTRY( 0x1429, NtUserGetPointerDeviceOrientation, 0 ) \ - SYSCALL_ENTRY( 0x142a, NtUserGetPointerDeviceProperties, 0 ) \ - SYSCALL_ENTRY( 0x142b, NtUserGetPointerDeviceRects, 12 ) \ - SYSCALL_ENTRY( 0x142c, NtUserGetPointerDevices, 0 ) \ - SYSCALL_ENTRY( 0x142d, NtUserGetPointerFrameTimes, 0 ) \ - SYSCALL_ENTRY( 0x142e, NtUserGetPointerInfoList, 32 ) \ - SYSCALL_ENTRY( 0x142f, NtUserGetPointerInputTransform, 0 ) \ - SYSCALL_ENTRY( 0x1430, NtUserGetPointerProprietaryId, 0 ) \ - SYSCALL_ENTRY( 0x1431, NtUserGetPointerType, 8 ) \ - SYSCALL_ENTRY( 0x1432, NtUserGetPrecisionTouchPadConfiguration, 0 ) \ - SYSCALL_ENTRY( 0x1433, NtUserGetPriorityClipboardFormat, 8 ) \ - SYSCALL_ENTRY( 0x1434, NtUserGetProcessDefaultLayout, 4 ) \ - SYSCALL_ENTRY( 0x1435, NtUserGetProcessDpiAwarenessContext, 4 ) \ - SYSCALL_ENTRY( 0x1436, NtUserGetProcessUIContextInformation, 0 ) \ - SYSCALL_ENTRY( 0x1437, NtUserGetProcessWindowStation, 0 ) \ - SYSCALL_ENTRY( 0x1438, NtUserGetProp, 8 ) \ - SYSCALL_ENTRY( 0x1439, NtUserGetProp2, 0 ) \ - SYSCALL_ENTRY( 0x143a, NtUserGetQueueIocp, 0 ) \ - SYSCALL_ENTRY( 0x143b, NtUserGetQueueStatus, 4 ) \ - SYSCALL_ENTRY( 0x143c, NtUserGetQueueStatusReadonly, 0 ) \ - SYSCALL_ENTRY( 0x143d, NtUserGetRawInputBuffer, 12 ) \ - SYSCALL_ENTRY( 0x143e, NtUserGetRawInputData, 20 ) \ - SYSCALL_ENTRY( 0x143f, NtUserGetRawInputDeviceInfo, 16 ) \ - SYSCALL_ENTRY( 0x1440, NtUserGetRawInputDeviceList, 12 ) \ - SYSCALL_ENTRY( 0x1441, NtUserGetRawPointerDeviceData, 0 ) \ - SYSCALL_ENTRY( 0x1442, NtUserGetRegisteredRawInputDevices, 12 ) \ - SYSCALL_ENTRY( 0x1443, NtUserGetRequiredCursorSizes, 0 ) \ - SYSCALL_ENTRY( 0x1444, NtUserGetResizeDCompositionSynchronizationObject, 0 ) \ - SYSCALL_ENTRY( 0x1445, NtUserGetScrollBarInfo, 12 ) \ - SYSCALL_ENTRY( 0x1446, NtUserGetSendMessageReceiver, 0 ) \ - SYSCALL_ENTRY( 0x1447, NtUserGetSharedWindowData, 0 ) \ - SYSCALL_ENTRY( 0x1448, NtUserGetSuppressedWindowActions, 0 ) \ - SYSCALL_ENTRY( 0x1449, NtUserGetSysMenuOffset, 0 ) \ - SYSCALL_ENTRY( 0x144a, NtUserGetSystemContentRects, 0 ) \ - SYSCALL_ENTRY( 0x144b, NtUserGetSystemDpiForProcess, 4 ) \ - SYSCALL_ENTRY( 0x144c, NtUserGetSystemMenu, 8 ) \ - SYSCALL_ENTRY( 0x144d, NtUserGetThreadDesktop, 4 ) \ - SYSCALL_ENTRY( 0x144e, NtUserGetThreadState, 4 ) \ - SYSCALL_ENTRY( 0x144f, NtUserGetTitleBarInfo, 8 ) \ - SYSCALL_ENTRY( 0x1450, NtUserGetTopLevelWindow, 0 ) \ - SYSCALL_ENTRY( 0x1451, NtUserGetTouchInputInfo, 0 ) \ - SYSCALL_ENTRY( 0x1452, NtUserGetTouchValidationStatus, 0 ) \ - SYSCALL_ENTRY( 0x1453, NtUserGetUniformSpaceMapping, 0 ) \ - SYSCALL_ENTRY( 0x1454, NtUserGetUnpredictedMessagePos, 0 ) \ - SYSCALL_ENTRY( 0x1455, NtUserGetUpdateRect, 12 ) \ - SYSCALL_ENTRY( 0x1456, NtUserGetUpdateRgn, 12 ) \ - SYSCALL_ENTRY( 0x1457, NtUserGetUpdatedClipboardFormats, 12 ) \ - SYSCALL_ENTRY( 0x1458, NtUserGetWOWClass, 0 ) \ - SYSCALL_ENTRY( 0x1459, NtUserGetWinStationInfo, 0 ) \ - SYSCALL_ENTRY( 0x145a, NtUserGetWindowBand, 0 ) \ - SYSCALL_ENTRY( 0x145b, NtUserGetWindowCompositionAttribute, 0 ) \ - SYSCALL_ENTRY( 0x145c, NtUserGetWindowCompositionInfo, 0 ) \ - SYSCALL_ENTRY( 0x145d, NtUserGetWindowContextHelpId, 4 ) \ - SYSCALL_ENTRY( 0x145e, NtUserGetWindowDC, 4 ) \ - SYSCALL_ENTRY( 0x145f, NtUserGetWindowDisplayAffinity, 8 ) \ - SYSCALL_ENTRY( 0x1460, NtUserGetWindowFeedbackSetting, 0 ) \ - SYSCALL_ENTRY( 0x1461, NtUserGetWindowGroupId, 0 ) \ - SYSCALL_ENTRY( 0x1462, NtUserGetWindowMinimizeRect, 0 ) \ - SYSCALL_ENTRY( 0x1463, NtUserGetWindowPlacement, 8 ) \ - SYSCALL_ENTRY( 0x1464, NtUserGetWindowProcessHandle, 0 ) \ - SYSCALL_ENTRY( 0x1465, NtUserGetWindowRgnEx, 12 ) \ - SYSCALL_ENTRY( 0x1466, NtUserGetWindowThreadProcessId, 0 ) \ - SYSCALL_ENTRY( 0x1467, NtUserGetWindowTrackInfoAsync, 0 ) \ - SYSCALL_ENTRY( 0x1468, NtUserGhostWindowFromHungWindow, 0 ) \ - SYSCALL_ENTRY( 0x1469, NtUserHandleDelegatedInput, 0 ) \ - SYSCALL_ENTRY( 0x146a, NtUserHandleSystemThreadCreationFailure, 0 ) \ - SYSCALL_ENTRY( 0x146b, NtUserHardErrorControl, 0 ) \ - SYSCALL_ENTRY( 0x146c, NtUserHideCaret, 4 ) \ - SYSCALL_ENTRY( 0x146d, NtUserHideCursorNoCapture, 0 ) \ - SYSCALL_ENTRY( 0x146e, NtUserHidePointerContactVisualization, 0 ) \ - SYSCALL_ENTRY( 0x146f, NtUserHiliteMenuItem, 16 ) \ - SYSCALL_ENTRY( 0x1470, NtUserHungWindowFromGhostWindow, 0 ) \ - SYSCALL_ENTRY( 0x1471, NtUserHwndQueryRedirectionInfo, 0 ) \ - SYSCALL_ENTRY( 0x1472, NtUserHwndSetRedirectionInfo, 0 ) \ - SYSCALL_ENTRY( 0x1473, NtUserImpersonateDdeClientWindow, 0 ) \ - SYSCALL_ENTRY( 0x1474, NtUserInheritWindowMonitor, 0 ) \ - SYSCALL_ENTRY( 0x1475, NtUserInitAnsiOem, 0 ) \ - SYSCALL_ENTRY( 0x1476, NtUserInitTask, 0 ) \ - SYSCALL_ENTRY( 0x1477, NtUserInitThreadCoreMessagingIocp, 0 ) \ - SYSCALL_ENTRY( 0x1478, NtUserInitThreadCoreMessagingIocp2, 0 ) \ - SYSCALL_ENTRY( 0x1479, NtUserInitialize, 0 ) \ - SYSCALL_ENTRY( 0x147a, NtUserInitializeClientPfnArrays, 16 ) \ - SYSCALL_ENTRY( 0x147b, NtUserInitializeGenericHidInjection, 0 ) \ - SYSCALL_ENTRY( 0x147c, NtUserInitializeInputDeviceInjection, 0 ) \ - SYSCALL_ENTRY( 0x147d, NtUserInitializePointerDeviceInjection, 0 ) \ - SYSCALL_ENTRY( 0x147e, NtUserInitializePointerDeviceInjectionEx, 0 ) \ - SYSCALL_ENTRY( 0x147f, NtUserInitializeTouchInjection, 8 ) \ - SYSCALL_ENTRY( 0x1480, NtUserInjectDeviceInput, 0 ) \ - SYSCALL_ENTRY( 0x1481, NtUserInjectGenericHidInput, 0 ) \ - SYSCALL_ENTRY( 0x1482, NtUserInjectGesture, 0 ) \ - SYSCALL_ENTRY( 0x1483, NtUserInjectKeyboardInput, 0 ) \ - SYSCALL_ENTRY( 0x1484, NtUserInjectMouseInput, 0 ) \ - SYSCALL_ENTRY( 0x1485, NtUserInjectPointerInput, 0 ) \ - SYSCALL_ENTRY( 0x1486, NtUserInjectTouchInput, 0 ) \ - SYSCALL_ENTRY( 0x1487, NtUserInteractiveControlQueryUsage, 0 ) \ - SYSCALL_ENTRY( 0x1488, NtUserInternalGetWindowIcon, 8 ) \ - SYSCALL_ENTRY( 0x1489, NtUserInternalGetWindowText, 12 ) \ - SYSCALL_ENTRY( 0x148a, NtUserInternalStartMoveSize, 0 ) \ - SYSCALL_ENTRY( 0x148b, NtUserInternalToUnicode, 0 ) \ - SYSCALL_ENTRY( 0x148c, NtUserInvalidateRect, 12 ) \ - SYSCALL_ENTRY( 0x148d, NtUserInvalidateRgn, 12 ) \ - SYSCALL_ENTRY( 0x148e, NtUserIsChildWindowDpiMessageEnabled, 4 ) \ - SYSCALL_ENTRY( 0x148f, NtUserIsClipboardFormatAvailable, 4 ) \ - SYSCALL_ENTRY( 0x1490, NtUserIsMouseInPointerEnabled, 0 ) \ - SYSCALL_ENTRY( 0x1491, NtUserIsMouseInputEnabled, 0 ) \ - SYSCALL_ENTRY( 0x1492, NtUserIsNonClientDpiScalingEnabled, 0 ) \ - SYSCALL_ENTRY( 0x1493, NtUserIsQueueAttached, 0 ) \ - SYSCALL_ENTRY( 0x1494, NtUserIsResizeLayoutSynchronizationEnabled, 0 ) \ - SYSCALL_ENTRY( 0x1495, NtUserIsTopLevelWindow, 0 ) \ - SYSCALL_ENTRY( 0x1496, NtUserIsTouchWindow, 0 ) \ - SYSCALL_ENTRY( 0x1497, NtUserIsWindowBroadcastingDpiToChildren, 0 ) \ - SYSCALL_ENTRY( 0x1498, NtUserIsWindowDisplayChangeSuppressed, 0 ) \ - SYSCALL_ENTRY( 0x1499, NtUserIsWindowGDIScaledDpiMessageEnabled, 0 ) \ - SYSCALL_ENTRY( 0x149a, NtUserKillSystemTimer, 8 ) \ - SYSCALL_ENTRY( 0x149b, NtUserKillTimer, 8 ) \ - SYSCALL_ENTRY( 0x149c, NtUserLW_LoadFonts, 0 ) \ - SYSCALL_ENTRY( 0x149d, NtUserLayoutCompleted, 0 ) \ - SYSCALL_ENTRY( 0x149e, NtUserLinkDpiCursor, 0 ) \ - SYSCALL_ENTRY( 0x149f, NtUserLoadCursorsAndIcons, 0 ) \ - SYSCALL_ENTRY( 0x14a0, NtUserLoadKeyboardLayoutEx, 0 ) \ - SYSCALL_ENTRY( 0x14a1, NtUserLoadUserApiHook, 0 ) \ - SYSCALL_ENTRY( 0x14a2, NtUserLockCursor, 0 ) \ - SYSCALL_ENTRY( 0x14a3, NtUserLockSetForegroundWindow, 0 ) \ - SYSCALL_ENTRY( 0x14a4, NtUserLockWindowStation, 0 ) \ - SYSCALL_ENTRY( 0x14a5, NtUserLockWindowUpdate, 4 ) \ - SYSCALL_ENTRY( 0x14a6, NtUserLockWorkStation, 0 ) \ - SYSCALL_ENTRY( 0x14a7, NtUserLogicalToPerMonitorDPIPhysicalPoint, 8 ) \ - SYSCALL_ENTRY( 0x14a8, NtUserLogicalToPhysicalDpiPointForWindow, 0 ) \ - SYSCALL_ENTRY( 0x14a9, NtUserLogicalToPhysicalPoint, 0 ) \ - SYSCALL_ENTRY( 0x14aa, NtUserMNDragLeave, 0 ) \ - SYSCALL_ENTRY( 0x14ab, NtUserMNDragOver, 0 ) \ - SYSCALL_ENTRY( 0x14ac, NtUserMagControl, 0 ) \ - SYSCALL_ENTRY( 0x14ad, NtUserMagGetContextInformation, 0 ) \ - SYSCALL_ENTRY( 0x14ae, NtUserMagSetContextInformation, 0 ) \ - SYSCALL_ENTRY( 0x14af, NtUserMapDesktopObject, 0 ) \ - SYSCALL_ENTRY( 0x14b0, NtUserMapPointsByVisualIdentifier, 0 ) \ - SYSCALL_ENTRY( 0x14b1, NtUserMapVirtualKeyEx, 12 ) \ - SYSCALL_ENTRY( 0x14b2, NtUserMarkWindowForRawMouse, 0 ) \ - SYSCALL_ENTRY( 0x14b3, NtUserMenuItemFromPoint, 16 ) \ - SYSCALL_ENTRY( 0x14b4, NtUserMessageBeep, 4 ) \ - SYSCALL_ENTRY( 0x14b5, NtUserMessageCall, 28 ) \ - SYSCALL_ENTRY( 0x14b6, NtUserMinInitialize, 0 ) \ - SYSCALL_ENTRY( 0x14b7, NtUserMinMaximize, 0 ) \ - SYSCALL_ENTRY( 0x14b8, NtUserModifyUserStartupInfoFlags, 8 ) \ - SYSCALL_ENTRY( 0x14b9, NtUserModifyWindowTouchCapability, 0 ) \ - SYSCALL_ENTRY( 0x14ba, NtUserMoveWindow, 24 ) \ - SYSCALL_ENTRY( 0x14bb, NtUserMsgWaitForMultipleObjectsEx, 20 ) \ - SYSCALL_ENTRY( 0x14bc, NtUserNavigateFocus, 0 ) \ - SYSCALL_ENTRY( 0x14bd, NtUserNlsKbdSendIMENotification, 0 ) \ - SYSCALL_ENTRY( 0x14be, NtUserNotifyIMEStatus, 8 ) \ - SYSCALL_ENTRY( 0x14bf, NtUserNotifyOverlayWindow, 0 ) \ - SYSCALL_ENTRY( 0x14c0, NtUserNotifyProcessCreate, 0 ) \ - SYSCALL_ENTRY( 0x14c1, NtUserNotifyWinEvent, 16 ) \ - SYSCALL_ENTRY( 0x14c2, NtUserOpenClipboard, 8 ) \ - SYSCALL_ENTRY( 0x14c3, NtUserOpenDesktop, 12 ) \ - SYSCALL_ENTRY( 0x14c4, NtUserOpenInputDesktop, 12 ) \ - SYSCALL_ENTRY( 0x14c5, NtUserOpenThreadDesktop, 0 ) \ - SYSCALL_ENTRY( 0x14c6, NtUserOpenWindowStation, 8 ) \ - SYSCALL_ENTRY( 0x14c7, NtUserPaintDesktop, 0 ) \ - SYSCALL_ENTRY( 0x14c8, NtUserPaintMenuBar, 0 ) \ - SYSCALL_ENTRY( 0x14c9, NtUserPaintMonitor, 0 ) \ - SYSCALL_ENTRY( 0x14ca, NtUserPeekMessage, 20 ) \ - SYSCALL_ENTRY( 0x14cb, NtUserPerMonitorDPIPhysicalToLogicalPoint, 8 ) \ - SYSCALL_ENTRY( 0x14cc, NtUserPhysicalToLogicalDpiPointForWindow, 0 ) \ - SYSCALL_ENTRY( 0x14cd, NtUserPhysicalToLogicalPoint, 0 ) \ - SYSCALL_ENTRY( 0x14ce, NtUserPlayEventSound, 0 ) \ - SYSCALL_ENTRY( 0x14cf, NtUserPostKeyboardInputMessage, 0 ) \ - SYSCALL_ENTRY( 0x14d0, NtUserPostMessage, 16 ) \ - SYSCALL_ENTRY( 0x14d1, NtUserPostQuitMessage, 4 ) \ - SYSCALL_ENTRY( 0x14d2, NtUserPostThreadMessage, 16 ) \ - SYSCALL_ENTRY( 0x14d3, NtUserPrepareForLogoff, 0 ) \ - SYSCALL_ENTRY( 0x14d4, NtUserPrintWindow, 12 ) \ - SYSCALL_ENTRY( 0x14d5, NtUserProcessConnect, 0 ) \ - SYSCALL_ENTRY( 0x14d6, NtUserProcessInkFeedbackCommand, 0 ) \ - SYSCALL_ENTRY( 0x14d7, NtUserPromoteMouseInPointer, 0 ) \ - SYSCALL_ENTRY( 0x14d8, NtUserPromotePointer, 0 ) \ - SYSCALL_ENTRY( 0x14d9, NtUserQueryActivationObject, 0 ) \ - SYSCALL_ENTRY( 0x14da, NtUserQueryBSDRWindow, 0 ) \ - SYSCALL_ENTRY( 0x14db, NtUserQueryDisplayConfig, 24 ) \ - SYSCALL_ENTRY( 0x14dc, NtUserQueryInformationThread, 0 ) \ - SYSCALL_ENTRY( 0x14dd, NtUserQueryInputContext, 8 ) \ - SYSCALL_ENTRY( 0x14de, NtUserQuerySendMessage, 0 ) \ - SYSCALL_ENTRY( 0x14df, NtUserQueryWindow, 8 ) \ - SYSCALL_ENTRY( 0x14e0, NtUserRaiseLowerShellWindow, 0 ) \ - SYSCALL_ENTRY( 0x14e1, NtUserRealChildWindowFromPoint, 12 ) \ - SYSCALL_ENTRY( 0x14e2, NtUserRealInternalGetMessage, 0 ) \ - SYSCALL_ENTRY( 0x14e3, NtUserRealWaitMessageEx, 0 ) \ - SYSCALL_ENTRY( 0x14e4, NtUserRealizePalette, 4 ) \ - SYSCALL_ENTRY( 0x14e5, NtUserReassociateQueueEventCompletionPacket, 0 ) \ - SYSCALL_ENTRY( 0x14e6, NtUserRedrawFrame, 0 ) \ - SYSCALL_ENTRY( 0x14e7, NtUserRedrawFrameAndHook, 0 ) \ - SYSCALL_ENTRY( 0x14e8, NtUserRedrawTitle, 0 ) \ - SYSCALL_ENTRY( 0x14e9, NtUserRedrawWindow, 16 ) \ - SYSCALL_ENTRY( 0x14ea, NtUserRegisterBSDRWindow, 0 ) \ - SYSCALL_ENTRY( 0x14eb, NtUserRegisterClassExWOW, 28 ) \ - SYSCALL_ENTRY( 0x14ec, NtUserRegisterCloakedNotification, 0 ) \ - SYSCALL_ENTRY( 0x14ed, NtUserRegisterDManipHook, 0 ) \ - SYSCALL_ENTRY( 0x14ee, NtUserRegisterEdgy, 0 ) \ - SYSCALL_ENTRY( 0x14ef, NtUserRegisterErrorReportingDialog, 0 ) \ - SYSCALL_ENTRY( 0x14f0, NtUserRegisterForCustomDockTargets, 0 ) \ - SYSCALL_ENTRY( 0x14f1, NtUserRegisterForTooltipDismissNotification, 0 ) \ - SYSCALL_ENTRY( 0x14f2, NtUserRegisterGhostWindow, 0 ) \ - SYSCALL_ENTRY( 0x14f3, NtUserRegisterHotKey, 16 ) \ - SYSCALL_ENTRY( 0x14f4, NtUserRegisterLPK, 0 ) \ - SYSCALL_ENTRY( 0x14f5, NtUserRegisterLogonProcess, 0 ) \ - SYSCALL_ENTRY( 0x14f6, NtUserRegisterManipulationThread, 0 ) \ - SYSCALL_ENTRY( 0x14f7, NtUserRegisterPointerDeviceNotifications, 0 ) \ - SYSCALL_ENTRY( 0x14f8, NtUserRegisterPointerInputTarget, 0 ) \ - SYSCALL_ENTRY( 0x14f9, NtUserRegisterPrecisionTouchpadWindow, 0 ) \ - SYSCALL_ENTRY( 0x14fa, NtUserRegisterRawInputDevices, 12 ) \ - SYSCALL_ENTRY( 0x14fb, NtUserRegisterServicesProcess, 0 ) \ - SYSCALL_ENTRY( 0x14fc, NtUserRegisterSessionPort, 0 ) \ - SYSCALL_ENTRY( 0x14fd, NtUserRegisterShellHookWindow, 0 ) \ - SYSCALL_ENTRY( 0x14fe, NtUserRegisterShellPTPListener, 0 ) \ - SYSCALL_ENTRY( 0x14ff, NtUserRegisterSiblingFrostWindow, 0 ) \ - SYSCALL_ENTRY( 0x1500, NtUserRegisterSystemThread, 0 ) \ - SYSCALL_ENTRY( 0x1501, NtUserRegisterTasklist, 0 ) \ - SYSCALL_ENTRY( 0x1502, NtUserRegisterTouchHitTestingWindow, 0 ) \ - SYSCALL_ENTRY( 0x1503, NtUserRegisterTouchPadCapable, 4 ) \ - SYSCALL_ENTRY( 0x1504, NtUserRegisterUserApiHook, 0 ) \ - SYSCALL_ENTRY( 0x1505, NtUserRegisterUserHungAppHandlers, 0 ) \ - SYSCALL_ENTRY( 0x1506, NtUserRegisterWindowArrangementCallout, 0 ) \ - SYSCALL_ENTRY( 0x1507, NtUserRegisterWindowMessage, 4 ) \ - SYSCALL_ENTRY( 0x1508, NtUserReleaseCapture, 0 ) \ - SYSCALL_ENTRY( 0x1509, NtUserReleaseDC, 8 ) \ - SYSCALL_ENTRY( 0x150a, NtUserReleaseDwmHitTestWaiters, 0 ) \ - SYSCALL_ENTRY( 0x150b, NtUserRemoteConnect, 0 ) \ - SYSCALL_ENTRY( 0x150c, NtUserRemoteConnectState, 0 ) \ - SYSCALL_ENTRY( 0x150d, NtUserRemoteConsoleShadowStop, 0 ) \ - SYSCALL_ENTRY( 0x150e, NtUserRemoteDisconnect, 0 ) \ - SYSCALL_ENTRY( 0x150f, NtUserRemoteNotify, 0 ) \ - SYSCALL_ENTRY( 0x1510, NtUserRemotePassthruDisable, 0 ) \ - SYSCALL_ENTRY( 0x1511, NtUserRemotePassthruEnable, 0 ) \ - SYSCALL_ENTRY( 0x1512, NtUserRemoteReconnect, 0 ) \ - SYSCALL_ENTRY( 0x1513, NtUserRemoteRedrawRectangle, 0 ) \ - SYSCALL_ENTRY( 0x1514, NtUserRemoteRedrawScreen, 0 ) \ - SYSCALL_ENTRY( 0x1515, NtUserRemoteShadowCleanup, 0 ) \ - SYSCALL_ENTRY( 0x1516, NtUserRemoteShadowSetup, 0 ) \ - SYSCALL_ENTRY( 0x1517, NtUserRemoteShadowStart, 0 ) \ - SYSCALL_ENTRY( 0x1518, NtUserRemoteShadowStop, 0 ) \ - SYSCALL_ENTRY( 0x1519, NtUserRemoteStopScreenUpdates, 0 ) \ - SYSCALL_ENTRY( 0x151a, NtUserRemoteThinwireStats, 0 ) \ - SYSCALL_ENTRY( 0x151b, NtUserRemoveClipboardFormatListener, 4 ) \ - SYSCALL_ENTRY( 0x151c, NtUserRemoveInjectionDevice, 0 ) \ - SYSCALL_ENTRY( 0x151d, NtUserRemoveMenu, 12 ) \ - SYSCALL_ENTRY( 0x151e, NtUserRemoveProp, 8 ) \ - SYSCALL_ENTRY( 0x151f, NtUserRemoveQueueCompletion, 0 ) \ - SYSCALL_ENTRY( 0x1520, NtUserRemoveVisualIdentifier, 0 ) \ - SYSCALL_ENTRY( 0x1521, NtUserReplyMessage, 4 ) \ - SYSCALL_ENTRY( 0x1522, NtUserReportInertia, 0 ) \ - SYSCALL_ENTRY( 0x1523, NtUserRequestMoveSizeOperation, 0 ) \ - SYSCALL_ENTRY( 0x1524, NtUserResetDblClk, 0 ) \ - SYSCALL_ENTRY( 0x1525, NtUserResolveDesktopForWOW, 0 ) \ - SYSCALL_ENTRY( 0x1526, NtUserRestoreWindowDpiChanges, 0 ) \ - SYSCALL_ENTRY( 0x1527, NtUserSBGetParms, 0 ) \ - SYSCALL_ENTRY( 0x1528, NtUserScaleSystemMetricForDPIWithoutCache, 0 ) \ - SYSCALL_ENTRY( 0x1529, NtUserScheduleDispatchNotification, 4 ) \ - SYSCALL_ENTRY( 0x152a, NtUserScrollDC, 28 ) \ - SYSCALL_ENTRY( 0x152b, NtUserScrollWindowEx, 32 ) \ - SYSCALL_ENTRY( 0x152c, NtUserSelectPalette, 12 ) \ - SYSCALL_ENTRY( 0x152d, NtUserSendEventMessage, 0 ) \ - SYSCALL_ENTRY( 0x152e, NtUserSendInput, 12 ) \ - SYSCALL_ENTRY( 0x152f, NtUserSendInteractiveControlHapticsReport, 0 ) \ - SYSCALL_ENTRY( 0x1530, NtUserSetActivationFilter, 0 ) \ - SYSCALL_ENTRY( 0x1531, NtUserSetActiveProcessForMonitor, 0 ) \ - SYSCALL_ENTRY( 0x1532, NtUserSetActiveWindow, 4 ) \ - SYSCALL_ENTRY( 0x1533, NtUserSetAdditionalForegroundBoostProcesses, 12 ) \ - SYSCALL_ENTRY( 0x1534, NtUserSetAppImeLevel, 0 ) \ - SYSCALL_ENTRY( 0x1535, NtUserSetAutoRotation, 0 ) \ - SYSCALL_ENTRY( 0x1536, NtUserSetBridgeWindowChild, 0 ) \ - SYSCALL_ENTRY( 0x1537, NtUserSetBrokeredForeground, 0 ) \ - SYSCALL_ENTRY( 0x1538, NtUserSetCalibrationData, 0 ) \ - SYSCALL_ENTRY( 0x1539, NtUserSetCancelRotationDelayHintWindow, 0 ) \ - SYSCALL_ENTRY( 0x153a, NtUserSetCapture, 4 ) \ - SYSCALL_ENTRY( 0x153b, NtUserSetCaretBlinkTime, 4 ) \ - SYSCALL_ENTRY( 0x153c, NtUserSetCaretPos, 8 ) \ - SYSCALL_ENTRY( 0x153d, NtUserSetChildWindowNoActivate, 0 ) \ - SYSCALL_ENTRY( 0x153e, NtUserSetClassLong, 16 ) \ - SYSCALL_ENTRY( 0x153f, NtUserSetClassLongPtr, 16 ) \ - SYSCALL_ENTRY( 0x1540, NtUserSetClassWord, 12 ) \ - SYSCALL_ENTRY( 0x1541, NtUserSetClipboardData, 12 ) \ - SYSCALL_ENTRY( 0x1542, NtUserSetClipboardViewer, 4 ) \ - SYSCALL_ENTRY( 0x1543, NtUserSetCoreWindow, 0 ) \ - SYSCALL_ENTRY( 0x1544, NtUserSetCoreWindowPartner, 0 ) \ - SYSCALL_ENTRY( 0x1545, NtUserSetCoveredWindowStates, 0 ) \ - SYSCALL_ENTRY( 0x1546, NtUserSetCursor, 4 ) \ - SYSCALL_ENTRY( 0x1547, NtUserSetCursorContents, 0 ) \ - SYSCALL_ENTRY( 0x1548, NtUserSetCursorIconData, 16 ) \ - SYSCALL_ENTRY( 0x1549, NtUserSetCursorIconDataEx, 0 ) \ - SYSCALL_ENTRY( 0x154a, NtUserSetCursorPos, 8 ) \ - SYSCALL_ENTRY( 0x154b, NtUserSetDesktopColorTransform, 0 ) \ - SYSCALL_ENTRY( 0x154c, NtUserSetDesktopVisualInputSink, 0 ) \ - SYSCALL_ENTRY( 0x154d, NtUserSetDialogControlDpiChangeBehavior, 0 ) \ - SYSCALL_ENTRY( 0x154e, NtUserSetDialogPointer, 0 ) \ - SYSCALL_ENTRY( 0x154f, NtUserSetDialogSystemMenu, 0 ) \ - SYSCALL_ENTRY( 0x1550, NtUserSetDisplayAutoRotationPreferences, 0 ) \ - SYSCALL_ENTRY( 0x1551, NtUserSetDisplayConfig, 0 ) \ - SYSCALL_ENTRY( 0x1552, NtUserSetDisplayMapping, 0 ) \ - SYSCALL_ENTRY( 0x1553, NtUserSetDoubleClickTime, 0 ) \ - SYSCALL_ENTRY( 0x1554, NtUserSetDpiForWindow, 0 ) \ - SYSCALL_ENTRY( 0x1555, NtUserSetFallbackForeground, 0 ) \ - SYSCALL_ENTRY( 0x1556, NtUserSetFeatureReportResponse, 0 ) \ - SYSCALL_ENTRY( 0x1557, NtUserSetFocus, 4 ) \ - SYSCALL_ENTRY( 0x1558, NtUserSetForegroundRedirectionForActivationObject, 0 ) \ - SYSCALL_ENTRY( 0x1559, NtUserSetForegroundWindow, 4 ) \ - SYSCALL_ENTRY( 0x155a, NtUserSetForegroundWindowForApplication, 0 ) \ - SYSCALL_ENTRY( 0x155b, NtUserSetFullscreenMagnifierOffsetsDWMUpdated, 0 ) \ - SYSCALL_ENTRY( 0x155c, NtUserSetGestureConfig, 0 ) \ - SYSCALL_ENTRY( 0x155d, NtUserSetImeHotKey, 0 ) \ - SYSCALL_ENTRY( 0x155e, NtUserSetImeInfoEx, 0 ) \ - SYSCALL_ENTRY( 0x155f, NtUserSetImeOwnerWindow, 0 ) \ - SYSCALL_ENTRY( 0x1560, NtUserSetInformationThread, 0 ) \ - SYSCALL_ENTRY( 0x1561, NtUserSetInputServiceState, 0 ) \ - SYSCALL_ENTRY( 0x1562, NtUserSetInteractiveControlFocus, 0 ) \ - SYSCALL_ENTRY( 0x1563, NtUserSetInteractiveCtrlRotationAngle, 0 ) \ - SYSCALL_ENTRY( 0x1564, NtUserSetInternalWindowPos, 16 ) \ - SYSCALL_ENTRY( 0x1565, NtUserSetKeyboardState, 4 ) \ - SYSCALL_ENTRY( 0x1566, NtUserSetLayeredWindowAttributes, 16 ) \ - SYSCALL_ENTRY( 0x1567, NtUserSetMagnificationDesktopMagnifierOffsetsDWMUpdated, 0 ) \ - SYSCALL_ENTRY( 0x1568, NtUserSetManipulationInputTarget, 0 ) \ - SYSCALL_ENTRY( 0x1569, NtUserSetMenu, 8 ) \ - SYSCALL_ENTRY( 0x156a, NtUserSetMenuContextHelpId, 8 ) \ - SYSCALL_ENTRY( 0x156b, NtUserSetMenuDefaultItem, 12 ) \ - SYSCALL_ENTRY( 0x156c, NtUserSetMenuFlagRtoL, 0 ) \ - SYSCALL_ENTRY( 0x156d, NtUserSetMessageExtraInfo, 4 ) \ - SYSCALL_ENTRY( 0x156e, NtUserSetMirrorRendering, 0 ) \ - SYSCALL_ENTRY( 0x156f, NtUserSetModernAppWindow, 0 ) \ - SYSCALL_ENTRY( 0x1570, NtUserSetMonitorWorkArea, 0 ) \ - SYSCALL_ENTRY( 0x1571, NtUserSetMouseInputRateLimitingTimer, 0 ) \ - SYSCALL_ENTRY( 0x1572, NtUserSetMsgBox, 0 ) \ - SYSCALL_ENTRY( 0x1573, NtUserSetObjectInformation, 16 ) \ - SYSCALL_ENTRY( 0x1574, NtUserSetParent, 8 ) \ - SYSCALL_ENTRY( 0x1575, NtUserSetPrecisionTouchPadConfiguration, 0 ) \ - SYSCALL_ENTRY( 0x1576, NtUserSetProcessDefaultLayout, 4 ) \ - SYSCALL_ENTRY( 0x1577, NtUserSetProcessDpiAwarenessContext, 8 ) \ - SYSCALL_ENTRY( 0x1578, NtUserSetProcessInteractionFlags, 0 ) \ - SYSCALL_ENTRY( 0x1579, NtUserSetProcessLaunchForegroundPolicy, 0 ) \ - SYSCALL_ENTRY( 0x157a, NtUserSetProcessMousewheelRoutingMode, 0 ) \ - SYSCALL_ENTRY( 0x157b, NtUserSetProcessRestrictionExemption, 0 ) \ - SYSCALL_ENTRY( 0x157c, NtUserSetProcessUIAccessZorder, 0 ) \ - SYSCALL_ENTRY( 0x157d, NtUserSetProcessWindowStation, 4 ) \ - SYSCALL_ENTRY( 0x157e, NtUserSetProgmanWindow, 4 ) \ - SYSCALL_ENTRY( 0x157f, NtUserSetProp, 12 ) \ - SYSCALL_ENTRY( 0x1580, NtUserSetProp2, 0 ) \ - SYSCALL_ENTRY( 0x1581, NtUserSetScrollInfo, 16 ) \ - SYSCALL_ENTRY( 0x1582, NtUserSetSensorPresence, 0 ) \ - SYSCALL_ENTRY( 0x1583, NtUserSetSharedWindowData, 0 ) \ - SYSCALL_ENTRY( 0x1584, NtUserSetShellChangeNotifyHWND, 0 ) \ - SYSCALL_ENTRY( 0x1585, NtUserSetShellWindowEx, 8 ) \ - SYSCALL_ENTRY( 0x1586, NtUserSetSysColors, 12 ) \ - SYSCALL_ENTRY( 0x1587, NtUserSetSysMenu, 0 ) \ - SYSCALL_ENTRY( 0x1588, NtUserSetSystemContentRects, 0 ) \ - SYSCALL_ENTRY( 0x1589, NtUserSetSystemCursor, 0 ) \ - SYSCALL_ENTRY( 0x158a, NtUserSetSystemMenu, 8 ) \ - SYSCALL_ENTRY( 0x158b, NtUserSetSystemTimer, 12 ) \ - SYSCALL_ENTRY( 0x158c, NtUserSetTSFEventState, 0 ) \ - SYSCALL_ENTRY( 0x158d, NtUserSetTargetForResourceBrokering, 0 ) \ - SYSCALL_ENTRY( 0x158e, NtUserSetTaskmanWindow, 4 ) \ - SYSCALL_ENTRY( 0x158f, NtUserSetThreadDesktop, 4 ) \ - SYSCALL_ENTRY( 0x1590, NtUserSetThreadInputBlocked, 0 ) \ - SYSCALL_ENTRY( 0x1591, NtUserSetThreadLayoutHandles, 0 ) \ - SYSCALL_ENTRY( 0x1592, NtUserSetThreadQueueMergeSetting, 0 ) \ - SYSCALL_ENTRY( 0x1593, NtUserSetThreadState, 0 ) \ - SYSCALL_ENTRY( 0x1594, NtUserSetTimer, 20 ) \ - SYSCALL_ENTRY( 0x1595, NtUserSetUserObjectCapability, 0 ) \ - SYSCALL_ENTRY( 0x1596, NtUserSetVisible, 0 ) \ - SYSCALL_ENTRY( 0x1597, NtUserSetWaitForQueueAttach, 0 ) \ - SYSCALL_ENTRY( 0x1598, NtUserSetWatermarkStrings, 0 ) \ - SYSCALL_ENTRY( 0x1599, NtUserSetWinEventHook, 32 ) \ - SYSCALL_ENTRY( 0x159a, NtUserSetWindowArrangement, 0 ) \ - SYSCALL_ENTRY( 0x159b, NtUserSetWindowBand, 0 ) \ - SYSCALL_ENTRY( 0x159c, NtUserSetWindowCompositionAttribute, 0 ) \ - SYSCALL_ENTRY( 0x159d, NtUserSetWindowCompositionTransition, 0 ) \ - SYSCALL_ENTRY( 0x159e, NtUserSetWindowContextHelpId, 8 ) \ - SYSCALL_ENTRY( 0x159f, NtUserSetWindowDisplayAffinity, 0 ) \ - SYSCALL_ENTRY( 0x15a0, NtUserSetWindowFNID, 8 ) \ - SYSCALL_ENTRY( 0x15a1, NtUserSetWindowFeedbackSetting, 0 ) \ - SYSCALL_ENTRY( 0x15a2, NtUserSetWindowGroup, 0 ) \ - SYSCALL_ENTRY( 0x15a3, NtUserSetWindowLong, 16 ) \ - SYSCALL_ENTRY( 0x15a4, NtUserSetWindowLongPtr, 16 ) \ - SYSCALL_ENTRY( 0x15a5, NtUserSetWindowMessageCapability, 0 ) \ - SYSCALL_ENTRY( 0x15a6, NtUserSetWindowPlacement, 8 ) \ - SYSCALL_ENTRY( 0x15a7, NtUserSetWindowPos, 28 ) \ - SYSCALL_ENTRY( 0x15a8, NtUserSetWindowRgn, 12 ) \ - SYSCALL_ENTRY( 0x15a9, NtUserSetWindowRgnEx, 0 ) \ - SYSCALL_ENTRY( 0x15aa, NtUserSetWindowShowState, 0 ) \ - SYSCALL_ENTRY( 0x15ab, NtUserSetWindowState, 0 ) \ - SYSCALL_ENTRY( 0x15ac, NtUserSetWindowStationUser, 0 ) \ - SYSCALL_ENTRY( 0x15ad, NtUserSetWindowWord, 12 ) \ - SYSCALL_ENTRY( 0x15ae, NtUserSetWindowsHookAW, 0 ) \ - SYSCALL_ENTRY( 0x15af, NtUserSetWindowsHookEx, 24 ) \ - SYSCALL_ENTRY( 0x15b0, NtUserShellForegroundBoostProcess, 0 ) \ - SYSCALL_ENTRY( 0x15b1, NtUserShellHandwritingDelegateInput, 0 ) \ - SYSCALL_ENTRY( 0x15b2, NtUserShellHandwritingHandleDelegatedInput, 0 ) \ - SYSCALL_ENTRY( 0x15b3, NtUserShellHandwritingUndelegateInput, 0 ) \ - SYSCALL_ENTRY( 0x15b4, NtUserShellMigrateWindow, 0 ) \ - SYSCALL_ENTRY( 0x15b5, NtUserShellRegisterHotKey, 0 ) \ - SYSCALL_ENTRY( 0x15b6, NtUserShellSetWindowPos, 0 ) \ - SYSCALL_ENTRY( 0x15b7, NtUserShowCaret, 4 ) \ - SYSCALL_ENTRY( 0x15b8, NtUserShowCursor, 4 ) \ - SYSCALL_ENTRY( 0x15b9, NtUserShowOwnedPopups, 8 ) \ - SYSCALL_ENTRY( 0x15ba, NtUserShowScrollBar, 12 ) \ - SYSCALL_ENTRY( 0x15bb, NtUserShowStartGlass, 0 ) \ - SYSCALL_ENTRY( 0x15bc, NtUserShowSystemCursor, 0 ) \ - SYSCALL_ENTRY( 0x15bd, NtUserShowWindow, 8 ) \ - SYSCALL_ENTRY( 0x15be, NtUserShowWindowAsync, 8 ) \ - SYSCALL_ENTRY( 0x15bf, NtUserShutdownBlockReasonCreate, 0 ) \ - SYSCALL_ENTRY( 0x15c0, NtUserShutdownBlockReasonQuery, 0 ) \ - SYSCALL_ENTRY( 0x15c1, NtUserShutdownReasonDestroy, 0 ) \ - SYSCALL_ENTRY( 0x15c2, NtUserSignalRedirectionStartComplete, 0 ) \ - SYSCALL_ENTRY( 0x15c3, NtUserSlicerControl, 0 ) \ - SYSCALL_ENTRY( 0x15c4, NtUserSoundSentry, 0 ) \ - SYSCALL_ENTRY( 0x15c5, NtUserStopAndEndInertia, 0 ) \ - SYSCALL_ENTRY( 0x15c6, NtUserSuppressWindowActions, 0 ) \ - SYSCALL_ENTRY( 0x15c7, NtUserSuppressWindowDisplayChange, 0 ) \ - SYSCALL_ENTRY( 0x15c8, NtUserSwapMouseButton, 0 ) \ - SYSCALL_ENTRY( 0x15c9, NtUserSwitchDesktop, 4 ) \ - SYSCALL_ENTRY( 0x15ca, NtUserSwitchToThisWindow, 0 ) \ - SYSCALL_ENTRY( 0x15cb, NtUserSystemParametersInfo, 16 ) \ - SYSCALL_ENTRY( 0x15cc, NtUserSystemParametersInfoForDpi, 20 ) \ - SYSCALL_ENTRY( 0x15cd, NtUserTestForInteractiveUser, 0 ) \ - SYSCALL_ENTRY( 0x15ce, NtUserThreadMessageQueueAttached, 0 ) \ - SYSCALL_ENTRY( 0x15cf, NtUserThunkedMenuInfo, 8 ) \ - SYSCALL_ENTRY( 0x15d0, NtUserThunkedMenuItemInfo, 24 ) \ - SYSCALL_ENTRY( 0x15d1, NtUserToUnicodeEx, 28 ) \ - SYSCALL_ENTRY( 0x15d2, NtUserTraceLoggingSendMixedModeTelemetry, 0 ) \ - SYSCALL_ENTRY( 0x15d3, NtUserTrackMouseEvent, 4 ) \ - SYSCALL_ENTRY( 0x15d4, NtUserTrackPopupMenuEx, 24 ) \ - SYSCALL_ENTRY( 0x15d5, NtUserTransformPoint, 0 ) \ - SYSCALL_ENTRY( 0x15d6, NtUserTransformRect, 0 ) \ - SYSCALL_ENTRY( 0x15d7, NtUserTranslateAccelerator, 12 ) \ - SYSCALL_ENTRY( 0x15d8, NtUserTranslateMessage, 8 ) \ - SYSCALL_ENTRY( 0x15d9, NtUserUndelegateInput, 0 ) \ - SYSCALL_ENTRY( 0x15da, NtUserUnhookWinEvent, 4 ) \ - SYSCALL_ENTRY( 0x15db, NtUserUnhookWindowsHook, 8 ) \ - SYSCALL_ENTRY( 0x15dc, NtUserUnhookWindowsHookEx, 4 ) \ - SYSCALL_ENTRY( 0x15dd, NtUserUnloadKeyboardLayout, 0 ) \ - SYSCALL_ENTRY( 0x15de, NtUserUnlockWindowStation, 0 ) \ - SYSCALL_ENTRY( 0x15df, NtUserUnregisterClass, 12 ) \ - SYSCALL_ENTRY( 0x15e0, NtUserUnregisterHotKey, 8 ) \ - SYSCALL_ENTRY( 0x15e1, NtUserUnregisterSessionPort, 0 ) \ - SYSCALL_ENTRY( 0x15e2, NtUserUnregisterUserApiHook, 0 ) \ - SYSCALL_ENTRY( 0x15e3, NtUserUpdateClientRect, 0 ) \ - SYSCALL_ENTRY( 0x15e4, NtUserUpdateDefaultDesktopThumbnail, 0 ) \ - SYSCALL_ENTRY( 0x15e5, NtUserUpdateInputContext, 12 ) \ - SYSCALL_ENTRY( 0x15e6, NtUserUpdateInstance, 0 ) \ - SYSCALL_ENTRY( 0x15e7, NtUserUpdateLayeredWindow, 40 ) \ - SYSCALL_ENTRY( 0x15e8, NtUserUpdatePerUserImmEnabling, 0 ) \ - SYSCALL_ENTRY( 0x15e9, NtUserUpdatePerUserSystemParameters, 0 ) \ - SYSCALL_ENTRY( 0x15ea, NtUserUpdateWindow, 0 ) \ - SYSCALL_ENTRY( 0x15eb, NtUserUpdateWindowInputSinkHints, 0 ) \ - SYSCALL_ENTRY( 0x15ec, NtUserUpdateWindowTrackingInfo, 0 ) \ - SYSCALL_ENTRY( 0x15ed, NtUserUpdateWindows, 0 ) \ - SYSCALL_ENTRY( 0x15ee, NtUserUserHandleGrantAccess, 0 ) \ - SYSCALL_ENTRY( 0x15ef, NtUserUserPowerCalloutWorker, 0 ) \ - SYSCALL_ENTRY( 0x15f0, NtUserValidateHandleSecure, 0 ) \ - SYSCALL_ENTRY( 0x15f1, NtUserValidateRect, 8 ) \ - SYSCALL_ENTRY( 0x15f2, NtUserValidateRgn, 8 ) \ - SYSCALL_ENTRY( 0x15f3, NtUserValidateTimerCallback, 0 ) \ - SYSCALL_ENTRY( 0x15f4, NtUserVkKeyScanEx, 8 ) \ - SYSCALL_ENTRY( 0x15f5, NtUserWOWCleanup, 0 ) \ - SYSCALL_ENTRY( 0x15f6, NtUserWOWModuleUnload, 0 ) \ - SYSCALL_ENTRY( 0x15f7, NtUserWaitAvailableMessageEx, 0 ) \ - SYSCALL_ENTRY( 0x15f8, NtUserWaitForInputIdle, 12 ) \ - SYSCALL_ENTRY( 0x15f9, NtUserWaitForMsgAndEvent, 0 ) \ - SYSCALL_ENTRY( 0x15fa, NtUserWaitForRedirectionStartComplete, 0 ) \ - SYSCALL_ENTRY( 0x15fb, NtUserWaitMessage, 0 ) \ - SYSCALL_ENTRY( 0x15fc, NtUserWakeRITForShutdown, 0 ) \ - SYSCALL_ENTRY( 0x15fd, NtUserWindowFromDC, 4 ) \ - SYSCALL_ENTRY( 0x15fe, NtUserWindowFromPhysicalPoint, 0 ) \ - SYSCALL_ENTRY( 0x15ff, NtUserWindowFromPoint, 8 ) \ - SYSCALL_ENTRY( 0x1600, NtUserYieldTask, 0 ) \ - SYSCALL_ENTRY( 0x1601, NtUserZapActiveAndFocus, 0 ) \ - SYSCALL_ENTRY( 0x1602, NtValidateCompositionSurfaceHandle, 0 ) \ - SYSCALL_ENTRY( 0x1603, NtVisualCaptureBits, 0 ) + SYSCALL_ENTRY( 0x1353, NtUserCloseGestureInfoHandle, 4 ) \ + SYSCALL_ENTRY( 0x1354, NtUserCloseTouchInputHandle, 4 ) \ + SYSCALL_ENTRY( 0x1355, NtUserCloseWindowStation, 4 ) \ + SYSCALL_ENTRY( 0x1356, NtUserCompositionInputSinkLuidFromPoint, 0 ) \ + SYSCALL_ENTRY( 0x1357, NtUserCompositionInputSinkViewInstanceIdFromPoint, 0 ) \ + SYSCALL_ENTRY( 0x1358, NtUserConfigureActivationObject, 0 ) \ + SYSCALL_ENTRY( 0x1359, NtUserConfirmResizeCommit, 0 ) \ + SYSCALL_ENTRY( 0x135a, NtUserConsoleControl, 0 ) \ + SYSCALL_ENTRY( 0x135b, NtUserConvertMemHandle, 0 ) \ + SYSCALL_ENTRY( 0x135c, NtUserCopyAcceleratorTable, 12 ) \ + SYSCALL_ENTRY( 0x135d, NtUserCountClipboardFormats, 0 ) \ + SYSCALL_ENTRY( 0x135e, NtUserCreateAcceleratorTable, 8 ) \ + SYSCALL_ENTRY( 0x135f, NtUserCreateActivationGroup, 0 ) \ + SYSCALL_ENTRY( 0x1360, NtUserCreateActivationObject, 0 ) \ + SYSCALL_ENTRY( 0x1361, NtUserCreateBaseWindow, 0 ) \ + SYSCALL_ENTRY( 0x1362, NtUserCreateCaret, 16 ) \ + SYSCALL_ENTRY( 0x1363, NtUserCreateDCompositionHwndTarget, 0 ) \ + SYSCALL_ENTRY( 0x1364, NtUserCreateDesktopEx, 24 ) \ + SYSCALL_ENTRY( 0x1365, NtUserCreateEmptyCursorObject, 0 ) \ + SYSCALL_ENTRY( 0x1366, NtUserCreateInputContext, 4 ) \ + SYSCALL_ENTRY( 0x1367, NtUserCreateLocalMemHandle, 0 ) \ + SYSCALL_ENTRY( 0x1368, NtUserCreateMenu, 0 ) \ + SYSCALL_ENTRY( 0x1369, NtUserCreatePalmRejectionDelayZone, 0 ) \ + SYSCALL_ENTRY( 0x136a, NtUserCreatePopupMenu, 0 ) \ + SYSCALL_ENTRY( 0x136b, NtUserCreateSyntheticPointerDevice2, 0 ) \ + SYSCALL_ENTRY( 0x136c, NtUserCreateSystemThreads, 0 ) \ + SYSCALL_ENTRY( 0x136d, NtUserCreateWindowEx, 68 ) \ + SYSCALL_ENTRY( 0x136e, NtUserCreateWindowGroup, 0 ) \ + SYSCALL_ENTRY( 0x136f, NtUserCreateWindowStation, 28 ) \ + SYSCALL_ENTRY( 0x1370, NtUserCsDdeUninitialize, 0 ) \ + SYSCALL_ENTRY( 0x1371, NtUserCtxDisplayIOCtl, 0 ) \ + SYSCALL_ENTRY( 0x1372, NtUserDWP_GetEnabledPopupOffset, 0 ) \ + SYSCALL_ENTRY( 0x1373, NtUserDdeInitialize, 0 ) \ + SYSCALL_ENTRY( 0x1374, NtUserDefSetText, 0 ) \ + SYSCALL_ENTRY( 0x1375, NtUserDeferWindowDpiChanges, 0 ) \ + SYSCALL_ENTRY( 0x1376, NtUserDeferWindowPosAndBand, 40 ) \ + SYSCALL_ENTRY( 0x1377, NtUserDeferredDesktopRotation, 0 ) \ + SYSCALL_ENTRY( 0x1378, NtUserDelegateCapturePointers, 0 ) \ + SYSCALL_ENTRY( 0x1379, NtUserDelegateInput, 0 ) \ + SYSCALL_ENTRY( 0x137a, NtUserDeleteMenu, 12 ) \ + SYSCALL_ENTRY( 0x137b, NtUserDeleteWindowGroup, 0 ) \ + SYSCALL_ENTRY( 0x137c, NtUserDeregisterShellHookWindow, 0 ) \ + SYSCALL_ENTRY( 0x137d, NtUserDestroyAcceleratorTable, 4 ) \ + SYSCALL_ENTRY( 0x137e, NtUserDestroyActivationGroup, 0 ) \ + SYSCALL_ENTRY( 0x137f, NtUserDestroyActivationObject, 0 ) \ + SYSCALL_ENTRY( 0x1380, NtUserDestroyCaret, 0 ) \ + SYSCALL_ENTRY( 0x1381, NtUserDestroyCursor, 8 ) \ + SYSCALL_ENTRY( 0x1382, NtUserDestroyDCompositionHwndTarget, 0 ) \ + SYSCALL_ENTRY( 0x1383, NtUserDestroyInputContext, 4 ) \ + SYSCALL_ENTRY( 0x1384, NtUserDestroyMenu, 4 ) \ + SYSCALL_ENTRY( 0x1385, NtUserDestroyPalmRejectionDelayZone, 0 ) \ + SYSCALL_ENTRY( 0x1386, NtUserDestroyWindow, 4 ) \ + SYSCALL_ENTRY( 0x1387, NtUserDirectedYield, 0 ) \ + SYSCALL_ENTRY( 0x1388, NtUserDisableImmersiveOwner, 0 ) \ + SYSCALL_ENTRY( 0x1389, NtUserDisableProcessWindowFiltering, 0 ) \ + SYSCALL_ENTRY( 0x138a, NtUserDisableProcessWindowsGhosting, 0 ) \ + SYSCALL_ENTRY( 0x138b, NtUserDisableThreadIme, 4 ) \ + SYSCALL_ENTRY( 0x138c, NtUserDiscardPointerFrameMessages, 0 ) \ + SYSCALL_ENTRY( 0x138d, NtUserDispatchMessage, 4 ) \ + SYSCALL_ENTRY( 0x138e, NtUserDisplayConfigGetDeviceInfo, 4 ) \ + SYSCALL_ENTRY( 0x138f, NtUserDisplayConfigSetDeviceInfo, 0 ) \ + SYSCALL_ENTRY( 0x1390, NtUserDoInitMessagePumpHook, 0 ) \ + SYSCALL_ENTRY( 0x1391, NtUserDoSoundConnect, 0 ) \ + SYSCALL_ENTRY( 0x1392, NtUserDoSoundDisconnect, 0 ) \ + SYSCALL_ENTRY( 0x1393, NtUserDoUninitMessagePumpHook, 0 ) \ + SYSCALL_ENTRY( 0x1394, NtUserDownlevelTouchpad, 0 ) \ + SYSCALL_ENTRY( 0x1395, NtUserDragDetect, 12 ) \ + SYSCALL_ENTRY( 0x1396, NtUserDragObject, 20 ) \ + SYSCALL_ENTRY( 0x1397, NtUserDrainThreadCoreMessagingCompletions, 0 ) \ + SYSCALL_ENTRY( 0x1398, NtUserDrainThreadCoreMessagingCompletions2, 0 ) \ + SYSCALL_ENTRY( 0x1399, NtUserDrawAnimatedRects, 0 ) \ + SYSCALL_ENTRY( 0x139a, NtUserDrawCaption, 0 ) \ + SYSCALL_ENTRY( 0x139b, NtUserDrawCaptionTemp, 28 ) \ + SYSCALL_ENTRY( 0x139c, NtUserDrawIconEx, 36 ) \ + SYSCALL_ENTRY( 0x139d, NtUserDrawMenuBar, 4 ) \ + SYSCALL_ENTRY( 0x139e, NtUserDrawMenuBarTemp, 20 ) \ + SYSCALL_ENTRY( 0x139f, NtUserDwmGetRemoteSessionOcclusionEvent, 0 ) \ + SYSCALL_ENTRY( 0x13a0, NtUserDwmGetRemoteSessionOcclusionState, 0 ) \ + SYSCALL_ENTRY( 0x13a1, NtUserDwmKernelShutdown, 0 ) \ + SYSCALL_ENTRY( 0x13a2, NtUserDwmKernelStartup, 0 ) \ + SYSCALL_ENTRY( 0x13a3, NtUserDwmLockScreenUpdates, 0 ) \ + SYSCALL_ENTRY( 0x13a4, NtUserDwmValidateWindow, 0 ) \ + SYSCALL_ENTRY( 0x13a5, NtUserDwmWindowNotificationsEnabled, 0 ) \ + SYSCALL_ENTRY( 0x13a6, NtUserEmptyClipboard, 0 ) \ + SYSCALL_ENTRY( 0x13a7, NtUserEnableChildWindowDpiMessage, 0 ) \ + SYSCALL_ENTRY( 0x13a8, NtUserEnableIAMAccess, 0 ) \ + SYSCALL_ENTRY( 0x13a9, NtUserEnableMenuItem, 12 ) \ + SYSCALL_ENTRY( 0x13aa, NtUserEnableModernAppWindowKeyboardIntercept, 0 ) \ + SYSCALL_ENTRY( 0x13ab, NtUserEnableMouseInPointer, 4 ) \ + SYSCALL_ENTRY( 0x13ac, NtUserEnableMouseInPointerForThread, 0 ) \ + SYSCALL_ENTRY( 0x13ad, NtUserEnableMouseInPointerForWindow, 0 ) \ + SYSCALL_ENTRY( 0x13ae, NtUserEnableMouseInputForCursorSuppression, 0 ) \ + SYSCALL_ENTRY( 0x13af, NtUserEnableNonClientDpiScaling, 0 ) \ + SYSCALL_ENTRY( 0x13b0, NtUserEnablePerMonitorMenuScaling, 0 ) \ + SYSCALL_ENTRY( 0x13b1, NtUserEnableResizeLayoutSynchronization, 0 ) \ + SYSCALL_ENTRY( 0x13b2, NtUserEnableScrollBar, 12 ) \ + SYSCALL_ENTRY( 0x13b3, NtUserEnableSessionForMMCSS, 0 ) \ + SYSCALL_ENTRY( 0x13b4, NtUserEnableShellWindowManagementBehavior, 0 ) \ + SYSCALL_ENTRY( 0x13b5, NtUserEnableSoftwareCursorForScreenCapture, 0 ) \ + SYSCALL_ENTRY( 0x13b6, NtUserEnableTouchPad, 0 ) \ + SYSCALL_ENTRY( 0x13b7, NtUserEnableWindow, 8 ) \ + SYSCALL_ENTRY( 0x13b8, NtUserEnableWindowGDIScaledDpiMessage, 0 ) \ + SYSCALL_ENTRY( 0x13b9, NtUserEnableWindowGroupPolicy, 0 ) \ + SYSCALL_ENTRY( 0x13ba, NtUserEnableWindowResizeOptimization, 0 ) \ + SYSCALL_ENTRY( 0x13bb, NtUserEnableWindowShellWindowManagementBehavior, 0 ) \ + SYSCALL_ENTRY( 0x13bc, NtUserEndDeferWindowPosEx, 8 ) \ + SYSCALL_ENTRY( 0x13bd, NtUserEndMenu, 0 ) \ + SYSCALL_ENTRY( 0x13be, NtUserEndPaint, 8 ) \ + SYSCALL_ENTRY( 0x13bf, NtUserEnsureDpiDepSysMetCacheForPlateau, 0 ) \ + SYSCALL_ENTRY( 0x13c0, NtUserEnumClipboardFormats, 4 ) \ + SYSCALL_ENTRY( 0x13c1, NtUserEnumDisplayDevices, 16 ) \ + SYSCALL_ENTRY( 0x13c2, NtUserEnumDisplayMonitors, 16 ) \ + SYSCALL_ENTRY( 0x13c3, NtUserEnumDisplaySettings, 16 ) \ + SYSCALL_ENTRY( 0x13c4, NtUserEvent, 0 ) \ + SYSCALL_ENTRY( 0x13c5, NtUserExcludeUpdateRgn, 8 ) \ + SYSCALL_ENTRY( 0x13c6, NtUserFillWindow, 0 ) \ + SYSCALL_ENTRY( 0x13c7, NtUserFindExistingCursorIcon, 12 ) \ + SYSCALL_ENTRY( 0x13c8, NtUserFindWindowEx, 20 ) \ + SYSCALL_ENTRY( 0x13c9, NtUserFlashWindowEx, 4 ) \ + SYSCALL_ENTRY( 0x13ca, NtUserForceEnableNumpadTranslation, 0 ) \ + SYSCALL_ENTRY( 0x13cb, NtUserForceWindowToDpiForTest, 0 ) \ + SYSCALL_ENTRY( 0x13cc, NtUserFrostCrashedWindow, 0 ) \ + SYSCALL_ENTRY( 0x13cd, NtUserFunctionalizeDisplayConfig, 0 ) \ + SYSCALL_ENTRY( 0x13ce, NtUserGetActiveProcessesDpis, 0 ) \ + SYSCALL_ENTRY( 0x13cf, NtUserGetAltTabInfo, 0 ) \ + SYSCALL_ENTRY( 0x13d0, NtUserGetAncestor, 8 ) \ + SYSCALL_ENTRY( 0x13d1, NtUserGetAppImeLevel, 0 ) \ + SYSCALL_ENTRY( 0x13d2, NtUserGetAsyncKeyState, 4 ) \ + SYSCALL_ENTRY( 0x13d3, NtUserGetAtomName, 8 ) \ + SYSCALL_ENTRY( 0x13d4, NtUserGetAutoRotationState, 0 ) \ + SYSCALL_ENTRY( 0x13d5, NtUserGetCIMSSM, 0 ) \ + SYSCALL_ENTRY( 0x13d6, NtUserGetCPD, 0 ) \ + SYSCALL_ENTRY( 0x13d7, NtUserGetCaretBlinkTime, 0 ) \ + SYSCALL_ENTRY( 0x13d8, NtUserGetCaretPos, 4 ) \ + SYSCALL_ENTRY( 0x13d9, NtUserGetClassIcoCur, 0 ) \ + SYSCALL_ENTRY( 0x13da, NtUserGetClassInfoEx, 20 ) \ + SYSCALL_ENTRY( 0x13db, NtUserGetClassName, 12 ) \ + SYSCALL_ENTRY( 0x13dc, NtUserGetClipCursor, 4 ) \ + SYSCALL_ENTRY( 0x13dd, NtUserGetClipboardAccessToken, 0 ) \ + SYSCALL_ENTRY( 0x13de, NtUserGetClipboardData, 8 ) \ + SYSCALL_ENTRY( 0x13df, NtUserGetClipboardFormatName, 12 ) \ + SYSCALL_ENTRY( 0x13e0, NtUserGetClipboardMetadata, 0 ) \ + SYSCALL_ENTRY( 0x13e1, NtUserGetClipboardOwner, 0 ) \ + SYSCALL_ENTRY( 0x13e2, NtUserGetClipboardSequenceNumber, 0 ) \ + SYSCALL_ENTRY( 0x13e3, NtUserGetClipboardViewer, 0 ) \ + SYSCALL_ENTRY( 0x13e4, NtUserGetComboBoxInfo, 0 ) \ + SYSCALL_ENTRY( 0x13e5, NtUserGetControlBrush, 0 ) \ + SYSCALL_ENTRY( 0x13e6, NtUserGetControlColor, 0 ) \ + SYSCALL_ENTRY( 0x13e7, NtUserGetCurrentDpiInfoForWindow, 0 ) \ + SYSCALL_ENTRY( 0x13e8, NtUserGetCurrentInputMessageSource, 4 ) \ + SYSCALL_ENTRY( 0x13e9, NtUserGetCursor, 0 ) \ + SYSCALL_ENTRY( 0x13ea, NtUserGetCursorFrameInfo, 16 ) \ + SYSCALL_ENTRY( 0x13eb, NtUserGetCursorInfo, 4 ) \ + SYSCALL_ENTRY( 0x13ec, NtUserGetCursorPos, 4 ) \ + SYSCALL_ENTRY( 0x13ed, NtUserGetDC, 4 ) \ + SYSCALL_ENTRY( 0x13ee, NtUserGetDCEx, 12 ) \ + SYSCALL_ENTRY( 0x13ef, NtUserGetDCompositionHwndBitmap, 0 ) \ + SYSCALL_ENTRY( 0x13f0, NtUserGetDManipHookInitFunction, 0 ) \ + SYSCALL_ENTRY( 0x13f1, NtUserGetDesktopID, 0 ) \ + SYSCALL_ENTRY( 0x13f2, NtUserGetDesktopVisualTransform, 0 ) \ + SYSCALL_ENTRY( 0x13f3, NtUserGetDeviceChangeInfo, 0 ) \ + SYSCALL_ENTRY( 0x13f4, NtUserGetDisplayAutoRotationPreferences, 0 ) \ + SYSCALL_ENTRY( 0x13f5, NtUserGetDisplayAutoRotationPreferencesByProcessId, 0 ) \ + SYSCALL_ENTRY( 0x13f6, NtUserGetDisplayConfigBufferSizes, 12 ) \ + SYSCALL_ENTRY( 0x13f7, NtUserGetDoubleClickTime, 0 ) \ + SYSCALL_ENTRY( 0x13f8, NtUserGetDpiForCurrentProcess, 0 ) \ + SYSCALL_ENTRY( 0x13f9, NtUserGetDpiForMonitor, 16 ) \ + SYSCALL_ENTRY( 0x13fa, NtUserGetDwmCursorShape, 0 ) \ + SYSCALL_ENTRY( 0x13fb, NtUserGetExtendedPointerDeviceProperty, 0 ) \ + SYSCALL_ENTRY( 0x13fc, NtUserGetForegroundWindow, 0 ) \ + SYSCALL_ENTRY( 0x13fd, NtUserGetGUIThreadInfo, 8 ) \ + SYSCALL_ENTRY( 0x13fe, NtUserGetGestureConfig, 24 ) \ + SYSCALL_ENTRY( 0x13ff, NtUserGetGestureExtArgs, 12 ) \ + SYSCALL_ENTRY( 0x1400, NtUserGetGestureInfo, 8 ) \ + SYSCALL_ENTRY( 0x1401, NtUserGetGuiResources, 0 ) \ + SYSCALL_ENTRY( 0x1402, NtUserGetHDevName, 0 ) \ + SYSCALL_ENTRY( 0x1403, NtUserGetHimetricScaleFactorFromPixelLocation, 0 ) \ + SYSCALL_ENTRY( 0x1404, NtUserGetIMEShowStatus, 0 ) \ + SYSCALL_ENTRY( 0x1405, NtUserGetIconInfo, 24 ) \ + SYSCALL_ENTRY( 0x1406, NtUserGetIconSize, 16 ) \ + SYSCALL_ENTRY( 0x1407, NtUserGetImeHotKey, 0 ) \ + SYSCALL_ENTRY( 0x1408, NtUserGetImeInfoEx, 0 ) \ + SYSCALL_ENTRY( 0x1409, NtUserGetInputContainerId, 0 ) \ + SYSCALL_ENTRY( 0x140a, NtUserGetInputDesktop, 0 ) \ + SYSCALL_ENTRY( 0x140b, NtUserGetInputEvent, 0 ) \ + SYSCALL_ENTRY( 0x140c, NtUserGetInputLocaleInfo, 0 ) \ + SYSCALL_ENTRY( 0x140d, NtUserGetInteractiveControlDeviceInfo, 0 ) \ + SYSCALL_ENTRY( 0x140e, NtUserGetInteractiveControlInfo, 0 ) \ + SYSCALL_ENTRY( 0x140f, NtUserGetInteractiveCtrlSupportedWaveforms, 0 ) \ + SYSCALL_ENTRY( 0x1410, NtUserGetInternalWindowPos, 12 ) \ + SYSCALL_ENTRY( 0x1411, NtUserGetKeyNameText, 12 ) \ + SYSCALL_ENTRY( 0x1412, NtUserGetKeyState, 4 ) \ + SYSCALL_ENTRY( 0x1413, NtUserGetKeyboardLayout, 4 ) \ + SYSCALL_ENTRY( 0x1414, NtUserGetKeyboardLayoutList, 8 ) \ + SYSCALL_ENTRY( 0x1415, NtUserGetKeyboardLayoutName, 4 ) \ + SYSCALL_ENTRY( 0x1416, NtUserGetKeyboardState, 4 ) \ + SYSCALL_ENTRY( 0x1417, NtUserGetKeyboardType, 0 ) \ + SYSCALL_ENTRY( 0x1418, NtUserGetLayeredWindowAttributes, 16 ) \ + SYSCALL_ENTRY( 0x1419, NtUserGetListBoxInfo, 0 ) \ + SYSCALL_ENTRY( 0x141a, NtUserGetMenuBarInfo, 16 ) \ + SYSCALL_ENTRY( 0x141b, NtUserGetMenuIndex, 0 ) \ + SYSCALL_ENTRY( 0x141c, NtUserGetMenuItemRect, 16 ) \ + SYSCALL_ENTRY( 0x141d, NtUserGetMessage, 16 ) \ + SYSCALL_ENTRY( 0x141e, NtUserGetMessagePos, 0 ) \ + SYSCALL_ENTRY( 0x141f, NtUserGetMinuserIdForBaseWindow, 0 ) \ + SYSCALL_ENTRY( 0x1420, NtUserGetModernAppWindow, 0 ) \ + SYSCALL_ENTRY( 0x1421, NtUserGetMouseMovePointsEx, 20 ) \ + SYSCALL_ENTRY( 0x1422, NtUserGetObjectInformation, 20 ) \ + SYSCALL_ENTRY( 0x1423, NtUserGetOemBitmapSize, 0 ) \ + SYSCALL_ENTRY( 0x1424, NtUserGetOpenClipboardWindow, 0 ) \ + SYSCALL_ENTRY( 0x1425, NtUserGetOwnerTransformedMonitorRect, 0 ) \ + SYSCALL_ENTRY( 0x1426, NtUserGetPhysicalDeviceRect, 0 ) \ + SYSCALL_ENTRY( 0x1427, NtUserGetPointerCursorId, 0 ) \ + SYSCALL_ENTRY( 0x1428, NtUserGetPointerDevice, 0 ) \ + SYSCALL_ENTRY( 0x1429, NtUserGetPointerDeviceCursors, 0 ) \ + SYSCALL_ENTRY( 0x142a, NtUserGetPointerDeviceInputSpace, 0 ) \ + SYSCALL_ENTRY( 0x142b, NtUserGetPointerDeviceOrientation, 0 ) \ + SYSCALL_ENTRY( 0x142c, NtUserGetPointerDeviceProperties, 0 ) \ + SYSCALL_ENTRY( 0x142d, NtUserGetPointerDeviceRects, 12 ) \ + SYSCALL_ENTRY( 0x142e, NtUserGetPointerDevices, 0 ) \ + SYSCALL_ENTRY( 0x142f, NtUserGetPointerFrameTimes, 0 ) \ + SYSCALL_ENTRY( 0x1430, NtUserGetPointerInfoList, 32 ) \ + SYSCALL_ENTRY( 0x1431, NtUserGetPointerInputTransform, 0 ) \ + SYSCALL_ENTRY( 0x1432, NtUserGetPointerProprietaryId, 0 ) \ + SYSCALL_ENTRY( 0x1433, NtUserGetPointerType, 8 ) \ + SYSCALL_ENTRY( 0x1434, NtUserGetPrecisionTouchPadConfiguration, 0 ) \ + SYSCALL_ENTRY( 0x1435, NtUserGetPriorityClipboardFormat, 8 ) \ + SYSCALL_ENTRY( 0x1436, NtUserGetProcessDefaultLayout, 4 ) \ + SYSCALL_ENTRY( 0x1437, NtUserGetProcessDpiAwarenessContext, 4 ) \ + SYSCALL_ENTRY( 0x1438, NtUserGetProcessUIContextInformation, 0 ) \ + SYSCALL_ENTRY( 0x1439, NtUserGetProcessWindowStation, 0 ) \ + SYSCALL_ENTRY( 0x143a, NtUserGetProp, 8 ) \ + SYSCALL_ENTRY( 0x143b, NtUserGetProp2, 0 ) \ + SYSCALL_ENTRY( 0x143c, NtUserGetQueueIocp, 0 ) \ + SYSCALL_ENTRY( 0x143d, NtUserGetQueueStatus, 4 ) \ + SYSCALL_ENTRY( 0x143e, NtUserGetQueueStatusReadonly, 0 ) \ + SYSCALL_ENTRY( 0x143f, NtUserGetRawInputBuffer, 12 ) \ + SYSCALL_ENTRY( 0x1440, NtUserGetRawInputData, 20 ) \ + SYSCALL_ENTRY( 0x1441, NtUserGetRawInputDeviceInfo, 16 ) \ + SYSCALL_ENTRY( 0x1442, NtUserGetRawInputDeviceList, 12 ) \ + SYSCALL_ENTRY( 0x1443, NtUserGetRawPointerDeviceData, 0 ) \ + SYSCALL_ENTRY( 0x1444, NtUserGetRegisteredRawInputDevices, 12 ) \ + SYSCALL_ENTRY( 0x1445, NtUserGetRequiredCursorSizes, 0 ) \ + SYSCALL_ENTRY( 0x1446, NtUserGetResizeDCompositionSynchronizationObject, 0 ) \ + SYSCALL_ENTRY( 0x1447, NtUserGetScrollBarInfo, 12 ) \ + SYSCALL_ENTRY( 0x1448, NtUserGetSendMessageReceiver, 0 ) \ + SYSCALL_ENTRY( 0x1449, NtUserGetSharedWindowData, 0 ) \ + SYSCALL_ENTRY( 0x144a, NtUserGetSuppressedWindowActions, 0 ) \ + SYSCALL_ENTRY( 0x144b, NtUserGetSysMenuOffset, 0 ) \ + SYSCALL_ENTRY( 0x144c, NtUserGetSystemContentRects, 0 ) \ + SYSCALL_ENTRY( 0x144d, NtUserGetSystemDpiForProcess, 4 ) \ + SYSCALL_ENTRY( 0x144e, NtUserGetSystemMenu, 8 ) \ + SYSCALL_ENTRY( 0x144f, NtUserGetThreadDesktop, 4 ) \ + SYSCALL_ENTRY( 0x1450, NtUserGetThreadState, 4 ) \ + SYSCALL_ENTRY( 0x1451, NtUserGetTitleBarInfo, 8 ) \ + SYSCALL_ENTRY( 0x1452, NtUserGetTopLevelWindow, 0 ) \ + SYSCALL_ENTRY( 0x1453, NtUserGetTouchInputInfo, 16 ) \ + SYSCALL_ENTRY( 0x1454, NtUserGetTouchValidationStatus, 0 ) \ + SYSCALL_ENTRY( 0x1455, NtUserGetUniformSpaceMapping, 0 ) \ + SYSCALL_ENTRY( 0x1456, NtUserGetUnpredictedMessagePos, 0 ) \ + SYSCALL_ENTRY( 0x1457, NtUserGetUpdateRect, 12 ) \ + SYSCALL_ENTRY( 0x1458, NtUserGetUpdateRgn, 12 ) \ + SYSCALL_ENTRY( 0x1459, NtUserGetUpdatedClipboardFormats, 12 ) \ + SYSCALL_ENTRY( 0x145a, NtUserGetWOWClass, 0 ) \ + SYSCALL_ENTRY( 0x145b, NtUserGetWinStationInfo, 0 ) \ + SYSCALL_ENTRY( 0x145c, NtUserGetWindowBand, 0 ) \ + SYSCALL_ENTRY( 0x145d, NtUserGetWindowCompositionAttribute, 0 ) \ + SYSCALL_ENTRY( 0x145e, NtUserGetWindowCompositionInfo, 0 ) \ + SYSCALL_ENTRY( 0x145f, NtUserGetWindowContextHelpId, 4 ) \ + SYSCALL_ENTRY( 0x1460, NtUserGetWindowDC, 4 ) \ + SYSCALL_ENTRY( 0x1461, NtUserGetWindowDisplayAffinity, 8 ) \ + SYSCALL_ENTRY( 0x1462, NtUserGetWindowFeedbackSetting, 0 ) \ + SYSCALL_ENTRY( 0x1463, NtUserGetWindowGroupId, 0 ) \ + SYSCALL_ENTRY( 0x1464, NtUserGetWindowMinimizeRect, 0 ) \ + SYSCALL_ENTRY( 0x1465, NtUserGetWindowPlacement, 8 ) \ + SYSCALL_ENTRY( 0x1466, NtUserGetWindowProcessHandle, 0 ) \ + SYSCALL_ENTRY( 0x1467, NtUserGetWindowRgnEx, 12 ) \ + SYSCALL_ENTRY( 0x1468, NtUserGetWindowThreadProcessId, 0 ) \ + SYSCALL_ENTRY( 0x1469, NtUserGetWindowTrackInfoAsync, 0 ) \ + SYSCALL_ENTRY( 0x146a, NtUserGhostWindowFromHungWindow, 0 ) \ + SYSCALL_ENTRY( 0x146b, NtUserHandleDelegatedInput, 0 ) \ + SYSCALL_ENTRY( 0x146c, NtUserHandleSystemThreadCreationFailure, 0 ) \ + SYSCALL_ENTRY( 0x146d, NtUserHardErrorControl, 0 ) \ + SYSCALL_ENTRY( 0x146e, NtUserHideCaret, 4 ) \ + SYSCALL_ENTRY( 0x146f, NtUserHideCursorNoCapture, 0 ) \ + SYSCALL_ENTRY( 0x1470, NtUserHidePointerContactVisualization, 0 ) \ + SYSCALL_ENTRY( 0x1471, NtUserHiliteMenuItem, 16 ) \ + SYSCALL_ENTRY( 0x1472, NtUserHungWindowFromGhostWindow, 0 ) \ + SYSCALL_ENTRY( 0x1473, NtUserHwndQueryRedirectionInfo, 0 ) \ + SYSCALL_ENTRY( 0x1474, NtUserHwndSetRedirectionInfo, 0 ) \ + SYSCALL_ENTRY( 0x1475, NtUserImpersonateDdeClientWindow, 0 ) \ + SYSCALL_ENTRY( 0x1476, NtUserInheritWindowMonitor, 0 ) \ + SYSCALL_ENTRY( 0x1477, NtUserInitAnsiOem, 0 ) \ + SYSCALL_ENTRY( 0x1478, NtUserInitTask, 0 ) \ + SYSCALL_ENTRY( 0x1479, NtUserInitThreadCoreMessagingIocp, 0 ) \ + SYSCALL_ENTRY( 0x147a, NtUserInitThreadCoreMessagingIocp2, 0 ) \ + SYSCALL_ENTRY( 0x147b, NtUserInitialize, 0 ) \ + SYSCALL_ENTRY( 0x147c, NtUserInitializeClientPfnArrays, 16 ) \ + SYSCALL_ENTRY( 0x147d, NtUserInitializeGenericHidInjection, 0 ) \ + SYSCALL_ENTRY( 0x147e, NtUserInitializeInputDeviceInjection, 0 ) \ + SYSCALL_ENTRY( 0x147f, NtUserInitializePointerDeviceInjection, 0 ) \ + SYSCALL_ENTRY( 0x1480, NtUserInitializePointerDeviceInjectionEx, 0 ) \ + SYSCALL_ENTRY( 0x1481, NtUserInitializeTouchInjection, 8 ) \ + SYSCALL_ENTRY( 0x1482, NtUserInjectDeviceInput, 0 ) \ + SYSCALL_ENTRY( 0x1483, NtUserInjectGenericHidInput, 0 ) \ + SYSCALL_ENTRY( 0x1484, NtUserInjectGesture, 0 ) \ + SYSCALL_ENTRY( 0x1485, NtUserInjectKeyboardInput, 0 ) \ + SYSCALL_ENTRY( 0x1486, NtUserInjectMouseInput, 0 ) \ + SYSCALL_ENTRY( 0x1487, NtUserInjectPointerInput, 0 ) \ + SYSCALL_ENTRY( 0x1488, NtUserInjectTouchInput, 0 ) \ + SYSCALL_ENTRY( 0x1489, NtUserInteractiveControlQueryUsage, 0 ) \ + SYSCALL_ENTRY( 0x148a, NtUserInternalGetWindowIcon, 8 ) \ + SYSCALL_ENTRY( 0x148b, NtUserInternalGetWindowText, 12 ) \ + SYSCALL_ENTRY( 0x148c, NtUserInternalStartMoveSize, 0 ) \ + SYSCALL_ENTRY( 0x148d, NtUserInternalToUnicode, 0 ) \ + SYSCALL_ENTRY( 0x148e, NtUserInvalidateRect, 12 ) \ + SYSCALL_ENTRY( 0x148f, NtUserInvalidateRgn, 12 ) \ + SYSCALL_ENTRY( 0x1490, NtUserIsChildWindowDpiMessageEnabled, 4 ) \ + SYSCALL_ENTRY( 0x1491, NtUserIsClipboardFormatAvailable, 4 ) \ + SYSCALL_ENTRY( 0x1492, NtUserIsMouseInPointerEnabled, 0 ) \ + SYSCALL_ENTRY( 0x1493, NtUserIsMouseInputEnabled, 0 ) \ + SYSCALL_ENTRY( 0x1494, NtUserIsNonClientDpiScalingEnabled, 0 ) \ + SYSCALL_ENTRY( 0x1495, NtUserIsQueueAttached, 0 ) \ + SYSCALL_ENTRY( 0x1496, NtUserIsResizeLayoutSynchronizationEnabled, 0 ) \ + SYSCALL_ENTRY( 0x1497, NtUserIsTopLevelWindow, 0 ) \ + SYSCALL_ENTRY( 0x1498, NtUserIsTouchWindow, 8 ) \ + SYSCALL_ENTRY( 0x1499, NtUserIsWindowBroadcastingDpiToChildren, 0 ) \ + SYSCALL_ENTRY( 0x149a, NtUserIsWindowDisplayChangeSuppressed, 0 ) \ + SYSCALL_ENTRY( 0x149b, NtUserIsWindowGDIScaledDpiMessageEnabled, 0 ) \ + SYSCALL_ENTRY( 0x149c, NtUserKillSystemTimer, 8 ) \ + SYSCALL_ENTRY( 0x149d, NtUserKillTimer, 8 ) \ + SYSCALL_ENTRY( 0x149e, NtUserLW_LoadFonts, 0 ) \ + SYSCALL_ENTRY( 0x149f, NtUserLayoutCompleted, 0 ) \ + SYSCALL_ENTRY( 0x14a0, NtUserLinkDpiCursor, 0 ) \ + SYSCALL_ENTRY( 0x14a1, NtUserLoadCursorsAndIcons, 0 ) \ + SYSCALL_ENTRY( 0x14a2, NtUserLoadKeyboardLayoutEx, 0 ) \ + SYSCALL_ENTRY( 0x14a3, NtUserLoadUserApiHook, 0 ) \ + SYSCALL_ENTRY( 0x14a4, NtUserLockCursor, 0 ) \ + SYSCALL_ENTRY( 0x14a5, NtUserLockSetForegroundWindow, 0 ) \ + SYSCALL_ENTRY( 0x14a6, NtUserLockWindowStation, 0 ) \ + SYSCALL_ENTRY( 0x14a7, NtUserLockWindowUpdate, 4 ) \ + SYSCALL_ENTRY( 0x14a8, NtUserLockWorkStation, 0 ) \ + SYSCALL_ENTRY( 0x14a9, NtUserLogicalToPerMonitorDPIPhysicalPoint, 8 ) \ + SYSCALL_ENTRY( 0x14aa, NtUserLogicalToPhysicalDpiPointForWindow, 0 ) \ + SYSCALL_ENTRY( 0x14ab, NtUserLogicalToPhysicalPoint, 0 ) \ + SYSCALL_ENTRY( 0x14ac, NtUserMNDragLeave, 0 ) \ + SYSCALL_ENTRY( 0x14ad, NtUserMNDragOver, 0 ) \ + SYSCALL_ENTRY( 0x14ae, NtUserMagControl, 0 ) \ + SYSCALL_ENTRY( 0x14af, NtUserMagGetContextInformation, 0 ) \ + SYSCALL_ENTRY( 0x14b0, NtUserMagSetContextInformation, 0 ) \ + SYSCALL_ENTRY( 0x14b1, NtUserMapDesktopObject, 0 ) \ + SYSCALL_ENTRY( 0x14b2, NtUserMapPointsByVisualIdentifier, 0 ) \ + SYSCALL_ENTRY( 0x14b3, NtUserMapVirtualKeyEx, 12 ) \ + SYSCALL_ENTRY( 0x14b4, NtUserMarkWindowForRawMouse, 0 ) \ + SYSCALL_ENTRY( 0x14b5, NtUserMenuItemFromPoint, 16 ) \ + SYSCALL_ENTRY( 0x14b6, NtUserMessageBeep, 4 ) \ + SYSCALL_ENTRY( 0x14b7, NtUserMessageCall, 28 ) \ + SYSCALL_ENTRY( 0x14b8, NtUserMinInitialize, 0 ) \ + SYSCALL_ENTRY( 0x14b9, NtUserMinMaximize, 0 ) \ + SYSCALL_ENTRY( 0x14ba, NtUserModifyUserStartupInfoFlags, 8 ) \ + SYSCALL_ENTRY( 0x14bb, NtUserModifyWindowTouchCapability, 0 ) \ + SYSCALL_ENTRY( 0x14bc, NtUserMoveWindow, 24 ) \ + SYSCALL_ENTRY( 0x14bd, NtUserMsgWaitForMultipleObjectsEx, 20 ) \ + SYSCALL_ENTRY( 0x14be, NtUserNavigateFocus, 0 ) \ + SYSCALL_ENTRY( 0x14bf, NtUserNlsKbdSendIMENotification, 0 ) \ + SYSCALL_ENTRY( 0x14c0, NtUserNotifyIMEStatus, 8 ) \ + SYSCALL_ENTRY( 0x14c1, NtUserNotifyOverlayWindow, 0 ) \ + SYSCALL_ENTRY( 0x14c2, NtUserNotifyProcessCreate, 0 ) \ + SYSCALL_ENTRY( 0x14c3, NtUserNotifyWinEvent, 16 ) \ + SYSCALL_ENTRY( 0x14c4, NtUserOpenClipboard, 8 ) \ + SYSCALL_ENTRY( 0x14c5, NtUserOpenDesktop, 12 ) \ + SYSCALL_ENTRY( 0x14c6, NtUserOpenInputDesktop, 12 ) \ + SYSCALL_ENTRY( 0x14c7, NtUserOpenThreadDesktop, 0 ) \ + SYSCALL_ENTRY( 0x14c8, NtUserOpenWindowStation, 8 ) \ + SYSCALL_ENTRY( 0x14c9, NtUserPaintDesktop, 0 ) \ + SYSCALL_ENTRY( 0x14ca, NtUserPaintMenuBar, 0 ) \ + SYSCALL_ENTRY( 0x14cb, NtUserPaintMonitor, 0 ) \ + SYSCALL_ENTRY( 0x14cc, NtUserPeekMessage, 20 ) \ + SYSCALL_ENTRY( 0x14cd, NtUserPerMonitorDPIPhysicalToLogicalPoint, 8 ) \ + SYSCALL_ENTRY( 0x14ce, NtUserPhysicalToLogicalDpiPointForWindow, 0 ) \ + SYSCALL_ENTRY( 0x14cf, NtUserPhysicalToLogicalPoint, 0 ) \ + SYSCALL_ENTRY( 0x14d0, NtUserPlayEventSound, 0 ) \ + SYSCALL_ENTRY( 0x14d1, NtUserPostKeyboardInputMessage, 0 ) \ + SYSCALL_ENTRY( 0x14d2, NtUserPostMessage, 16 ) \ + SYSCALL_ENTRY( 0x14d3, NtUserPostQuitMessage, 4 ) \ + SYSCALL_ENTRY( 0x14d4, NtUserPostThreadMessage, 16 ) \ + SYSCALL_ENTRY( 0x14d5, NtUserPrepareForLogoff, 0 ) \ + SYSCALL_ENTRY( 0x14d6, NtUserPrintWindow, 12 ) \ + SYSCALL_ENTRY( 0x14d7, NtUserProcessConnect, 0 ) \ + SYSCALL_ENTRY( 0x14d8, NtUserProcessInkFeedbackCommand, 0 ) \ + SYSCALL_ENTRY( 0x14d9, NtUserPromoteMouseInPointer, 0 ) \ + SYSCALL_ENTRY( 0x14da, NtUserPromotePointer, 0 ) \ + SYSCALL_ENTRY( 0x14db, NtUserQueryActivationObject, 0 ) \ + SYSCALL_ENTRY( 0x14dc, NtUserQueryBSDRWindow, 0 ) \ + SYSCALL_ENTRY( 0x14dd, NtUserQueryDisplayConfig, 24 ) \ + SYSCALL_ENTRY( 0x14de, NtUserQueryInformationThread, 0 ) \ + SYSCALL_ENTRY( 0x14df, NtUserQueryInputContext, 8 ) \ + SYSCALL_ENTRY( 0x14e0, NtUserQuerySendMessage, 0 ) \ + SYSCALL_ENTRY( 0x14e1, NtUserQueryWindow, 8 ) \ + SYSCALL_ENTRY( 0x14e2, NtUserRaiseLowerShellWindow, 0 ) \ + SYSCALL_ENTRY( 0x14e3, NtUserRealChildWindowFromPoint, 12 ) \ + SYSCALL_ENTRY( 0x14e4, NtUserRealInternalGetMessage, 0 ) \ + SYSCALL_ENTRY( 0x14e5, NtUserRealWaitMessageEx, 0 ) \ + SYSCALL_ENTRY( 0x14e6, NtUserRealizePalette, 4 ) \ + SYSCALL_ENTRY( 0x14e7, NtUserReassociateQueueEventCompletionPacket, 0 ) \ + SYSCALL_ENTRY( 0x14e8, NtUserRedrawFrame, 0 ) \ + SYSCALL_ENTRY( 0x14e9, NtUserRedrawFrameAndHook, 0 ) \ + SYSCALL_ENTRY( 0x14ea, NtUserRedrawTitle, 0 ) \ + SYSCALL_ENTRY( 0x14eb, NtUserRedrawWindow, 16 ) \ + SYSCALL_ENTRY( 0x14ec, NtUserRegisterBSDRWindow, 0 ) \ + SYSCALL_ENTRY( 0x14ed, NtUserRegisterClassExWOW, 28 ) \ + SYSCALL_ENTRY( 0x14ee, NtUserRegisterCloakedNotification, 0 ) \ + SYSCALL_ENTRY( 0x14ef, NtUserRegisterDManipHook, 0 ) \ + SYSCALL_ENTRY( 0x14f0, NtUserRegisterEdgy, 0 ) \ + SYSCALL_ENTRY( 0x14f1, NtUserRegisterErrorReportingDialog, 0 ) \ + SYSCALL_ENTRY( 0x14f2, NtUserRegisterForCustomDockTargets, 0 ) \ + SYSCALL_ENTRY( 0x14f3, NtUserRegisterForTooltipDismissNotification, 0 ) \ + SYSCALL_ENTRY( 0x14f4, NtUserRegisterGhostWindow, 0 ) \ + SYSCALL_ENTRY( 0x14f5, NtUserRegisterHotKey, 16 ) \ + SYSCALL_ENTRY( 0x14f6, NtUserRegisterLPK, 0 ) \ + SYSCALL_ENTRY( 0x14f7, NtUserRegisterLogonProcess, 0 ) \ + SYSCALL_ENTRY( 0x14f8, NtUserRegisterManipulationThread, 0 ) \ + SYSCALL_ENTRY( 0x14f9, NtUserRegisterPointerDeviceNotifications, 0 ) \ + SYSCALL_ENTRY( 0x14fa, NtUserRegisterPointerInputTarget, 0 ) \ + SYSCALL_ENTRY( 0x14fb, NtUserRegisterPrecisionTouchpadWindow, 0 ) \ + SYSCALL_ENTRY( 0x14fc, NtUserRegisterRawInputDevices, 12 ) \ + SYSCALL_ENTRY( 0x14fd, NtUserRegisterServicesProcess, 0 ) \ + SYSCALL_ENTRY( 0x14fe, NtUserRegisterSessionPort, 0 ) \ + SYSCALL_ENTRY( 0x14ff, NtUserRegisterShellHookWindow, 0 ) \ + SYSCALL_ENTRY( 0x1500, NtUserRegisterShellPTPListener, 0 ) \ + SYSCALL_ENTRY( 0x1501, NtUserRegisterSiblingFrostWindow, 0 ) \ + SYSCALL_ENTRY( 0x1502, NtUserRegisterSystemThread, 0 ) \ + SYSCALL_ENTRY( 0x1503, NtUserRegisterTasklist, 0 ) \ + SYSCALL_ENTRY( 0x1504, NtUserRegisterTouchHitTestingWindow, 0 ) \ + SYSCALL_ENTRY( 0x1505, NtUserRegisterTouchPadCapable, 4 ) \ + SYSCALL_ENTRY( 0x1506, NtUserRegisterTouchWindow, 8 ) \ + SYSCALL_ENTRY( 0x1507, NtUserRegisterUserApiHook, 0 ) \ + SYSCALL_ENTRY( 0x1508, NtUserRegisterUserHungAppHandlers, 0 ) \ + SYSCALL_ENTRY( 0x1509, NtUserRegisterWindowArrangementCallout, 0 ) \ + SYSCALL_ENTRY( 0x150a, NtUserRegisterWindowMessage, 4 ) \ + SYSCALL_ENTRY( 0x150b, NtUserReleaseCapture, 0 ) \ + SYSCALL_ENTRY( 0x150c, NtUserReleaseDC, 8 ) \ + SYSCALL_ENTRY( 0x150d, NtUserReleaseDwmHitTestWaiters, 0 ) \ + SYSCALL_ENTRY( 0x150e, NtUserRemoteConnect, 0 ) \ + SYSCALL_ENTRY( 0x150f, NtUserRemoteConnectState, 0 ) \ + SYSCALL_ENTRY( 0x1510, NtUserRemoteConsoleShadowStop, 0 ) \ + SYSCALL_ENTRY( 0x1511, NtUserRemoteDisconnect, 0 ) \ + SYSCALL_ENTRY( 0x1512, NtUserRemoteNotify, 0 ) \ + SYSCALL_ENTRY( 0x1513, NtUserRemotePassthruDisable, 0 ) \ + SYSCALL_ENTRY( 0x1514, NtUserRemotePassthruEnable, 0 ) \ + SYSCALL_ENTRY( 0x1515, NtUserRemoteReconnect, 0 ) \ + SYSCALL_ENTRY( 0x1516, NtUserRemoteRedrawRectangle, 0 ) \ + SYSCALL_ENTRY( 0x1517, NtUserRemoteRedrawScreen, 0 ) \ + SYSCALL_ENTRY( 0x1518, NtUserRemoteShadowCleanup, 0 ) \ + SYSCALL_ENTRY( 0x1519, NtUserRemoteShadowSetup, 0 ) \ + SYSCALL_ENTRY( 0x151a, NtUserRemoteShadowStart, 0 ) \ + SYSCALL_ENTRY( 0x151b, NtUserRemoteShadowStop, 0 ) \ + SYSCALL_ENTRY( 0x151c, NtUserRemoteStopScreenUpdates, 0 ) \ + SYSCALL_ENTRY( 0x151d, NtUserRemoteThinwireStats, 0 ) \ + SYSCALL_ENTRY( 0x151e, NtUserRemoveClipboardFormatListener, 4 ) \ + SYSCALL_ENTRY( 0x151f, NtUserRemoveInjectionDevice, 0 ) \ + SYSCALL_ENTRY( 0x1520, NtUserRemoveMenu, 12 ) \ + SYSCALL_ENTRY( 0x1521, NtUserRemoveProp, 8 ) \ + SYSCALL_ENTRY( 0x1522, NtUserRemoveQueueCompletion, 0 ) \ + SYSCALL_ENTRY( 0x1523, NtUserRemoveVisualIdentifier, 0 ) \ + SYSCALL_ENTRY( 0x1524, NtUserReplyMessage, 4 ) \ + SYSCALL_ENTRY( 0x1525, NtUserReportInertia, 0 ) \ + SYSCALL_ENTRY( 0x1526, NtUserRequestMoveSizeOperation, 0 ) \ + SYSCALL_ENTRY( 0x1527, NtUserResetDblClk, 0 ) \ + SYSCALL_ENTRY( 0x1528, NtUserResolveDesktopForWOW, 0 ) \ + SYSCALL_ENTRY( 0x1529, NtUserRestoreWindowDpiChanges, 0 ) \ + SYSCALL_ENTRY( 0x152a, NtUserSBGetParms, 0 ) \ + SYSCALL_ENTRY( 0x152b, NtUserScaleSystemMetricForDPIWithoutCache, 0 ) \ + SYSCALL_ENTRY( 0x152c, NtUserScheduleDispatchNotification, 4 ) \ + SYSCALL_ENTRY( 0x152d, NtUserScrollDC, 28 ) \ + SYSCALL_ENTRY( 0x152e, NtUserScrollWindowEx, 32 ) \ + SYSCALL_ENTRY( 0x152f, NtUserSelectPalette, 12 ) \ + SYSCALL_ENTRY( 0x1530, NtUserSendEventMessage, 0 ) \ + SYSCALL_ENTRY( 0x1531, NtUserSendInput, 12 ) \ + SYSCALL_ENTRY( 0x1532, NtUserSendInteractiveControlHapticsReport, 0 ) \ + SYSCALL_ENTRY( 0x1533, NtUserSetActivationFilter, 0 ) \ + SYSCALL_ENTRY( 0x1534, NtUserSetActiveProcessForMonitor, 0 ) \ + SYSCALL_ENTRY( 0x1535, NtUserSetActiveWindow, 4 ) \ + SYSCALL_ENTRY( 0x1536, NtUserSetAdditionalForegroundBoostProcesses, 12 ) \ + SYSCALL_ENTRY( 0x1537, NtUserSetAppImeLevel, 0 ) \ + SYSCALL_ENTRY( 0x1538, NtUserSetAutoRotation, 0 ) \ + SYSCALL_ENTRY( 0x1539, NtUserSetBridgeWindowChild, 0 ) \ + SYSCALL_ENTRY( 0x153a, NtUserSetBrokeredForeground, 0 ) \ + SYSCALL_ENTRY( 0x153b, NtUserSetCalibrationData, 0 ) \ + SYSCALL_ENTRY( 0x153c, NtUserSetCancelRotationDelayHintWindow, 0 ) \ + SYSCALL_ENTRY( 0x153d, NtUserSetCapture, 4 ) \ + SYSCALL_ENTRY( 0x153e, NtUserSetCaretBlinkTime, 4 ) \ + SYSCALL_ENTRY( 0x153f, NtUserSetCaretPos, 8 ) \ + SYSCALL_ENTRY( 0x1540, NtUserSetChildWindowNoActivate, 0 ) \ + SYSCALL_ENTRY( 0x1541, NtUserSetClassLong, 16 ) \ + SYSCALL_ENTRY( 0x1542, NtUserSetClassLongPtr, 16 ) \ + SYSCALL_ENTRY( 0x1543, NtUserSetClassWord, 12 ) \ + SYSCALL_ENTRY( 0x1544, NtUserSetClipboardData, 12 ) \ + SYSCALL_ENTRY( 0x1545, NtUserSetClipboardViewer, 4 ) \ + SYSCALL_ENTRY( 0x1546, NtUserSetCoreWindow, 0 ) \ + SYSCALL_ENTRY( 0x1547, NtUserSetCoreWindowPartner, 0 ) \ + SYSCALL_ENTRY( 0x1548, NtUserSetCoveredWindowStates, 0 ) \ + SYSCALL_ENTRY( 0x1549, NtUserSetCursor, 4 ) \ + SYSCALL_ENTRY( 0x154a, NtUserSetCursorContents, 0 ) \ + SYSCALL_ENTRY( 0x154b, NtUserSetCursorIconData, 16 ) \ + SYSCALL_ENTRY( 0x154c, NtUserSetCursorIconDataEx, 0 ) \ + SYSCALL_ENTRY( 0x154d, NtUserSetCursorPos, 8 ) \ + SYSCALL_ENTRY( 0x154e, NtUserSetDesktopColorTransform, 0 ) \ + SYSCALL_ENTRY( 0x154f, NtUserSetDesktopVisualInputSink, 0 ) \ + SYSCALL_ENTRY( 0x1550, NtUserSetDialogControlDpiChangeBehavior, 0 ) \ + SYSCALL_ENTRY( 0x1551, NtUserSetDialogPointer, 0 ) \ + SYSCALL_ENTRY( 0x1552, NtUserSetDialogSystemMenu, 0 ) \ + SYSCALL_ENTRY( 0x1553, NtUserSetDisplayAutoRotationPreferences, 0 ) \ + SYSCALL_ENTRY( 0x1554, NtUserSetDisplayConfig, 0 ) \ + SYSCALL_ENTRY( 0x1555, NtUserSetDisplayMapping, 0 ) \ + SYSCALL_ENTRY( 0x1556, NtUserSetDoubleClickTime, 0 ) \ + SYSCALL_ENTRY( 0x1557, NtUserSetDpiForWindow, 0 ) \ + SYSCALL_ENTRY( 0x1558, NtUserSetFallbackForeground, 0 ) \ + SYSCALL_ENTRY( 0x1559, NtUserSetFeatureReportResponse, 0 ) \ + SYSCALL_ENTRY( 0x155a, NtUserSetFocus, 4 ) \ + SYSCALL_ENTRY( 0x155b, NtUserSetForegroundRedirectionForActivationObject, 0 ) \ + SYSCALL_ENTRY( 0x155c, NtUserSetForegroundWindow, 4 ) \ + SYSCALL_ENTRY( 0x155d, NtUserSetForegroundWindowForApplication, 0 ) \ + SYSCALL_ENTRY( 0x155e, NtUserSetFullscreenMagnifierOffsetsDWMUpdated, 0 ) \ + SYSCALL_ENTRY( 0x155f, NtUserSetGestureConfig, 20 ) \ + SYSCALL_ENTRY( 0x1560, NtUserSetImeHotKey, 0 ) \ + SYSCALL_ENTRY( 0x1561, NtUserSetImeInfoEx, 0 ) \ + SYSCALL_ENTRY( 0x1562, NtUserSetImeOwnerWindow, 0 ) \ + SYSCALL_ENTRY( 0x1563, NtUserSetInformationThread, 0 ) \ + SYSCALL_ENTRY( 0x1564, NtUserSetInputServiceState, 0 ) \ + SYSCALL_ENTRY( 0x1565, NtUserSetInteractiveControlFocus, 0 ) \ + SYSCALL_ENTRY( 0x1566, NtUserSetInteractiveCtrlRotationAngle, 0 ) \ + SYSCALL_ENTRY( 0x1567, NtUserSetInternalWindowPos, 16 ) \ + SYSCALL_ENTRY( 0x1568, NtUserSetKeyboardState, 4 ) \ + SYSCALL_ENTRY( 0x1569, NtUserSetLayeredWindowAttributes, 16 ) \ + SYSCALL_ENTRY( 0x156a, NtUserSetMagnificationDesktopMagnifierOffsetsDWMUpdated, 0 ) \ + SYSCALL_ENTRY( 0x156b, NtUserSetManipulationInputTarget, 0 ) \ + SYSCALL_ENTRY( 0x156c, NtUserSetMenu, 8 ) \ + SYSCALL_ENTRY( 0x156d, NtUserSetMenuContextHelpId, 8 ) \ + SYSCALL_ENTRY( 0x156e, NtUserSetMenuDefaultItem, 12 ) \ + SYSCALL_ENTRY( 0x156f, NtUserSetMenuFlagRtoL, 0 ) \ + SYSCALL_ENTRY( 0x1570, NtUserSetMessageExtraInfo, 4 ) \ + SYSCALL_ENTRY( 0x1571, NtUserSetMirrorRendering, 0 ) \ + SYSCALL_ENTRY( 0x1572, NtUserSetModernAppWindow, 0 ) \ + SYSCALL_ENTRY( 0x1573, NtUserSetMonitorWorkArea, 0 ) \ + SYSCALL_ENTRY( 0x1574, NtUserSetMouseInputRateLimitingTimer, 0 ) \ + SYSCALL_ENTRY( 0x1575, NtUserSetMsgBox, 0 ) \ + SYSCALL_ENTRY( 0x1576, NtUserSetObjectInformation, 16 ) \ + SYSCALL_ENTRY( 0x1577, NtUserSetParent, 8 ) \ + SYSCALL_ENTRY( 0x1578, NtUserSetPrecisionTouchPadConfiguration, 0 ) \ + SYSCALL_ENTRY( 0x1579, NtUserSetProcessDefaultLayout, 4 ) \ + SYSCALL_ENTRY( 0x157a, NtUserSetProcessDpiAwarenessContext, 8 ) \ + SYSCALL_ENTRY( 0x157b, NtUserSetProcessInteractionFlags, 0 ) \ + SYSCALL_ENTRY( 0x157c, NtUserSetProcessLaunchForegroundPolicy, 0 ) \ + SYSCALL_ENTRY( 0x157d, NtUserSetProcessMousewheelRoutingMode, 0 ) \ + SYSCALL_ENTRY( 0x157e, NtUserSetProcessRestrictionExemption, 0 ) \ + SYSCALL_ENTRY( 0x157f, NtUserSetProcessUIAccessZorder, 0 ) \ + SYSCALL_ENTRY( 0x1580, NtUserSetProcessWindowStation, 4 ) \ + SYSCALL_ENTRY( 0x1581, NtUserSetProgmanWindow, 4 ) \ + SYSCALL_ENTRY( 0x1582, NtUserSetProp, 12 ) \ + SYSCALL_ENTRY( 0x1583, NtUserSetProp2, 0 ) \ + SYSCALL_ENTRY( 0x1584, NtUserSetScrollInfo, 16 ) \ + SYSCALL_ENTRY( 0x1585, NtUserSetSensorPresence, 0 ) \ + SYSCALL_ENTRY( 0x1586, NtUserSetSharedWindowData, 0 ) \ + SYSCALL_ENTRY( 0x1587, NtUserSetShellChangeNotifyHWND, 0 ) \ + SYSCALL_ENTRY( 0x1588, NtUserSetShellWindowEx, 8 ) \ + SYSCALL_ENTRY( 0x1589, NtUserSetSysColors, 12 ) \ + SYSCALL_ENTRY( 0x158a, NtUserSetSysMenu, 0 ) \ + SYSCALL_ENTRY( 0x158b, NtUserSetSystemContentRects, 0 ) \ + SYSCALL_ENTRY( 0x158c, NtUserSetSystemCursor, 0 ) \ + SYSCALL_ENTRY( 0x158d, NtUserSetSystemMenu, 8 ) \ + SYSCALL_ENTRY( 0x158e, NtUserSetSystemTimer, 12 ) \ + SYSCALL_ENTRY( 0x158f, NtUserSetTSFEventState, 0 ) \ + SYSCALL_ENTRY( 0x1590, NtUserSetTargetForResourceBrokering, 0 ) \ + SYSCALL_ENTRY( 0x1591, NtUserSetTaskmanWindow, 4 ) \ + SYSCALL_ENTRY( 0x1592, NtUserSetThreadDesktop, 4 ) \ + SYSCALL_ENTRY( 0x1593, NtUserSetThreadInputBlocked, 0 ) \ + SYSCALL_ENTRY( 0x1594, NtUserSetThreadLayoutHandles, 0 ) \ + SYSCALL_ENTRY( 0x1595, NtUserSetThreadQueueMergeSetting, 0 ) \ + SYSCALL_ENTRY( 0x1596, NtUserSetThreadState, 0 ) \ + SYSCALL_ENTRY( 0x1597, NtUserSetTimer, 20 ) \ + SYSCALL_ENTRY( 0x1598, NtUserSetUserObjectCapability, 0 ) \ + SYSCALL_ENTRY( 0x1599, NtUserSetVisible, 0 ) \ + SYSCALL_ENTRY( 0x159a, NtUserSetWaitForQueueAttach, 0 ) \ + SYSCALL_ENTRY( 0x159b, NtUserSetWatermarkStrings, 0 ) \ + SYSCALL_ENTRY( 0x159c, NtUserSetWinEventHook, 32 ) \ + SYSCALL_ENTRY( 0x159d, NtUserSetWindowArrangement, 0 ) \ + SYSCALL_ENTRY( 0x159e, NtUserSetWindowBand, 0 ) \ + SYSCALL_ENTRY( 0x159f, NtUserSetWindowCompositionAttribute, 0 ) \ + SYSCALL_ENTRY( 0x15a0, NtUserSetWindowCompositionTransition, 0 ) \ + SYSCALL_ENTRY( 0x15a1, NtUserSetWindowContextHelpId, 8 ) \ + SYSCALL_ENTRY( 0x15a2, NtUserSetWindowDisplayAffinity, 0 ) \ + SYSCALL_ENTRY( 0x15a3, NtUserSetWindowFNID, 8 ) \ + SYSCALL_ENTRY( 0x15a4, NtUserSetWindowFeedbackSetting, 0 ) \ + SYSCALL_ENTRY( 0x15a5, NtUserSetWindowGroup, 0 ) \ + SYSCALL_ENTRY( 0x15a6, NtUserSetWindowLong, 16 ) \ + SYSCALL_ENTRY( 0x15a7, NtUserSetWindowLongPtr, 16 ) \ + SYSCALL_ENTRY( 0x15a8, NtUserSetWindowMessageCapability, 0 ) \ + SYSCALL_ENTRY( 0x15a9, NtUserSetWindowPlacement, 8 ) \ + SYSCALL_ENTRY( 0x15aa, NtUserSetWindowPos, 28 ) \ + SYSCALL_ENTRY( 0x15ab, NtUserSetWindowRgn, 12 ) \ + SYSCALL_ENTRY( 0x15ac, NtUserSetWindowRgnEx, 0 ) \ + SYSCALL_ENTRY( 0x15ad, NtUserSetWindowShowState, 0 ) \ + SYSCALL_ENTRY( 0x15ae, NtUserSetWindowState, 0 ) \ + SYSCALL_ENTRY( 0x15af, NtUserSetWindowStationUser, 0 ) \ + SYSCALL_ENTRY( 0x15b0, NtUserSetWindowWord, 12 ) \ + SYSCALL_ENTRY( 0x15b1, NtUserSetWindowsHookAW, 0 ) \ + SYSCALL_ENTRY( 0x15b2, NtUserSetWindowsHookEx, 24 ) \ + SYSCALL_ENTRY( 0x15b3, NtUserShellForegroundBoostProcess, 0 ) \ + SYSCALL_ENTRY( 0x15b4, NtUserShellHandwritingDelegateInput, 0 ) \ + SYSCALL_ENTRY( 0x15b5, NtUserShellHandwritingHandleDelegatedInput, 0 ) \ + SYSCALL_ENTRY( 0x15b6, NtUserShellHandwritingUndelegateInput, 0 ) \ + SYSCALL_ENTRY( 0x15b7, NtUserShellMigrateWindow, 0 ) \ + SYSCALL_ENTRY( 0x15b8, NtUserShellRegisterHotKey, 0 ) \ + SYSCALL_ENTRY( 0x15b9, NtUserShellSetWindowPos, 0 ) \ + SYSCALL_ENTRY( 0x15ba, NtUserShowCaret, 4 ) \ + SYSCALL_ENTRY( 0x15bb, NtUserShowCursor, 4 ) \ + SYSCALL_ENTRY( 0x15bc, NtUserShowOwnedPopups, 8 ) \ + SYSCALL_ENTRY( 0x15bd, NtUserShowScrollBar, 12 ) \ + SYSCALL_ENTRY( 0x15be, NtUserShowStartGlass, 0 ) \ + SYSCALL_ENTRY( 0x15bf, NtUserShowSystemCursor, 0 ) \ + SYSCALL_ENTRY( 0x15c0, NtUserShowWindow, 8 ) \ + SYSCALL_ENTRY( 0x15c1, NtUserShowWindowAsync, 8 ) \ + SYSCALL_ENTRY( 0x15c2, NtUserShutdownBlockReasonCreate, 0 ) \ + SYSCALL_ENTRY( 0x15c3, NtUserShutdownBlockReasonQuery, 0 ) \ + SYSCALL_ENTRY( 0x15c4, NtUserShutdownReasonDestroy, 0 ) \ + SYSCALL_ENTRY( 0x15c5, NtUserSignalRedirectionStartComplete, 0 ) \ + SYSCALL_ENTRY( 0x15c6, NtUserSlicerControl, 0 ) \ + SYSCALL_ENTRY( 0x15c7, NtUserSoundSentry, 0 ) \ + SYSCALL_ENTRY( 0x15c8, NtUserStopAndEndInertia, 0 ) \ + SYSCALL_ENTRY( 0x15c9, NtUserSuppressWindowActions, 0 ) \ + SYSCALL_ENTRY( 0x15ca, NtUserSuppressWindowDisplayChange, 0 ) \ + SYSCALL_ENTRY( 0x15cb, NtUserSwapMouseButton, 0 ) \ + SYSCALL_ENTRY( 0x15cc, NtUserSwitchDesktop, 4 ) \ + SYSCALL_ENTRY( 0x15cd, NtUserSwitchToThisWindow, 0 ) \ + SYSCALL_ENTRY( 0x15ce, NtUserSystemParametersInfo, 16 ) \ + SYSCALL_ENTRY( 0x15cf, NtUserSystemParametersInfoForDpi, 20 ) \ + SYSCALL_ENTRY( 0x15d0, NtUserTestForInteractiveUser, 0 ) \ + SYSCALL_ENTRY( 0x15d1, NtUserThreadMessageQueueAttached, 0 ) \ + SYSCALL_ENTRY( 0x15d2, NtUserThunkedMenuInfo, 8 ) \ + SYSCALL_ENTRY( 0x15d3, NtUserThunkedMenuItemInfo, 24 ) \ + SYSCALL_ENTRY( 0x15d4, NtUserToUnicodeEx, 28 ) \ + SYSCALL_ENTRY( 0x15d5, NtUserTraceLoggingSendMixedModeTelemetry, 0 ) \ + SYSCALL_ENTRY( 0x15d6, NtUserTrackMouseEvent, 4 ) \ + SYSCALL_ENTRY( 0x15d7, NtUserTrackPopupMenuEx, 24 ) \ + SYSCALL_ENTRY( 0x15d8, NtUserTransformPoint, 0 ) \ + SYSCALL_ENTRY( 0x15d9, NtUserTransformRect, 0 ) \ + SYSCALL_ENTRY( 0x15da, NtUserTranslateAccelerator, 12 ) \ + SYSCALL_ENTRY( 0x15db, NtUserTranslateMessage, 8 ) \ + SYSCALL_ENTRY( 0x15dc, NtUserUndelegateInput, 0 ) \ + SYSCALL_ENTRY( 0x15dd, NtUserUnhookWinEvent, 4 ) \ + SYSCALL_ENTRY( 0x15de, NtUserUnhookWindowsHook, 8 ) \ + SYSCALL_ENTRY( 0x15df, NtUserUnhookWindowsHookEx, 4 ) \ + SYSCALL_ENTRY( 0x15e0, NtUserUnloadKeyboardLayout, 0 ) \ + SYSCALL_ENTRY( 0x15e1, NtUserUnlockWindowStation, 0 ) \ + SYSCALL_ENTRY( 0x15e2, NtUserUnregisterClass, 12 ) \ + SYSCALL_ENTRY( 0x15e3, NtUserUnregisterHotKey, 8 ) \ + SYSCALL_ENTRY( 0x15e4, NtUserUnregisterSessionPort, 0 ) \ + SYSCALL_ENTRY( 0x15e5, NtUserUnregisterTouchWindow, 4 ) \ + SYSCALL_ENTRY( 0x15e6, NtUserUnregisterUserApiHook, 0 ) \ + SYSCALL_ENTRY( 0x15e7, NtUserUpdateClientRect, 0 ) \ + SYSCALL_ENTRY( 0x15e8, NtUserUpdateDefaultDesktopThumbnail, 0 ) \ + SYSCALL_ENTRY( 0x15e9, NtUserUpdateInputContext, 12 ) \ + SYSCALL_ENTRY( 0x15ea, NtUserUpdateInstance, 0 ) \ + SYSCALL_ENTRY( 0x15eb, NtUserUpdateLayeredWindow, 40 ) \ + SYSCALL_ENTRY( 0x15ec, NtUserUpdatePerUserImmEnabling, 0 ) \ + SYSCALL_ENTRY( 0x15ed, NtUserUpdatePerUserSystemParameters, 0 ) \ + SYSCALL_ENTRY( 0x15ee, NtUserUpdateWindow, 0 ) \ + SYSCALL_ENTRY( 0x15ef, NtUserUpdateWindowInputSinkHints, 0 ) \ + SYSCALL_ENTRY( 0x15f0, NtUserUpdateWindowTrackingInfo, 0 ) \ + SYSCALL_ENTRY( 0x15f1, NtUserUpdateWindows, 0 ) \ + SYSCALL_ENTRY( 0x15f2, NtUserUserHandleGrantAccess, 0 ) \ + SYSCALL_ENTRY( 0x15f3, NtUserUserPowerCalloutWorker, 0 ) \ + SYSCALL_ENTRY( 0x15f4, NtUserValidateHandleSecure, 0 ) \ + SYSCALL_ENTRY( 0x15f5, NtUserValidateRect, 8 ) \ + SYSCALL_ENTRY( 0x15f6, NtUserValidateRgn, 8 ) \ + SYSCALL_ENTRY( 0x15f7, NtUserValidateTimerCallback, 0 ) \ + SYSCALL_ENTRY( 0x15f8, NtUserVkKeyScanEx, 8 ) \ + SYSCALL_ENTRY( 0x15f9, NtUserWOWCleanup, 0 ) \ + SYSCALL_ENTRY( 0x15fa, NtUserWOWModuleUnload, 0 ) \ + SYSCALL_ENTRY( 0x15fb, NtUserWaitAvailableMessageEx, 0 ) \ + SYSCALL_ENTRY( 0x15fc, NtUserWaitForInputIdle, 12 ) \ + SYSCALL_ENTRY( 0x15fd, NtUserWaitForMsgAndEvent, 0 ) \ + SYSCALL_ENTRY( 0x15fe, NtUserWaitForRedirectionStartComplete, 0 ) \ + SYSCALL_ENTRY( 0x15ff, NtUserWaitMessage, 0 ) \ + SYSCALL_ENTRY( 0x1600, NtUserWakeRITForShutdown, 0 ) \ + SYSCALL_ENTRY( 0x1601, NtUserWindowFromDC, 4 ) \ + SYSCALL_ENTRY( 0x1602, NtUserWindowFromPhysicalPoint, 0 ) \ + SYSCALL_ENTRY( 0x1603, NtUserWindowFromPoint, 8 ) \ + SYSCALL_ENTRY( 0x1604, NtUserYieldTask, 0 ) \ + SYSCALL_ENTRY( 0x1605, NtUserZapActiveAndFocus, 0 ) \ + SYSCALL_ENTRY( 0x1606, NtValidateCompositionSurfaceHandle, 0 ) \ + SYSCALL_ENTRY( 0x1607, NtVisualCaptureBits, 0 ) #ifdef _WIN64 #define ALL_SYSCALLS \ SYSCALL_ENTRY( 0x1000, NtBindCompositionSurface, 0 ) \ @@ -2394,695 +2398,699 @@ SYSCALL_ENTRY( 0x1350, NtUserClipCursor, 8 ) \ SYSCALL_ENTRY( 0x1351, NtUserCloseClipboard, 0 ) \ SYSCALL_ENTRY( 0x1352, NtUserCloseDesktop, 8 ) \ - SYSCALL_ENTRY( 0x1353, NtUserCloseWindowStation, 8 ) \ - SYSCALL_ENTRY( 0x1354, NtUserCompositionInputSinkLuidFromPoint, 0 ) \ - SYSCALL_ENTRY( 0x1355, NtUserCompositionInputSinkViewInstanceIdFromPoint, 0 ) \ - SYSCALL_ENTRY( 0x1356, NtUserConfigureActivationObject, 0 ) \ - SYSCALL_ENTRY( 0x1357, NtUserConfirmResizeCommit, 0 ) \ - SYSCALL_ENTRY( 0x1358, NtUserConsoleControl, 0 ) \ - SYSCALL_ENTRY( 0x1359, NtUserConvertMemHandle, 0 ) \ - SYSCALL_ENTRY( 0x135a, NtUserCopyAcceleratorTable, 24 ) \ - SYSCALL_ENTRY( 0x135b, NtUserCountClipboardFormats, 0 ) \ - SYSCALL_ENTRY( 0x135c, NtUserCreateAcceleratorTable, 16 ) \ - SYSCALL_ENTRY( 0x135d, NtUserCreateActivationGroup, 0 ) \ - SYSCALL_ENTRY( 0x135e, NtUserCreateActivationObject, 0 ) \ - SYSCALL_ENTRY( 0x135f, NtUserCreateBaseWindow, 0 ) \ - SYSCALL_ENTRY( 0x1360, NtUserCreateCaret, 32 ) \ - SYSCALL_ENTRY( 0x1361, NtUserCreateDCompositionHwndTarget, 0 ) \ - SYSCALL_ENTRY( 0x1362, NtUserCreateDesktopEx, 48 ) \ - SYSCALL_ENTRY( 0x1363, NtUserCreateEmptyCursorObject, 0 ) \ - SYSCALL_ENTRY( 0x1364, NtUserCreateInputContext, 8 ) \ - SYSCALL_ENTRY( 0x1365, NtUserCreateLocalMemHandle, 0 ) \ - SYSCALL_ENTRY( 0x1366, NtUserCreateMenu, 0 ) \ - SYSCALL_ENTRY( 0x1367, NtUserCreatePalmRejectionDelayZone, 0 ) \ - SYSCALL_ENTRY( 0x1368, NtUserCreatePopupMenu, 0 ) \ - SYSCALL_ENTRY( 0x1369, NtUserCreateSyntheticPointerDevice2, 0 ) \ - SYSCALL_ENTRY( 0x136a, NtUserCreateSystemThreads, 0 ) \ - SYSCALL_ENTRY( 0x136b, NtUserCreateWindowEx, 136 ) \ - SYSCALL_ENTRY( 0x136c, NtUserCreateWindowGroup, 0 ) \ - SYSCALL_ENTRY( 0x136d, NtUserCreateWindowStation, 56 ) \ - SYSCALL_ENTRY( 0x136e, NtUserCsDdeUninitialize, 0 ) \ - SYSCALL_ENTRY( 0x136f, NtUserCtxDisplayIOCtl, 0 ) \ - SYSCALL_ENTRY( 0x1370, NtUserDWP_GetEnabledPopupOffset, 0 ) \ - SYSCALL_ENTRY( 0x1371, NtUserDdeInitialize, 0 ) \ - SYSCALL_ENTRY( 0x1372, NtUserDefSetText, 0 ) \ - SYSCALL_ENTRY( 0x1373, NtUserDeferWindowDpiChanges, 0 ) \ - SYSCALL_ENTRY( 0x1374, NtUserDeferWindowPosAndBand, 80 ) \ - SYSCALL_ENTRY( 0x1375, NtUserDeferredDesktopRotation, 0 ) \ - SYSCALL_ENTRY( 0x1376, NtUserDelegateCapturePointers, 0 ) \ - SYSCALL_ENTRY( 0x1377, NtUserDelegateInput, 0 ) \ - SYSCALL_ENTRY( 0x1378, NtUserDeleteMenu, 24 ) \ - SYSCALL_ENTRY( 0x1379, NtUserDeleteWindowGroup, 0 ) \ - SYSCALL_ENTRY( 0x137a, NtUserDeregisterShellHookWindow, 0 ) \ - SYSCALL_ENTRY( 0x137b, NtUserDestroyAcceleratorTable, 8 ) \ - SYSCALL_ENTRY( 0x137c, NtUserDestroyActivationGroup, 0 ) \ - SYSCALL_ENTRY( 0x137d, NtUserDestroyActivationObject, 0 ) \ - SYSCALL_ENTRY( 0x137e, NtUserDestroyCaret, 0 ) \ - SYSCALL_ENTRY( 0x137f, NtUserDestroyCursor, 16 ) \ - SYSCALL_ENTRY( 0x1380, NtUserDestroyDCompositionHwndTarget, 0 ) \ - SYSCALL_ENTRY( 0x1381, NtUserDestroyInputContext, 8 ) \ - SYSCALL_ENTRY( 0x1382, NtUserDestroyMenu, 8 ) \ - SYSCALL_ENTRY( 0x1383, NtUserDestroyPalmRejectionDelayZone, 0 ) \ - SYSCALL_ENTRY( 0x1384, NtUserDestroyWindow, 8 ) \ - SYSCALL_ENTRY( 0x1385, NtUserDirectedYield, 0 ) \ - SYSCALL_ENTRY( 0x1386, NtUserDisableImmersiveOwner, 0 ) \ - SYSCALL_ENTRY( 0x1387, NtUserDisableProcessWindowFiltering, 0 ) \ - SYSCALL_ENTRY( 0x1388, NtUserDisableProcessWindowsGhosting, 0 ) \ - SYSCALL_ENTRY( 0x1389, NtUserDisableThreadIme, 8 ) \ - SYSCALL_ENTRY( 0x138a, NtUserDiscardPointerFrameMessages, 0 ) \ - SYSCALL_ENTRY( 0x138b, NtUserDispatchMessage, 8 ) \ - SYSCALL_ENTRY( 0x138c, NtUserDisplayConfigGetDeviceInfo, 8 ) \ - SYSCALL_ENTRY( 0x138d, NtUserDisplayConfigSetDeviceInfo, 0 ) \ - SYSCALL_ENTRY( 0x138e, NtUserDoInitMessagePumpHook, 0 ) \ - SYSCALL_ENTRY( 0x138f, NtUserDoSoundConnect, 0 ) \ - SYSCALL_ENTRY( 0x1390, NtUserDoSoundDisconnect, 0 ) \ - SYSCALL_ENTRY( 0x1391, NtUserDoUninitMessagePumpHook, 0 ) \ - SYSCALL_ENTRY( 0x1392, NtUserDownlevelTouchpad, 0 ) \ - SYSCALL_ENTRY( 0x1393, NtUserDragDetect, 24 ) \ - SYSCALL_ENTRY( 0x1394, NtUserDragObject, 40 ) \ - SYSCALL_ENTRY( 0x1395, NtUserDrainThreadCoreMessagingCompletions, 0 ) \ - SYSCALL_ENTRY( 0x1396, NtUserDrainThreadCoreMessagingCompletions2, 0 ) \ - SYSCALL_ENTRY( 0x1397, NtUserDrawAnimatedRects, 0 ) \ - SYSCALL_ENTRY( 0x1398, NtUserDrawCaption, 0 ) \ - SYSCALL_ENTRY( 0x1399, NtUserDrawCaptionTemp, 56 ) \ - SYSCALL_ENTRY( 0x139a, NtUserDrawIconEx, 72 ) \ - SYSCALL_ENTRY( 0x139b, NtUserDrawMenuBar, 8 ) \ - SYSCALL_ENTRY( 0x139c, NtUserDrawMenuBarTemp, 40 ) \ - SYSCALL_ENTRY( 0x139d, NtUserDwmGetRemoteSessionOcclusionEvent, 0 ) \ - SYSCALL_ENTRY( 0x139e, NtUserDwmGetRemoteSessionOcclusionState, 0 ) \ - SYSCALL_ENTRY( 0x139f, NtUserDwmKernelShutdown, 0 ) \ - SYSCALL_ENTRY( 0x13a0, NtUserDwmKernelStartup, 0 ) \ - SYSCALL_ENTRY( 0x13a1, NtUserDwmLockScreenUpdates, 0 ) \ - SYSCALL_ENTRY( 0x13a2, NtUserDwmValidateWindow, 0 ) \ - SYSCALL_ENTRY( 0x13a3, NtUserDwmWindowNotificationsEnabled, 0 ) \ - SYSCALL_ENTRY( 0x13a4, NtUserEmptyClipboard, 0 ) \ - SYSCALL_ENTRY( 0x13a5, NtUserEnableChildWindowDpiMessage, 0 ) \ - SYSCALL_ENTRY( 0x13a6, NtUserEnableIAMAccess, 0 ) \ - SYSCALL_ENTRY( 0x13a7, NtUserEnableMenuItem, 24 ) \ - SYSCALL_ENTRY( 0x13a8, NtUserEnableModernAppWindowKeyboardIntercept, 0 ) \ - SYSCALL_ENTRY( 0x13a9, NtUserEnableMouseInPointer, 8 ) \ - SYSCALL_ENTRY( 0x13aa, NtUserEnableMouseInPointerForThread, 0 ) \ - SYSCALL_ENTRY( 0x13ab, NtUserEnableMouseInPointerForWindow, 0 ) \ - SYSCALL_ENTRY( 0x13ac, NtUserEnableMouseInputForCursorSuppression, 0 ) \ - SYSCALL_ENTRY( 0x13ad, NtUserEnableNonClientDpiScaling, 0 ) \ - SYSCALL_ENTRY( 0x13ae, NtUserEnablePerMonitorMenuScaling, 0 ) \ - SYSCALL_ENTRY( 0x13af, NtUserEnableResizeLayoutSynchronization, 0 ) \ - SYSCALL_ENTRY( 0x13b0, NtUserEnableScrollBar, 24 ) \ - SYSCALL_ENTRY( 0x13b1, NtUserEnableSessionForMMCSS, 0 ) \ - SYSCALL_ENTRY( 0x13b2, NtUserEnableShellWindowManagementBehavior, 0 ) \ - SYSCALL_ENTRY( 0x13b3, NtUserEnableSoftwareCursorForScreenCapture, 0 ) \ - SYSCALL_ENTRY( 0x13b4, NtUserEnableTouchPad, 0 ) \ - SYSCALL_ENTRY( 0x13b5, NtUserEnableWindow, 16 ) \ - SYSCALL_ENTRY( 0x13b6, NtUserEnableWindowGDIScaledDpiMessage, 0 ) \ - SYSCALL_ENTRY( 0x13b7, NtUserEnableWindowGroupPolicy, 0 ) \ - SYSCALL_ENTRY( 0x13b8, NtUserEnableWindowResizeOptimization, 0 ) \ - SYSCALL_ENTRY( 0x13b9, NtUserEnableWindowShellWindowManagementBehavior, 0 ) \ - SYSCALL_ENTRY( 0x13ba, NtUserEndDeferWindowPosEx, 16 ) \ - SYSCALL_ENTRY( 0x13bb, NtUserEndMenu, 0 ) \ - SYSCALL_ENTRY( 0x13bc, NtUserEndPaint, 16 ) \ - SYSCALL_ENTRY( 0x13bd, NtUserEnsureDpiDepSysMetCacheForPlateau, 0 ) \ - SYSCALL_ENTRY( 0x13be, NtUserEnumClipboardFormats, 8 ) \ - SYSCALL_ENTRY( 0x13bf, NtUserEnumDisplayDevices, 32 ) \ - SYSCALL_ENTRY( 0x13c0, NtUserEnumDisplayMonitors, 32 ) \ - SYSCALL_ENTRY( 0x13c1, NtUserEnumDisplaySettings, 32 ) \ - SYSCALL_ENTRY( 0x13c2, NtUserEvent, 0 ) \ - SYSCALL_ENTRY( 0x13c3, NtUserExcludeUpdateRgn, 16 ) \ - SYSCALL_ENTRY( 0x13c4, NtUserFillWindow, 0 ) \ - SYSCALL_ENTRY( 0x13c5, NtUserFindExistingCursorIcon, 24 ) \ - SYSCALL_ENTRY( 0x13c6, NtUserFindWindowEx, 40 ) \ - SYSCALL_ENTRY( 0x13c7, NtUserFlashWindowEx, 8 ) \ - SYSCALL_ENTRY( 0x13c8, NtUserForceEnableNumpadTranslation, 0 ) \ - SYSCALL_ENTRY( 0x13c9, NtUserForceWindowToDpiForTest, 0 ) \ - SYSCALL_ENTRY( 0x13ca, NtUserFrostCrashedWindow, 0 ) \ - SYSCALL_ENTRY( 0x13cb, NtUserFunctionalizeDisplayConfig, 0 ) \ - SYSCALL_ENTRY( 0x13cc, NtUserGetActiveProcessesDpis, 0 ) \ - SYSCALL_ENTRY( 0x13cd, NtUserGetAltTabInfo, 0 ) \ - SYSCALL_ENTRY( 0x13ce, NtUserGetAncestor, 16 ) \ - SYSCALL_ENTRY( 0x13cf, NtUserGetAppImeLevel, 0 ) \ - SYSCALL_ENTRY( 0x13d0, NtUserGetAsyncKeyState, 8 ) \ - SYSCALL_ENTRY( 0x13d1, NtUserGetAtomName, 16 ) \ - SYSCALL_ENTRY( 0x13d2, NtUserGetAutoRotationState, 0 ) \ - SYSCALL_ENTRY( 0x13d3, NtUserGetCIMSSM, 0 ) \ - SYSCALL_ENTRY( 0x13d4, NtUserGetCPD, 0 ) \ - SYSCALL_ENTRY( 0x13d5, NtUserGetCaretBlinkTime, 0 ) \ - SYSCALL_ENTRY( 0x13d6, NtUserGetCaretPos, 8 ) \ - SYSCALL_ENTRY( 0x13d7, NtUserGetClassIcoCur, 0 ) \ - SYSCALL_ENTRY( 0x13d8, NtUserGetClassInfoEx, 40 ) \ - SYSCALL_ENTRY( 0x13d9, NtUserGetClassName, 24 ) \ - SYSCALL_ENTRY( 0x13da, NtUserGetClipCursor, 8 ) \ - SYSCALL_ENTRY( 0x13db, NtUserGetClipboardAccessToken, 0 ) \ - SYSCALL_ENTRY( 0x13dc, NtUserGetClipboardData, 16 ) \ - SYSCALL_ENTRY( 0x13dd, NtUserGetClipboardFormatName, 24 ) \ - SYSCALL_ENTRY( 0x13de, NtUserGetClipboardMetadata, 0 ) \ - SYSCALL_ENTRY( 0x13df, NtUserGetClipboardOwner, 0 ) \ - SYSCALL_ENTRY( 0x13e0, NtUserGetClipboardSequenceNumber, 0 ) \ - SYSCALL_ENTRY( 0x13e1, NtUserGetClipboardViewer, 0 ) \ - SYSCALL_ENTRY( 0x13e2, NtUserGetComboBoxInfo, 0 ) \ - SYSCALL_ENTRY( 0x13e3, NtUserGetControlBrush, 0 ) \ - SYSCALL_ENTRY( 0x13e4, NtUserGetControlColor, 0 ) \ - SYSCALL_ENTRY( 0x13e5, NtUserGetCurrentDpiInfoForWindow, 0 ) \ - SYSCALL_ENTRY( 0x13e6, NtUserGetCurrentInputMessageSource, 8 ) \ - SYSCALL_ENTRY( 0x13e7, NtUserGetCursor, 0 ) \ - SYSCALL_ENTRY( 0x13e8, NtUserGetCursorFrameInfo, 32 ) \ - SYSCALL_ENTRY( 0x13e9, NtUserGetCursorInfo, 8 ) \ - SYSCALL_ENTRY( 0x13ea, NtUserGetCursorPos, 8 ) \ - SYSCALL_ENTRY( 0x13eb, NtUserGetDC, 8 ) \ - SYSCALL_ENTRY( 0x13ec, NtUserGetDCEx, 24 ) \ - SYSCALL_ENTRY( 0x13ed, NtUserGetDCompositionHwndBitmap, 0 ) \ - SYSCALL_ENTRY( 0x13ee, NtUserGetDManipHookInitFunction, 0 ) \ - SYSCALL_ENTRY( 0x13ef, NtUserGetDesktopID, 0 ) \ - SYSCALL_ENTRY( 0x13f0, NtUserGetDesktopVisualTransform, 0 ) \ - SYSCALL_ENTRY( 0x13f1, NtUserGetDeviceChangeInfo, 0 ) \ - SYSCALL_ENTRY( 0x13f2, NtUserGetDisplayAutoRotationPreferences, 0 ) \ - SYSCALL_ENTRY( 0x13f3, NtUserGetDisplayAutoRotationPreferencesByProcessId, 0 ) \ - SYSCALL_ENTRY( 0x13f4, NtUserGetDisplayConfigBufferSizes, 24 ) \ - SYSCALL_ENTRY( 0x13f5, NtUserGetDoubleClickTime, 0 ) \ - SYSCALL_ENTRY( 0x13f6, NtUserGetDpiForCurrentProcess, 0 ) \ - SYSCALL_ENTRY( 0x13f7, NtUserGetDpiForMonitor, 32 ) \ - SYSCALL_ENTRY( 0x13f8, NtUserGetDwmCursorShape, 0 ) \ - SYSCALL_ENTRY( 0x13f9, NtUserGetExtendedPointerDeviceProperty, 0 ) \ - SYSCALL_ENTRY( 0x13fa, NtUserGetForegroundWindow, 0 ) \ - SYSCALL_ENTRY( 0x13fb, NtUserGetGUIThreadInfo, 16 ) \ - SYSCALL_ENTRY( 0x13fc, NtUserGetGestureConfig, 0 ) \ - SYSCALL_ENTRY( 0x13fd, NtUserGetGestureExtArgs, 0 ) \ - SYSCALL_ENTRY( 0x13fe, NtUserGetGestureInfo, 0 ) \ - SYSCALL_ENTRY( 0x13ff, NtUserGetGuiResources, 0 ) \ - SYSCALL_ENTRY( 0x1400, NtUserGetHDevName, 0 ) \ - SYSCALL_ENTRY( 0x1401, NtUserGetHimetricScaleFactorFromPixelLocation, 0 ) \ - SYSCALL_ENTRY( 0x1402, NtUserGetIMEShowStatus, 0 ) \ - SYSCALL_ENTRY( 0x1403, NtUserGetIconInfo, 48 ) \ - SYSCALL_ENTRY( 0x1404, NtUserGetIconSize, 32 ) \ - SYSCALL_ENTRY( 0x1405, NtUserGetImeHotKey, 0 ) \ - SYSCALL_ENTRY( 0x1406, NtUserGetImeInfoEx, 0 ) \ - SYSCALL_ENTRY( 0x1407, NtUserGetInputContainerId, 0 ) \ - SYSCALL_ENTRY( 0x1408, NtUserGetInputDesktop, 0 ) \ - SYSCALL_ENTRY( 0x1409, NtUserGetInputEvent, 0 ) \ - SYSCALL_ENTRY( 0x140a, NtUserGetInputLocaleInfo, 0 ) \ - SYSCALL_ENTRY( 0x140b, NtUserGetInteractiveControlDeviceInfo, 0 ) \ - SYSCALL_ENTRY( 0x140c, NtUserGetInteractiveControlInfo, 0 ) \ - SYSCALL_ENTRY( 0x140d, NtUserGetInteractiveCtrlSupportedWaveforms, 0 ) \ - SYSCALL_ENTRY( 0x140e, NtUserGetInternalWindowPos, 24 ) \ - SYSCALL_ENTRY( 0x140f, NtUserGetKeyNameText, 24 ) \ - SYSCALL_ENTRY( 0x1410, NtUserGetKeyState, 8 ) \ - SYSCALL_ENTRY( 0x1411, NtUserGetKeyboardLayout, 8 ) \ - SYSCALL_ENTRY( 0x1412, NtUserGetKeyboardLayoutList, 16 ) \ - SYSCALL_ENTRY( 0x1413, NtUserGetKeyboardLayoutName, 8 ) \ - SYSCALL_ENTRY( 0x1414, NtUserGetKeyboardState, 8 ) \ - SYSCALL_ENTRY( 0x1415, NtUserGetKeyboardType, 0 ) \ - SYSCALL_ENTRY( 0x1416, NtUserGetLayeredWindowAttributes, 32 ) \ - SYSCALL_ENTRY( 0x1417, NtUserGetListBoxInfo, 0 ) \ - SYSCALL_ENTRY( 0x1418, NtUserGetMenuBarInfo, 32 ) \ - SYSCALL_ENTRY( 0x1419, NtUserGetMenuIndex, 0 ) \ - SYSCALL_ENTRY( 0x141a, NtUserGetMenuItemRect, 32 ) \ - SYSCALL_ENTRY( 0x141b, NtUserGetMessage, 32 ) \ - SYSCALL_ENTRY( 0x141c, NtUserGetMessagePos, 0 ) \ - SYSCALL_ENTRY( 0x141d, NtUserGetMinuserIdForBaseWindow, 0 ) \ - SYSCALL_ENTRY( 0x141e, NtUserGetModernAppWindow, 0 ) \ - SYSCALL_ENTRY( 0x141f, NtUserGetMouseMovePointsEx, 40 ) \ - SYSCALL_ENTRY( 0x1420, NtUserGetObjectInformation, 40 ) \ - SYSCALL_ENTRY( 0x1421, NtUserGetOemBitmapSize, 0 ) \ - SYSCALL_ENTRY( 0x1422, NtUserGetOpenClipboardWindow, 0 ) \ - SYSCALL_ENTRY( 0x1423, NtUserGetOwnerTransformedMonitorRect, 0 ) \ - SYSCALL_ENTRY( 0x1424, NtUserGetPhysicalDeviceRect, 0 ) \ - SYSCALL_ENTRY( 0x1425, NtUserGetPointerCursorId, 0 ) \ - SYSCALL_ENTRY( 0x1426, NtUserGetPointerDevice, 0 ) \ - SYSCALL_ENTRY( 0x1427, NtUserGetPointerDeviceCursors, 0 ) \ - SYSCALL_ENTRY( 0x1428, NtUserGetPointerDeviceInputSpace, 0 ) \ - SYSCALL_ENTRY( 0x1429, NtUserGetPointerDeviceOrientation, 0 ) \ - SYSCALL_ENTRY( 0x142a, NtUserGetPointerDeviceProperties, 0 ) \ - SYSCALL_ENTRY( 0x142b, NtUserGetPointerDeviceRects, 24 ) \ - SYSCALL_ENTRY( 0x142c, NtUserGetPointerDevices, 0 ) \ - SYSCALL_ENTRY( 0x142d, NtUserGetPointerFrameTimes, 0 ) \ - SYSCALL_ENTRY( 0x142e, NtUserGetPointerInfoList, 64 ) \ - SYSCALL_ENTRY( 0x142f, NtUserGetPointerInputTransform, 0 ) \ - SYSCALL_ENTRY( 0x1430, NtUserGetPointerProprietaryId, 0 ) \ - SYSCALL_ENTRY( 0x1431, NtUserGetPointerType, 16 ) \ - SYSCALL_ENTRY( 0x1432, NtUserGetPrecisionTouchPadConfiguration, 0 ) \ - SYSCALL_ENTRY( 0x1433, NtUserGetPriorityClipboardFormat, 16 ) \ - SYSCALL_ENTRY( 0x1434, NtUserGetProcessDefaultLayout, 8 ) \ - SYSCALL_ENTRY( 0x1435, NtUserGetProcessDpiAwarenessContext, 8 ) \ - SYSCALL_ENTRY( 0x1436, NtUserGetProcessUIContextInformation, 0 ) \ - SYSCALL_ENTRY( 0x1437, NtUserGetProcessWindowStation, 0 ) \ - SYSCALL_ENTRY( 0x1438, NtUserGetProp, 16 ) \ - SYSCALL_ENTRY( 0x1439, NtUserGetProp2, 0 ) \ - SYSCALL_ENTRY( 0x143a, NtUserGetQueueIocp, 0 ) \ - SYSCALL_ENTRY( 0x143b, NtUserGetQueueStatus, 8 ) \ - SYSCALL_ENTRY( 0x143c, NtUserGetQueueStatusReadonly, 0 ) \ - SYSCALL_ENTRY( 0x143d, NtUserGetRawInputBuffer, 24 ) \ - SYSCALL_ENTRY( 0x143e, NtUserGetRawInputData, 40 ) \ - SYSCALL_ENTRY( 0x143f, NtUserGetRawInputDeviceInfo, 32 ) \ - SYSCALL_ENTRY( 0x1440, NtUserGetRawInputDeviceList, 24 ) \ - SYSCALL_ENTRY( 0x1441, NtUserGetRawPointerDeviceData, 0 ) \ - SYSCALL_ENTRY( 0x1442, NtUserGetRegisteredRawInputDevices, 24 ) \ - SYSCALL_ENTRY( 0x1443, NtUserGetRequiredCursorSizes, 0 ) \ - SYSCALL_ENTRY( 0x1444, NtUserGetResizeDCompositionSynchronizationObject, 0 ) \ - SYSCALL_ENTRY( 0x1445, NtUserGetScrollBarInfo, 24 ) \ - SYSCALL_ENTRY( 0x1446, NtUserGetSendMessageReceiver, 0 ) \ - SYSCALL_ENTRY( 0x1447, NtUserGetSharedWindowData, 0 ) \ - SYSCALL_ENTRY( 0x1448, NtUserGetSuppressedWindowActions, 0 ) \ - SYSCALL_ENTRY( 0x1449, NtUserGetSysMenuOffset, 0 ) \ - SYSCALL_ENTRY( 0x144a, NtUserGetSystemContentRects, 0 ) \ - SYSCALL_ENTRY( 0x144b, NtUserGetSystemDpiForProcess, 8 ) \ - SYSCALL_ENTRY( 0x144c, NtUserGetSystemMenu, 16 ) \ - SYSCALL_ENTRY( 0x144d, NtUserGetThreadDesktop, 8 ) \ - SYSCALL_ENTRY( 0x144e, NtUserGetThreadState, 8 ) \ - SYSCALL_ENTRY( 0x144f, NtUserGetTitleBarInfo, 16 ) \ - SYSCALL_ENTRY( 0x1450, NtUserGetTopLevelWindow, 0 ) \ - SYSCALL_ENTRY( 0x1451, NtUserGetTouchInputInfo, 0 ) \ - SYSCALL_ENTRY( 0x1452, NtUserGetTouchValidationStatus, 0 ) \ - SYSCALL_ENTRY( 0x1453, NtUserGetUniformSpaceMapping, 0 ) \ - SYSCALL_ENTRY( 0x1454, NtUserGetUnpredictedMessagePos, 0 ) \ - SYSCALL_ENTRY( 0x1455, NtUserGetUpdateRect, 24 ) \ - SYSCALL_ENTRY( 0x1456, NtUserGetUpdateRgn, 24 ) \ - SYSCALL_ENTRY( 0x1457, NtUserGetUpdatedClipboardFormats, 24 ) \ - SYSCALL_ENTRY( 0x1458, NtUserGetWOWClass, 0 ) \ - SYSCALL_ENTRY( 0x1459, NtUserGetWinStationInfo, 0 ) \ - SYSCALL_ENTRY( 0x145a, NtUserGetWindowBand, 0 ) \ - SYSCALL_ENTRY( 0x145b, NtUserGetWindowCompositionAttribute, 0 ) \ - SYSCALL_ENTRY( 0x145c, NtUserGetWindowCompositionInfo, 0 ) \ - SYSCALL_ENTRY( 0x145d, NtUserGetWindowContextHelpId, 8 ) \ - SYSCALL_ENTRY( 0x145e, NtUserGetWindowDC, 8 ) \ - SYSCALL_ENTRY( 0x145f, NtUserGetWindowDisplayAffinity, 16 ) \ - SYSCALL_ENTRY( 0x1460, NtUserGetWindowFeedbackSetting, 0 ) \ - SYSCALL_ENTRY( 0x1461, NtUserGetWindowGroupId, 0 ) \ - SYSCALL_ENTRY( 0x1462, NtUserGetWindowMinimizeRect, 0 ) \ - SYSCALL_ENTRY( 0x1463, NtUserGetWindowPlacement, 16 ) \ - SYSCALL_ENTRY( 0x1464, NtUserGetWindowProcessHandle, 0 ) \ - SYSCALL_ENTRY( 0x1465, NtUserGetWindowRgnEx, 24 ) \ - SYSCALL_ENTRY( 0x1466, NtUserGetWindowThreadProcessId, 0 ) \ - SYSCALL_ENTRY( 0x1467, NtUserGetWindowTrackInfoAsync, 0 ) \ - SYSCALL_ENTRY( 0x1468, NtUserGhostWindowFromHungWindow, 0 ) \ - SYSCALL_ENTRY( 0x1469, NtUserHandleDelegatedInput, 0 ) \ - SYSCALL_ENTRY( 0x146a, NtUserHandleSystemThreadCreationFailure, 0 ) \ - SYSCALL_ENTRY( 0x146b, NtUserHardErrorControl, 0 ) \ - SYSCALL_ENTRY( 0x146c, NtUserHideCaret, 8 ) \ - SYSCALL_ENTRY( 0x146d, NtUserHideCursorNoCapture, 0 ) \ - SYSCALL_ENTRY( 0x146e, NtUserHidePointerContactVisualization, 0 ) \ - SYSCALL_ENTRY( 0x146f, NtUserHiliteMenuItem, 32 ) \ - SYSCALL_ENTRY( 0x1470, NtUserHungWindowFromGhostWindow, 0 ) \ - SYSCALL_ENTRY( 0x1471, NtUserHwndQueryRedirectionInfo, 0 ) \ - SYSCALL_ENTRY( 0x1472, NtUserHwndSetRedirectionInfo, 0 ) \ - SYSCALL_ENTRY( 0x1473, NtUserImpersonateDdeClientWindow, 0 ) \ - SYSCALL_ENTRY( 0x1474, NtUserInheritWindowMonitor, 0 ) \ - SYSCALL_ENTRY( 0x1475, NtUserInitAnsiOem, 0 ) \ - SYSCALL_ENTRY( 0x1476, NtUserInitTask, 0 ) \ - SYSCALL_ENTRY( 0x1477, NtUserInitThreadCoreMessagingIocp, 0 ) \ - SYSCALL_ENTRY( 0x1478, NtUserInitThreadCoreMessagingIocp2, 0 ) \ - SYSCALL_ENTRY( 0x1479, NtUserInitialize, 0 ) \ - SYSCALL_ENTRY( 0x147a, NtUserInitializeClientPfnArrays, 32 ) \ - SYSCALL_ENTRY( 0x147b, NtUserInitializeGenericHidInjection, 0 ) \ - SYSCALL_ENTRY( 0x147c, NtUserInitializeInputDeviceInjection, 0 ) \ - SYSCALL_ENTRY( 0x147d, NtUserInitializePointerDeviceInjection, 0 ) \ - SYSCALL_ENTRY( 0x147e, NtUserInitializePointerDeviceInjectionEx, 0 ) \ - SYSCALL_ENTRY( 0x147f, NtUserInitializeTouchInjection, 16 ) \ - SYSCALL_ENTRY( 0x1480, NtUserInjectDeviceInput, 0 ) \ - SYSCALL_ENTRY( 0x1481, NtUserInjectGenericHidInput, 0 ) \ - SYSCALL_ENTRY( 0x1482, NtUserInjectGesture, 0 ) \ - SYSCALL_ENTRY( 0x1483, NtUserInjectKeyboardInput, 0 ) \ - SYSCALL_ENTRY( 0x1484, NtUserInjectMouseInput, 0 ) \ - SYSCALL_ENTRY( 0x1485, NtUserInjectPointerInput, 0 ) \ - SYSCALL_ENTRY( 0x1486, NtUserInjectTouchInput, 0 ) \ - SYSCALL_ENTRY( 0x1487, NtUserInteractiveControlQueryUsage, 0 ) \ - SYSCALL_ENTRY( 0x1488, NtUserInternalGetWindowIcon, 16 ) \ - SYSCALL_ENTRY( 0x1489, NtUserInternalGetWindowText, 24 ) \ - SYSCALL_ENTRY( 0x148a, NtUserInternalStartMoveSize, 0 ) \ - SYSCALL_ENTRY( 0x148b, NtUserInternalToUnicode, 0 ) \ - SYSCALL_ENTRY( 0x148c, NtUserInvalidateRect, 24 ) \ - SYSCALL_ENTRY( 0x148d, NtUserInvalidateRgn, 24 ) \ - SYSCALL_ENTRY( 0x148e, NtUserIsChildWindowDpiMessageEnabled, 8 ) \ - SYSCALL_ENTRY( 0x148f, NtUserIsClipboardFormatAvailable, 8 ) \ - SYSCALL_ENTRY( 0x1490, NtUserIsMouseInPointerEnabled, 0 ) \ - SYSCALL_ENTRY( 0x1491, NtUserIsMouseInputEnabled, 0 ) \ - SYSCALL_ENTRY( 0x1492, NtUserIsNonClientDpiScalingEnabled, 0 ) \ - SYSCALL_ENTRY( 0x1493, NtUserIsQueueAttached, 0 ) \ - SYSCALL_ENTRY( 0x1494, NtUserIsResizeLayoutSynchronizationEnabled, 0 ) \ - SYSCALL_ENTRY( 0x1495, NtUserIsTopLevelWindow, 0 ) \ - SYSCALL_ENTRY( 0x1496, NtUserIsTouchWindow, 0 ) \ - SYSCALL_ENTRY( 0x1497, NtUserIsWindowBroadcastingDpiToChildren, 0 ) \ - SYSCALL_ENTRY( 0x1498, NtUserIsWindowDisplayChangeSuppressed, 0 ) \ - SYSCALL_ENTRY( 0x1499, NtUserIsWindowGDIScaledDpiMessageEnabled, 0 ) \ - SYSCALL_ENTRY( 0x149a, NtUserKillSystemTimer, 16 ) \ - SYSCALL_ENTRY( 0x149b, NtUserKillTimer, 16 ) \ - SYSCALL_ENTRY( 0x149c, NtUserLW_LoadFonts, 0 ) \ - SYSCALL_ENTRY( 0x149d, NtUserLayoutCompleted, 0 ) \ - SYSCALL_ENTRY( 0x149e, NtUserLinkDpiCursor, 0 ) \ - SYSCALL_ENTRY( 0x149f, NtUserLoadCursorsAndIcons, 0 ) \ - SYSCALL_ENTRY( 0x14a0, NtUserLoadKeyboardLayoutEx, 0 ) \ - SYSCALL_ENTRY( 0x14a1, NtUserLoadUserApiHook, 0 ) \ - SYSCALL_ENTRY( 0x14a2, NtUserLockCursor, 0 ) \ - SYSCALL_ENTRY( 0x14a3, NtUserLockSetForegroundWindow, 0 ) \ - SYSCALL_ENTRY( 0x14a4, NtUserLockWindowStation, 0 ) \ - SYSCALL_ENTRY( 0x14a5, NtUserLockWindowUpdate, 8 ) \ - SYSCALL_ENTRY( 0x14a6, NtUserLockWorkStation, 0 ) \ - SYSCALL_ENTRY( 0x14a7, NtUserLogicalToPerMonitorDPIPhysicalPoint, 16 ) \ - SYSCALL_ENTRY( 0x14a8, NtUserLogicalToPhysicalDpiPointForWindow, 0 ) \ - SYSCALL_ENTRY( 0x14a9, NtUserLogicalToPhysicalPoint, 0 ) \ - SYSCALL_ENTRY( 0x14aa, NtUserMNDragLeave, 0 ) \ - SYSCALL_ENTRY( 0x14ab, NtUserMNDragOver, 0 ) \ - SYSCALL_ENTRY( 0x14ac, NtUserMagControl, 0 ) \ - SYSCALL_ENTRY( 0x14ad, NtUserMagGetContextInformation, 0 ) \ - SYSCALL_ENTRY( 0x14ae, NtUserMagSetContextInformation, 0 ) \ - SYSCALL_ENTRY( 0x14af, NtUserMapDesktopObject, 0 ) \ - SYSCALL_ENTRY( 0x14b0, NtUserMapPointsByVisualIdentifier, 0 ) \ - SYSCALL_ENTRY( 0x14b1, NtUserMapVirtualKeyEx, 24 ) \ - SYSCALL_ENTRY( 0x14b2, NtUserMarkWindowForRawMouse, 0 ) \ - SYSCALL_ENTRY( 0x14b3, NtUserMenuItemFromPoint, 32 ) \ - SYSCALL_ENTRY( 0x14b4, NtUserMessageBeep, 8 ) \ - SYSCALL_ENTRY( 0x14b5, NtUserMessageCall, 56 ) \ - SYSCALL_ENTRY( 0x14b6, NtUserMinInitialize, 0 ) \ - SYSCALL_ENTRY( 0x14b7, NtUserMinMaximize, 0 ) \ - SYSCALL_ENTRY( 0x14b8, NtUserModifyUserStartupInfoFlags, 16 ) \ - SYSCALL_ENTRY( 0x14b9, NtUserModifyWindowTouchCapability, 0 ) \ - SYSCALL_ENTRY( 0x14ba, NtUserMoveWindow, 48 ) \ - SYSCALL_ENTRY( 0x14bb, NtUserMsgWaitForMultipleObjectsEx, 40 ) \ - SYSCALL_ENTRY( 0x14bc, NtUserNavigateFocus, 0 ) \ - SYSCALL_ENTRY( 0x14bd, NtUserNlsKbdSendIMENotification, 0 ) \ - SYSCALL_ENTRY( 0x14be, NtUserNotifyIMEStatus, 16 ) \ - SYSCALL_ENTRY( 0x14bf, NtUserNotifyOverlayWindow, 0 ) \ - SYSCALL_ENTRY( 0x14c0, NtUserNotifyProcessCreate, 0 ) \ - SYSCALL_ENTRY( 0x14c1, NtUserNotifyWinEvent, 32 ) \ - SYSCALL_ENTRY( 0x14c2, NtUserOpenClipboard, 16 ) \ - SYSCALL_ENTRY( 0x14c3, NtUserOpenDesktop, 24 ) \ - SYSCALL_ENTRY( 0x14c4, NtUserOpenInputDesktop, 24 ) \ - SYSCALL_ENTRY( 0x14c5, NtUserOpenThreadDesktop, 0 ) \ - SYSCALL_ENTRY( 0x14c6, NtUserOpenWindowStation, 16 ) \ - SYSCALL_ENTRY( 0x14c7, NtUserPaintDesktop, 0 ) \ - SYSCALL_ENTRY( 0x14c8, NtUserPaintMenuBar, 0 ) \ - SYSCALL_ENTRY( 0x14c9, NtUserPaintMonitor, 0 ) \ - SYSCALL_ENTRY( 0x14ca, NtUserPeekMessage, 40 ) \ - SYSCALL_ENTRY( 0x14cb, NtUserPerMonitorDPIPhysicalToLogicalPoint, 16 ) \ - SYSCALL_ENTRY( 0x14cc, NtUserPhysicalToLogicalDpiPointForWindow, 0 ) \ - SYSCALL_ENTRY( 0x14cd, NtUserPhysicalToLogicalPoint, 0 ) \ - SYSCALL_ENTRY( 0x14ce, NtUserPlayEventSound, 0 ) \ - SYSCALL_ENTRY( 0x14cf, NtUserPostKeyboardInputMessage, 0 ) \ - SYSCALL_ENTRY( 0x14d0, NtUserPostMessage, 32 ) \ - SYSCALL_ENTRY( 0x14d1, NtUserPostQuitMessage, 8 ) \ - SYSCALL_ENTRY( 0x14d2, NtUserPostThreadMessage, 32 ) \ - SYSCALL_ENTRY( 0x14d3, NtUserPrepareForLogoff, 0 ) \ - SYSCALL_ENTRY( 0x14d4, NtUserPrintWindow, 24 ) \ - SYSCALL_ENTRY( 0x14d5, NtUserProcessConnect, 0 ) \ - SYSCALL_ENTRY( 0x14d6, NtUserProcessInkFeedbackCommand, 0 ) \ - SYSCALL_ENTRY( 0x14d7, NtUserPromoteMouseInPointer, 0 ) \ - SYSCALL_ENTRY( 0x14d8, NtUserPromotePointer, 0 ) \ - SYSCALL_ENTRY( 0x14d9, NtUserQueryActivationObject, 0 ) \ - SYSCALL_ENTRY( 0x14da, NtUserQueryBSDRWindow, 0 ) \ - SYSCALL_ENTRY( 0x14db, NtUserQueryDisplayConfig, 48 ) \ - SYSCALL_ENTRY( 0x14dc, NtUserQueryInformationThread, 0 ) \ - SYSCALL_ENTRY( 0x14dd, NtUserQueryInputContext, 16 ) \ - SYSCALL_ENTRY( 0x14de, NtUserQuerySendMessage, 0 ) \ - SYSCALL_ENTRY( 0x14df, NtUserQueryWindow, 16 ) \ - SYSCALL_ENTRY( 0x14e0, NtUserRaiseLowerShellWindow, 0 ) \ - SYSCALL_ENTRY( 0x14e1, NtUserRealChildWindowFromPoint, 24 ) \ - SYSCALL_ENTRY( 0x14e2, NtUserRealInternalGetMessage, 0 ) \ - SYSCALL_ENTRY( 0x14e3, NtUserRealWaitMessageEx, 0 ) \ - SYSCALL_ENTRY( 0x14e4, NtUserRealizePalette, 8 ) \ - SYSCALL_ENTRY( 0x14e5, NtUserReassociateQueueEventCompletionPacket, 0 ) \ - SYSCALL_ENTRY( 0x14e6, NtUserRedrawFrame, 0 ) \ - SYSCALL_ENTRY( 0x14e7, NtUserRedrawFrameAndHook, 0 ) \ - SYSCALL_ENTRY( 0x14e8, NtUserRedrawTitle, 0 ) \ - SYSCALL_ENTRY( 0x14e9, NtUserRedrawWindow, 32 ) \ - SYSCALL_ENTRY( 0x14ea, NtUserRegisterBSDRWindow, 0 ) \ - SYSCALL_ENTRY( 0x14eb, NtUserRegisterClassExWOW, 56 ) \ - SYSCALL_ENTRY( 0x14ec, NtUserRegisterCloakedNotification, 0 ) \ - SYSCALL_ENTRY( 0x14ed, NtUserRegisterDManipHook, 0 ) \ - SYSCALL_ENTRY( 0x14ee, NtUserRegisterEdgy, 0 ) \ - SYSCALL_ENTRY( 0x14ef, NtUserRegisterErrorReportingDialog, 0 ) \ - SYSCALL_ENTRY( 0x14f0, NtUserRegisterForCustomDockTargets, 0 ) \ - SYSCALL_ENTRY( 0x14f1, NtUserRegisterForTooltipDismissNotification, 0 ) \ - SYSCALL_ENTRY( 0x14f2, NtUserRegisterGhostWindow, 0 ) \ - SYSCALL_ENTRY( 0x14f3, NtUserRegisterHotKey, 32 ) \ - SYSCALL_ENTRY( 0x14f4, NtUserRegisterLPK, 0 ) \ - SYSCALL_ENTRY( 0x14f5, NtUserRegisterLogonProcess, 0 ) \ - SYSCALL_ENTRY( 0x14f6, NtUserRegisterManipulationThread, 0 ) \ - SYSCALL_ENTRY( 0x14f7, NtUserRegisterPointerDeviceNotifications, 0 ) \ - SYSCALL_ENTRY( 0x14f8, NtUserRegisterPointerInputTarget, 0 ) \ - SYSCALL_ENTRY( 0x14f9, NtUserRegisterPrecisionTouchpadWindow, 0 ) \ - SYSCALL_ENTRY( 0x14fa, NtUserRegisterRawInputDevices, 24 ) \ - SYSCALL_ENTRY( 0x14fb, NtUserRegisterServicesProcess, 0 ) \ - SYSCALL_ENTRY( 0x14fc, NtUserRegisterSessionPort, 0 ) \ - SYSCALL_ENTRY( 0x14fd, NtUserRegisterShellHookWindow, 0 ) \ - SYSCALL_ENTRY( 0x14fe, NtUserRegisterShellPTPListener, 0 ) \ - SYSCALL_ENTRY( 0x14ff, NtUserRegisterSiblingFrostWindow, 0 ) \ - SYSCALL_ENTRY( 0x1500, NtUserRegisterSystemThread, 0 ) \ - SYSCALL_ENTRY( 0x1501, NtUserRegisterTasklist, 0 ) \ - SYSCALL_ENTRY( 0x1502, NtUserRegisterTouchHitTestingWindow, 0 ) \ - SYSCALL_ENTRY( 0x1503, NtUserRegisterTouchPadCapable, 8 ) \ - SYSCALL_ENTRY( 0x1504, NtUserRegisterUserApiHook, 0 ) \ - SYSCALL_ENTRY( 0x1505, NtUserRegisterUserHungAppHandlers, 0 ) \ - SYSCALL_ENTRY( 0x1506, NtUserRegisterWindowArrangementCallout, 0 ) \ - SYSCALL_ENTRY( 0x1507, NtUserRegisterWindowMessage, 8 ) \ - SYSCALL_ENTRY( 0x1508, NtUserReleaseCapture, 0 ) \ - SYSCALL_ENTRY( 0x1509, NtUserReleaseDC, 16 ) \ - SYSCALL_ENTRY( 0x150a, NtUserReleaseDwmHitTestWaiters, 0 ) \ - SYSCALL_ENTRY( 0x150b, NtUserRemoteConnect, 0 ) \ - SYSCALL_ENTRY( 0x150c, NtUserRemoteConnectState, 0 ) \ - SYSCALL_ENTRY( 0x150d, NtUserRemoteConsoleShadowStop, 0 ) \ - SYSCALL_ENTRY( 0x150e, NtUserRemoteDisconnect, 0 ) \ - SYSCALL_ENTRY( 0x150f, NtUserRemoteNotify, 0 ) \ - SYSCALL_ENTRY( 0x1510, NtUserRemotePassthruDisable, 0 ) \ - SYSCALL_ENTRY( 0x1511, NtUserRemotePassthruEnable, 0 ) \ - SYSCALL_ENTRY( 0x1512, NtUserRemoteReconnect, 0 ) \ - SYSCALL_ENTRY( 0x1513, NtUserRemoteRedrawRectangle, 0 ) \ - SYSCALL_ENTRY( 0x1514, NtUserRemoteRedrawScreen, 0 ) \ - SYSCALL_ENTRY( 0x1515, NtUserRemoteShadowCleanup, 0 ) \ - SYSCALL_ENTRY( 0x1516, NtUserRemoteShadowSetup, 0 ) \ - SYSCALL_ENTRY( 0x1517, NtUserRemoteShadowStart, 0 ) \ - SYSCALL_ENTRY( 0x1518, NtUserRemoteShadowStop, 0 ) \ - SYSCALL_ENTRY( 0x1519, NtUserRemoteStopScreenUpdates, 0 ) \ - SYSCALL_ENTRY( 0x151a, NtUserRemoteThinwireStats, 0 ) \ - SYSCALL_ENTRY( 0x151b, NtUserRemoveClipboardFormatListener, 8 ) \ - SYSCALL_ENTRY( 0x151c, NtUserRemoveInjectionDevice, 0 ) \ - SYSCALL_ENTRY( 0x151d, NtUserRemoveMenu, 24 ) \ - SYSCALL_ENTRY( 0x151e, NtUserRemoveProp, 16 ) \ - SYSCALL_ENTRY( 0x151f, NtUserRemoveQueueCompletion, 0 ) \ - SYSCALL_ENTRY( 0x1520, NtUserRemoveVisualIdentifier, 0 ) \ - SYSCALL_ENTRY( 0x1521, NtUserReplyMessage, 8 ) \ - SYSCALL_ENTRY( 0x1522, NtUserReportInertia, 0 ) \ - SYSCALL_ENTRY( 0x1523, NtUserRequestMoveSizeOperation, 0 ) \ - SYSCALL_ENTRY( 0x1524, NtUserResetDblClk, 0 ) \ - SYSCALL_ENTRY( 0x1525, NtUserResolveDesktopForWOW, 0 ) \ - SYSCALL_ENTRY( 0x1526, NtUserRestoreWindowDpiChanges, 0 ) \ - SYSCALL_ENTRY( 0x1527, NtUserSBGetParms, 0 ) \ - SYSCALL_ENTRY( 0x1528, NtUserScaleSystemMetricForDPIWithoutCache, 0 ) \ - SYSCALL_ENTRY( 0x1529, NtUserScheduleDispatchNotification, 8 ) \ - SYSCALL_ENTRY( 0x152a, NtUserScrollDC, 56 ) \ - SYSCALL_ENTRY( 0x152b, NtUserScrollWindowEx, 64 ) \ - SYSCALL_ENTRY( 0x152c, NtUserSelectPalette, 24 ) \ - SYSCALL_ENTRY( 0x152d, NtUserSendEventMessage, 0 ) \ - SYSCALL_ENTRY( 0x152e, NtUserSendInput, 24 ) \ - SYSCALL_ENTRY( 0x152f, NtUserSendInteractiveControlHapticsReport, 0 ) \ - SYSCALL_ENTRY( 0x1530, NtUserSetActivationFilter, 0 ) \ - SYSCALL_ENTRY( 0x1531, NtUserSetActiveProcessForMonitor, 0 ) \ - SYSCALL_ENTRY( 0x1532, NtUserSetActiveWindow, 8 ) \ - SYSCALL_ENTRY( 0x1533, NtUserSetAdditionalForegroundBoostProcesses, 24 ) \ - SYSCALL_ENTRY( 0x1534, NtUserSetAppImeLevel, 0 ) \ - SYSCALL_ENTRY( 0x1535, NtUserSetAutoRotation, 0 ) \ - SYSCALL_ENTRY( 0x1536, NtUserSetBridgeWindowChild, 0 ) \ - SYSCALL_ENTRY( 0x1537, NtUserSetBrokeredForeground, 0 ) \ - SYSCALL_ENTRY( 0x1538, NtUserSetCalibrationData, 0 ) \ - SYSCALL_ENTRY( 0x1539, NtUserSetCancelRotationDelayHintWindow, 0 ) \ - SYSCALL_ENTRY( 0x153a, NtUserSetCapture, 8 ) \ - SYSCALL_ENTRY( 0x153b, NtUserSetCaretBlinkTime, 8 ) \ - SYSCALL_ENTRY( 0x153c, NtUserSetCaretPos, 16 ) \ - SYSCALL_ENTRY( 0x153d, NtUserSetChildWindowNoActivate, 0 ) \ - SYSCALL_ENTRY( 0x153e, NtUserSetClassLong, 32 ) \ - SYSCALL_ENTRY( 0x153f, NtUserSetClassLongPtr, 32 ) \ - SYSCALL_ENTRY( 0x1540, NtUserSetClassWord, 24 ) \ - SYSCALL_ENTRY( 0x1541, NtUserSetClipboardData, 24 ) \ - SYSCALL_ENTRY( 0x1542, NtUserSetClipboardViewer, 8 ) \ - SYSCALL_ENTRY( 0x1543, NtUserSetCoreWindow, 0 ) \ - SYSCALL_ENTRY( 0x1544, NtUserSetCoreWindowPartner, 0 ) \ - SYSCALL_ENTRY( 0x1545, NtUserSetCoveredWindowStates, 0 ) \ - SYSCALL_ENTRY( 0x1546, NtUserSetCursor, 8 ) \ - SYSCALL_ENTRY( 0x1547, NtUserSetCursorContents, 0 ) \ - SYSCALL_ENTRY( 0x1548, NtUserSetCursorIconData, 32 ) \ - SYSCALL_ENTRY( 0x1549, NtUserSetCursorIconDataEx, 0 ) \ - SYSCALL_ENTRY( 0x154a, NtUserSetCursorPos, 16 ) \ - SYSCALL_ENTRY( 0x154b, NtUserSetDesktopColorTransform, 0 ) \ - SYSCALL_ENTRY( 0x154c, NtUserSetDesktopVisualInputSink, 0 ) \ - SYSCALL_ENTRY( 0x154d, NtUserSetDialogControlDpiChangeBehavior, 0 ) \ - SYSCALL_ENTRY( 0x154e, NtUserSetDialogPointer, 0 ) \ - SYSCALL_ENTRY( 0x154f, NtUserSetDialogSystemMenu, 0 ) \ - SYSCALL_ENTRY( 0x1550, NtUserSetDisplayAutoRotationPreferences, 0 ) \ - SYSCALL_ENTRY( 0x1551, NtUserSetDisplayConfig, 0 ) \ - SYSCALL_ENTRY( 0x1552, NtUserSetDisplayMapping, 0 ) \ - SYSCALL_ENTRY( 0x1553, NtUserSetDoubleClickTime, 0 ) \ - SYSCALL_ENTRY( 0x1554, NtUserSetDpiForWindow, 0 ) \ - SYSCALL_ENTRY( 0x1555, NtUserSetFallbackForeground, 0 ) \ - SYSCALL_ENTRY( 0x1556, NtUserSetFeatureReportResponse, 0 ) \ - SYSCALL_ENTRY( 0x1557, NtUserSetFocus, 8 ) \ - SYSCALL_ENTRY( 0x1558, NtUserSetForegroundRedirectionForActivationObject, 0 ) \ - SYSCALL_ENTRY( 0x1559, NtUserSetForegroundWindow, 8 ) \ - SYSCALL_ENTRY( 0x155a, NtUserSetForegroundWindowForApplication, 0 ) \ - SYSCALL_ENTRY( 0x155b, NtUserSetFullscreenMagnifierOffsetsDWMUpdated, 0 ) \ - SYSCALL_ENTRY( 0x155c, NtUserSetGestureConfig, 0 ) \ - SYSCALL_ENTRY( 0x155d, NtUserSetImeHotKey, 0 ) \ - SYSCALL_ENTRY( 0x155e, NtUserSetImeInfoEx, 0 ) \ - SYSCALL_ENTRY( 0x155f, NtUserSetImeOwnerWindow, 0 ) \ - SYSCALL_ENTRY( 0x1560, NtUserSetInformationThread, 0 ) \ - SYSCALL_ENTRY( 0x1561, NtUserSetInputServiceState, 0 ) \ - SYSCALL_ENTRY( 0x1562, NtUserSetInteractiveControlFocus, 0 ) \ - SYSCALL_ENTRY( 0x1563, NtUserSetInteractiveCtrlRotationAngle, 0 ) \ - SYSCALL_ENTRY( 0x1564, NtUserSetInternalWindowPos, 32 ) \ - SYSCALL_ENTRY( 0x1565, NtUserSetKeyboardState, 8 ) \ - SYSCALL_ENTRY( 0x1566, NtUserSetLayeredWindowAttributes, 32 ) \ - SYSCALL_ENTRY( 0x1567, NtUserSetMagnificationDesktopMagnifierOffsetsDWMUpdated, 0 ) \ - SYSCALL_ENTRY( 0x1568, NtUserSetManipulationInputTarget, 0 ) \ - SYSCALL_ENTRY( 0x1569, NtUserSetMenu, 16 ) \ - SYSCALL_ENTRY( 0x156a, NtUserSetMenuContextHelpId, 16 ) \ - SYSCALL_ENTRY( 0x156b, NtUserSetMenuDefaultItem, 24 ) \ - SYSCALL_ENTRY( 0x156c, NtUserSetMenuFlagRtoL, 0 ) \ - SYSCALL_ENTRY( 0x156d, NtUserSetMessageExtraInfo, 8 ) \ - SYSCALL_ENTRY( 0x156e, NtUserSetMirrorRendering, 0 ) \ - SYSCALL_ENTRY( 0x156f, NtUserSetModernAppWindow, 0 ) \ - SYSCALL_ENTRY( 0x1570, NtUserSetMonitorWorkArea, 0 ) \ - SYSCALL_ENTRY( 0x1571, NtUserSetMouseInputRateLimitingTimer, 0 ) \ - SYSCALL_ENTRY( 0x1572, NtUserSetMsgBox, 0 ) \ - SYSCALL_ENTRY( 0x1573, NtUserSetObjectInformation, 32 ) \ - SYSCALL_ENTRY( 0x1574, NtUserSetParent, 16 ) \ - SYSCALL_ENTRY( 0x1575, NtUserSetPrecisionTouchPadConfiguration, 0 ) \ - SYSCALL_ENTRY( 0x1576, NtUserSetProcessDefaultLayout, 8 ) \ - SYSCALL_ENTRY( 0x1577, NtUserSetProcessDpiAwarenessContext, 16 ) \ - SYSCALL_ENTRY( 0x1578, NtUserSetProcessInteractionFlags, 0 ) \ - SYSCALL_ENTRY( 0x1579, NtUserSetProcessLaunchForegroundPolicy, 0 ) \ - SYSCALL_ENTRY( 0x157a, NtUserSetProcessMousewheelRoutingMode, 0 ) \ - SYSCALL_ENTRY( 0x157b, NtUserSetProcessRestrictionExemption, 0 ) \ - SYSCALL_ENTRY( 0x157c, NtUserSetProcessUIAccessZorder, 0 ) \ - SYSCALL_ENTRY( 0x157d, NtUserSetProcessWindowStation, 8 ) \ - SYSCALL_ENTRY( 0x157e, NtUserSetProgmanWindow, 8 ) \ - SYSCALL_ENTRY( 0x157f, NtUserSetProp, 24 ) \ - SYSCALL_ENTRY( 0x1580, NtUserSetProp2, 0 ) \ - SYSCALL_ENTRY( 0x1581, NtUserSetScrollInfo, 32 ) \ - SYSCALL_ENTRY( 0x1582, NtUserSetSensorPresence, 0 ) \ - SYSCALL_ENTRY( 0x1583, NtUserSetSharedWindowData, 0 ) \ - SYSCALL_ENTRY( 0x1584, NtUserSetShellChangeNotifyHWND, 0 ) \ - SYSCALL_ENTRY( 0x1585, NtUserSetShellWindowEx, 16 ) \ - SYSCALL_ENTRY( 0x1586, NtUserSetSysColors, 24 ) \ - SYSCALL_ENTRY( 0x1587, NtUserSetSysMenu, 0 ) \ - SYSCALL_ENTRY( 0x1588, NtUserSetSystemContentRects, 0 ) \ - SYSCALL_ENTRY( 0x1589, NtUserSetSystemCursor, 0 ) \ - SYSCALL_ENTRY( 0x158a, NtUserSetSystemMenu, 16 ) \ - SYSCALL_ENTRY( 0x158b, NtUserSetSystemTimer, 24 ) \ - SYSCALL_ENTRY( 0x158c, NtUserSetTSFEventState, 0 ) \ - SYSCALL_ENTRY( 0x158d, NtUserSetTargetForResourceBrokering, 0 ) \ - SYSCALL_ENTRY( 0x158e, NtUserSetTaskmanWindow, 8 ) \ - SYSCALL_ENTRY( 0x158f, NtUserSetThreadDesktop, 8 ) \ - SYSCALL_ENTRY( 0x1590, NtUserSetThreadInputBlocked, 0 ) \ - SYSCALL_ENTRY( 0x1591, NtUserSetThreadLayoutHandles, 0 ) \ - SYSCALL_ENTRY( 0x1592, NtUserSetThreadQueueMergeSetting, 0 ) \ - SYSCALL_ENTRY( 0x1593, NtUserSetThreadState, 0 ) \ - SYSCALL_ENTRY( 0x1594, NtUserSetTimer, 40 ) \ - SYSCALL_ENTRY( 0x1595, NtUserSetUserObjectCapability, 0 ) \ - SYSCALL_ENTRY( 0x1596, NtUserSetVisible, 0 ) \ - SYSCALL_ENTRY( 0x1597, NtUserSetWaitForQueueAttach, 0 ) \ - SYSCALL_ENTRY( 0x1598, NtUserSetWatermarkStrings, 0 ) \ - SYSCALL_ENTRY( 0x1599, NtUserSetWinEventHook, 64 ) \ - SYSCALL_ENTRY( 0x159a, NtUserSetWindowArrangement, 0 ) \ - SYSCALL_ENTRY( 0x159b, NtUserSetWindowBand, 0 ) \ - SYSCALL_ENTRY( 0x159c, NtUserSetWindowCompositionAttribute, 0 ) \ - SYSCALL_ENTRY( 0x159d, NtUserSetWindowCompositionTransition, 0 ) \ - SYSCALL_ENTRY( 0x159e, NtUserSetWindowContextHelpId, 16 ) \ - SYSCALL_ENTRY( 0x159f, NtUserSetWindowDisplayAffinity, 0 ) \ - SYSCALL_ENTRY( 0x15a0, NtUserSetWindowFNID, 16 ) \ - SYSCALL_ENTRY( 0x15a1, NtUserSetWindowFeedbackSetting, 0 ) \ - SYSCALL_ENTRY( 0x15a2, NtUserSetWindowGroup, 0 ) \ - SYSCALL_ENTRY( 0x15a3, NtUserSetWindowLong, 32 ) \ - SYSCALL_ENTRY( 0x15a4, NtUserSetWindowLongPtr, 32 ) \ - SYSCALL_ENTRY( 0x15a5, NtUserSetWindowMessageCapability, 0 ) \ - SYSCALL_ENTRY( 0x15a6, NtUserSetWindowPlacement, 16 ) \ - SYSCALL_ENTRY( 0x15a7, NtUserSetWindowPos, 56 ) \ - SYSCALL_ENTRY( 0x15a8, NtUserSetWindowRgn, 24 ) \ - SYSCALL_ENTRY( 0x15a9, NtUserSetWindowRgnEx, 0 ) \ - SYSCALL_ENTRY( 0x15aa, NtUserSetWindowShowState, 0 ) \ - SYSCALL_ENTRY( 0x15ab, NtUserSetWindowState, 0 ) \ - SYSCALL_ENTRY( 0x15ac, NtUserSetWindowStationUser, 0 ) \ - SYSCALL_ENTRY( 0x15ad, NtUserSetWindowWord, 24 ) \ - SYSCALL_ENTRY( 0x15ae, NtUserSetWindowsHookAW, 0 ) \ - SYSCALL_ENTRY( 0x15af, NtUserSetWindowsHookEx, 48 ) \ - SYSCALL_ENTRY( 0x15b0, NtUserShellForegroundBoostProcess, 0 ) \ - SYSCALL_ENTRY( 0x15b1, NtUserShellHandwritingDelegateInput, 0 ) \ - SYSCALL_ENTRY( 0x15b2, NtUserShellHandwritingHandleDelegatedInput, 0 ) \ - SYSCALL_ENTRY( 0x15b3, NtUserShellHandwritingUndelegateInput, 0 ) \ - SYSCALL_ENTRY( 0x15b4, NtUserShellMigrateWindow, 0 ) \ - SYSCALL_ENTRY( 0x15b5, NtUserShellRegisterHotKey, 0 ) \ - SYSCALL_ENTRY( 0x15b6, NtUserShellSetWindowPos, 0 ) \ - SYSCALL_ENTRY( 0x15b7, NtUserShowCaret, 8 ) \ - SYSCALL_ENTRY( 0x15b8, NtUserShowCursor, 8 ) \ - SYSCALL_ENTRY( 0x15b9, NtUserShowOwnedPopups, 16 ) \ - SYSCALL_ENTRY( 0x15ba, NtUserShowScrollBar, 24 ) \ - SYSCALL_ENTRY( 0x15bb, NtUserShowStartGlass, 0 ) \ - SYSCALL_ENTRY( 0x15bc, NtUserShowSystemCursor, 0 ) \ - SYSCALL_ENTRY( 0x15bd, NtUserShowWindow, 16 ) \ - SYSCALL_ENTRY( 0x15be, NtUserShowWindowAsync, 16 ) \ - SYSCALL_ENTRY( 0x15bf, NtUserShutdownBlockReasonCreate, 0 ) \ - SYSCALL_ENTRY( 0x15c0, NtUserShutdownBlockReasonQuery, 0 ) \ - SYSCALL_ENTRY( 0x15c1, NtUserShutdownReasonDestroy, 0 ) \ - SYSCALL_ENTRY( 0x15c2, NtUserSignalRedirectionStartComplete, 0 ) \ - SYSCALL_ENTRY( 0x15c3, NtUserSlicerControl, 0 ) \ - SYSCALL_ENTRY( 0x15c4, NtUserSoundSentry, 0 ) \ - SYSCALL_ENTRY( 0x15c5, NtUserStopAndEndInertia, 0 ) \ - SYSCALL_ENTRY( 0x15c6, NtUserSuppressWindowActions, 0 ) \ - SYSCALL_ENTRY( 0x15c7, NtUserSuppressWindowDisplayChange, 0 ) \ - SYSCALL_ENTRY( 0x15c8, NtUserSwapMouseButton, 0 ) \ - SYSCALL_ENTRY( 0x15c9, NtUserSwitchDesktop, 8 ) \ - SYSCALL_ENTRY( 0x15ca, NtUserSwitchToThisWindow, 0 ) \ - SYSCALL_ENTRY( 0x15cb, NtUserSystemParametersInfo, 32 ) \ - SYSCALL_ENTRY( 0x15cc, NtUserSystemParametersInfoForDpi, 40 ) \ - SYSCALL_ENTRY( 0x15cd, NtUserTestForInteractiveUser, 0 ) \ - SYSCALL_ENTRY( 0x15ce, NtUserThreadMessageQueueAttached, 0 ) \ - SYSCALL_ENTRY( 0x15cf, NtUserThunkedMenuInfo, 16 ) \ - SYSCALL_ENTRY( 0x15d0, NtUserThunkedMenuItemInfo, 48 ) \ - SYSCALL_ENTRY( 0x15d1, NtUserToUnicodeEx, 56 ) \ - SYSCALL_ENTRY( 0x15d2, NtUserTraceLoggingSendMixedModeTelemetry, 0 ) \ - SYSCALL_ENTRY( 0x15d3, NtUserTrackMouseEvent, 8 ) \ - SYSCALL_ENTRY( 0x15d4, NtUserTrackPopupMenuEx, 48 ) \ - SYSCALL_ENTRY( 0x15d5, NtUserTransformPoint, 0 ) \ - SYSCALL_ENTRY( 0x15d6, NtUserTransformRect, 0 ) \ - SYSCALL_ENTRY( 0x15d7, NtUserTranslateAccelerator, 24 ) \ - SYSCALL_ENTRY( 0x15d8, NtUserTranslateMessage, 16 ) \ - SYSCALL_ENTRY( 0x15d9, NtUserUndelegateInput, 0 ) \ - SYSCALL_ENTRY( 0x15da, NtUserUnhookWinEvent, 8 ) \ - SYSCALL_ENTRY( 0x15db, NtUserUnhookWindowsHook, 16 ) \ - SYSCALL_ENTRY( 0x15dc, NtUserUnhookWindowsHookEx, 8 ) \ - SYSCALL_ENTRY( 0x15dd, NtUserUnloadKeyboardLayout, 0 ) \ - SYSCALL_ENTRY( 0x15de, NtUserUnlockWindowStation, 0 ) \ - SYSCALL_ENTRY( 0x15df, NtUserUnregisterClass, 24 ) \ - SYSCALL_ENTRY( 0x15e0, NtUserUnregisterHotKey, 16 ) \ - SYSCALL_ENTRY( 0x15e1, NtUserUnregisterSessionPort, 0 ) \ - SYSCALL_ENTRY( 0x15e2, NtUserUnregisterUserApiHook, 0 ) \ - SYSCALL_ENTRY( 0x15e3, NtUserUpdateClientRect, 0 ) \ - SYSCALL_ENTRY( 0x15e4, NtUserUpdateDefaultDesktopThumbnail, 0 ) \ - SYSCALL_ENTRY( 0x15e5, NtUserUpdateInputContext, 24 ) \ - SYSCALL_ENTRY( 0x15e6, NtUserUpdateInstance, 0 ) \ - SYSCALL_ENTRY( 0x15e7, NtUserUpdateLayeredWindow, 80 ) \ - SYSCALL_ENTRY( 0x15e8, NtUserUpdatePerUserImmEnabling, 0 ) \ - SYSCALL_ENTRY( 0x15e9, NtUserUpdatePerUserSystemParameters, 0 ) \ - SYSCALL_ENTRY( 0x15ea, NtUserUpdateWindow, 0 ) \ - SYSCALL_ENTRY( 0x15eb, NtUserUpdateWindowInputSinkHints, 0 ) \ - SYSCALL_ENTRY( 0x15ec, NtUserUpdateWindowTrackingInfo, 0 ) \ - SYSCALL_ENTRY( 0x15ed, NtUserUpdateWindows, 0 ) \ - SYSCALL_ENTRY( 0x15ee, NtUserUserHandleGrantAccess, 0 ) \ - SYSCALL_ENTRY( 0x15ef, NtUserUserPowerCalloutWorker, 0 ) \ - SYSCALL_ENTRY( 0x15f0, NtUserValidateHandleSecure, 0 ) \ - SYSCALL_ENTRY( 0x15f1, NtUserValidateRect, 16 ) \ - SYSCALL_ENTRY( 0x15f2, NtUserValidateRgn, 16 ) \ - SYSCALL_ENTRY( 0x15f3, NtUserValidateTimerCallback, 0 ) \ - SYSCALL_ENTRY( 0x15f4, NtUserVkKeyScanEx, 16 ) \ - SYSCALL_ENTRY( 0x15f5, NtUserWOWCleanup, 0 ) \ - SYSCALL_ENTRY( 0x15f6, NtUserWOWModuleUnload, 0 ) \ - SYSCALL_ENTRY( 0x15f7, NtUserWaitAvailableMessageEx, 0 ) \ - SYSCALL_ENTRY( 0x15f8, NtUserWaitForInputIdle, 24 ) \ - SYSCALL_ENTRY( 0x15f9, NtUserWaitForMsgAndEvent, 0 ) \ - SYSCALL_ENTRY( 0x15fa, NtUserWaitForRedirectionStartComplete, 0 ) \ - SYSCALL_ENTRY( 0x15fb, NtUserWaitMessage, 0 ) \ - SYSCALL_ENTRY( 0x15fc, NtUserWakeRITForShutdown, 0 ) \ - SYSCALL_ENTRY( 0x15fd, NtUserWindowFromDC, 8 ) \ - SYSCALL_ENTRY( 0x15fe, NtUserWindowFromPhysicalPoint, 0 ) \ - SYSCALL_ENTRY( 0x15ff, NtUserWindowFromPoint, 16 ) \ - SYSCALL_ENTRY( 0x1600, NtUserYieldTask, 0 ) \ - SYSCALL_ENTRY( 0x1601, NtUserZapActiveAndFocus, 0 ) \ - SYSCALL_ENTRY( 0x1602, NtValidateCompositionSurfaceHandle, 0 ) \ - SYSCALL_ENTRY( 0x1603, NtVisualCaptureBits, 0 ) + SYSCALL_ENTRY( 0x1353, NtUserCloseGestureInfoHandle, 8 ) \ + SYSCALL_ENTRY( 0x1354, NtUserCloseTouchInputHandle, 8 ) \ + SYSCALL_ENTRY( 0x1355, NtUserCloseWindowStation, 8 ) \ + SYSCALL_ENTRY( 0x1356, NtUserCompositionInputSinkLuidFromPoint, 0 ) \ + SYSCALL_ENTRY( 0x1357, NtUserCompositionInputSinkViewInstanceIdFromPoint, 0 ) \ + SYSCALL_ENTRY( 0x1358, NtUserConfigureActivationObject, 0 ) \ + SYSCALL_ENTRY( 0x1359, NtUserConfirmResizeCommit, 0 ) \ + SYSCALL_ENTRY( 0x135a, NtUserConsoleControl, 0 ) \ + SYSCALL_ENTRY( 0x135b, NtUserConvertMemHandle, 0 ) \ + SYSCALL_ENTRY( 0x135c, NtUserCopyAcceleratorTable, 24 ) \ + SYSCALL_ENTRY( 0x135d, NtUserCountClipboardFormats, 0 ) \ + SYSCALL_ENTRY( 0x135e, NtUserCreateAcceleratorTable, 16 ) \ + SYSCALL_ENTRY( 0x135f, NtUserCreateActivationGroup, 0 ) \ + SYSCALL_ENTRY( 0x1360, NtUserCreateActivationObject, 0 ) \ + SYSCALL_ENTRY( 0x1361, NtUserCreateBaseWindow, 0 ) \ + SYSCALL_ENTRY( 0x1362, NtUserCreateCaret, 32 ) \ + SYSCALL_ENTRY( 0x1363, NtUserCreateDCompositionHwndTarget, 0 ) \ + SYSCALL_ENTRY( 0x1364, NtUserCreateDesktopEx, 48 ) \ + SYSCALL_ENTRY( 0x1365, NtUserCreateEmptyCursorObject, 0 ) \ + SYSCALL_ENTRY( 0x1366, NtUserCreateInputContext, 8 ) \ + SYSCALL_ENTRY( 0x1367, NtUserCreateLocalMemHandle, 0 ) \ + SYSCALL_ENTRY( 0x1368, NtUserCreateMenu, 0 ) \ + SYSCALL_ENTRY( 0x1369, NtUserCreatePalmRejectionDelayZone, 0 ) \ + SYSCALL_ENTRY( 0x136a, NtUserCreatePopupMenu, 0 ) \ + SYSCALL_ENTRY( 0x136b, NtUserCreateSyntheticPointerDevice2, 0 ) \ + SYSCALL_ENTRY( 0x136c, NtUserCreateSystemThreads, 0 ) \ + SYSCALL_ENTRY( 0x136d, NtUserCreateWindowEx, 136 ) \ + SYSCALL_ENTRY( 0x136e, NtUserCreateWindowGroup, 0 ) \ + SYSCALL_ENTRY( 0x136f, NtUserCreateWindowStation, 56 ) \ + SYSCALL_ENTRY( 0x1370, NtUserCsDdeUninitialize, 0 ) \ + SYSCALL_ENTRY( 0x1371, NtUserCtxDisplayIOCtl, 0 ) \ + SYSCALL_ENTRY( 0x1372, NtUserDWP_GetEnabledPopupOffset, 0 ) \ + SYSCALL_ENTRY( 0x1373, NtUserDdeInitialize, 0 ) \ + SYSCALL_ENTRY( 0x1374, NtUserDefSetText, 0 ) \ + SYSCALL_ENTRY( 0x1375, NtUserDeferWindowDpiChanges, 0 ) \ + SYSCALL_ENTRY( 0x1376, NtUserDeferWindowPosAndBand, 80 ) \ + SYSCALL_ENTRY( 0x1377, NtUserDeferredDesktopRotation, 0 ) \ + SYSCALL_ENTRY( 0x1378, NtUserDelegateCapturePointers, 0 ) \ + SYSCALL_ENTRY( 0x1379, NtUserDelegateInput, 0 ) \ + SYSCALL_ENTRY( 0x137a, NtUserDeleteMenu, 24 ) \ + SYSCALL_ENTRY( 0x137b, NtUserDeleteWindowGroup, 0 ) \ + SYSCALL_ENTRY( 0x137c, NtUserDeregisterShellHookWindow, 0 ) \ + SYSCALL_ENTRY( 0x137d, NtUserDestroyAcceleratorTable, 8 ) \ + SYSCALL_ENTRY( 0x137e, NtUserDestroyActivationGroup, 0 ) \ + SYSCALL_ENTRY( 0x137f, NtUserDestroyActivationObject, 0 ) \ + SYSCALL_ENTRY( 0x1380, NtUserDestroyCaret, 0 ) \ + SYSCALL_ENTRY( 0x1381, NtUserDestroyCursor, 16 ) \ + SYSCALL_ENTRY( 0x1382, NtUserDestroyDCompositionHwndTarget, 0 ) \ + SYSCALL_ENTRY( 0x1383, NtUserDestroyInputContext, 8 ) \ + SYSCALL_ENTRY( 0x1384, NtUserDestroyMenu, 8 ) \ + SYSCALL_ENTRY( 0x1385, NtUserDestroyPalmRejectionDelayZone, 0 ) \ + SYSCALL_ENTRY( 0x1386, NtUserDestroyWindow, 8 ) \ + SYSCALL_ENTRY( 0x1387, NtUserDirectedYield, 0 ) \ + SYSCALL_ENTRY( 0x1388, NtUserDisableImmersiveOwner, 0 ) \ + SYSCALL_ENTRY( 0x1389, NtUserDisableProcessWindowFiltering, 0 ) \ + SYSCALL_ENTRY( 0x138a, NtUserDisableProcessWindowsGhosting, 0 ) \ + SYSCALL_ENTRY( 0x138b, NtUserDisableThreadIme, 8 ) \ + SYSCALL_ENTRY( 0x138c, NtUserDiscardPointerFrameMessages, 0 ) \ + SYSCALL_ENTRY( 0x138d, NtUserDispatchMessage, 8 ) \ + SYSCALL_ENTRY( 0x138e, NtUserDisplayConfigGetDeviceInfo, 8 ) \ + SYSCALL_ENTRY( 0x138f, NtUserDisplayConfigSetDeviceInfo, 0 ) \ + SYSCALL_ENTRY( 0x1390, NtUserDoInitMessagePumpHook, 0 ) \ + SYSCALL_ENTRY( 0x1391, NtUserDoSoundConnect, 0 ) \ + SYSCALL_ENTRY( 0x1392, NtUserDoSoundDisconnect, 0 ) \ + SYSCALL_ENTRY( 0x1393, NtUserDoUninitMessagePumpHook, 0 ) \ + SYSCALL_ENTRY( 0x1394, NtUserDownlevelTouchpad, 0 ) \ + SYSCALL_ENTRY( 0x1395, NtUserDragDetect, 24 ) \ + SYSCALL_ENTRY( 0x1396, NtUserDragObject, 40 ) \ + SYSCALL_ENTRY( 0x1397, NtUserDrainThreadCoreMessagingCompletions, 0 ) \ + SYSCALL_ENTRY( 0x1398, NtUserDrainThreadCoreMessagingCompletions2, 0 ) \ + SYSCALL_ENTRY( 0x1399, NtUserDrawAnimatedRects, 0 ) \ + SYSCALL_ENTRY( 0x139a, NtUserDrawCaption, 0 ) \ + SYSCALL_ENTRY( 0x139b, NtUserDrawCaptionTemp, 56 ) \ + SYSCALL_ENTRY( 0x139c, NtUserDrawIconEx, 72 ) \ + SYSCALL_ENTRY( 0x139d, NtUserDrawMenuBar, 8 ) \ + SYSCALL_ENTRY( 0x139e, NtUserDrawMenuBarTemp, 40 ) \ + SYSCALL_ENTRY( 0x139f, NtUserDwmGetRemoteSessionOcclusionEvent, 0 ) \ + SYSCALL_ENTRY( 0x13a0, NtUserDwmGetRemoteSessionOcclusionState, 0 ) \ + SYSCALL_ENTRY( 0x13a1, NtUserDwmKernelShutdown, 0 ) \ + SYSCALL_ENTRY( 0x13a2, NtUserDwmKernelStartup, 0 ) \ + SYSCALL_ENTRY( 0x13a3, NtUserDwmLockScreenUpdates, 0 ) \ + SYSCALL_ENTRY( 0x13a4, NtUserDwmValidateWindow, 0 ) \ + SYSCALL_ENTRY( 0x13a5, NtUserDwmWindowNotificationsEnabled, 0 ) \ + SYSCALL_ENTRY( 0x13a6, NtUserEmptyClipboard, 0 ) \ + SYSCALL_ENTRY( 0x13a7, NtUserEnableChildWindowDpiMessage, 0 ) \ + SYSCALL_ENTRY( 0x13a8, NtUserEnableIAMAccess, 0 ) \ + SYSCALL_ENTRY( 0x13a9, NtUserEnableMenuItem, 24 ) \ + SYSCALL_ENTRY( 0x13aa, NtUserEnableModernAppWindowKeyboardIntercept, 0 ) \ + SYSCALL_ENTRY( 0x13ab, NtUserEnableMouseInPointer, 8 ) \ + SYSCALL_ENTRY( 0x13ac, NtUserEnableMouseInPointerForThread, 0 ) \ + SYSCALL_ENTRY( 0x13ad, NtUserEnableMouseInPointerForWindow, 0 ) \ + SYSCALL_ENTRY( 0x13ae, NtUserEnableMouseInputForCursorSuppression, 0 ) \ + SYSCALL_ENTRY( 0x13af, NtUserEnableNonClientDpiScaling, 0 ) \ + SYSCALL_ENTRY( 0x13b0, NtUserEnablePerMonitorMenuScaling, 0 ) \ + SYSCALL_ENTRY( 0x13b1, NtUserEnableResizeLayoutSynchronization, 0 ) \ + SYSCALL_ENTRY( 0x13b2, NtUserEnableScrollBar, 24 ) \ + SYSCALL_ENTRY( 0x13b3, NtUserEnableSessionForMMCSS, 0 ) \ + SYSCALL_ENTRY( 0x13b4, NtUserEnableShellWindowManagementBehavior, 0 ) \ + SYSCALL_ENTRY( 0x13b5, NtUserEnableSoftwareCursorForScreenCapture, 0 ) \ + SYSCALL_ENTRY( 0x13b6, NtUserEnableTouchPad, 0 ) \ + SYSCALL_ENTRY( 0x13b7, NtUserEnableWindow, 16 ) \ + SYSCALL_ENTRY( 0x13b8, NtUserEnableWindowGDIScaledDpiMessage, 0 ) \ + SYSCALL_ENTRY( 0x13b9, NtUserEnableWindowGroupPolicy, 0 ) \ + SYSCALL_ENTRY( 0x13ba, NtUserEnableWindowResizeOptimization, 0 ) \ + SYSCALL_ENTRY( 0x13bb, NtUserEnableWindowShellWindowManagementBehavior, 0 ) \ + SYSCALL_ENTRY( 0x13bc, NtUserEndDeferWindowPosEx, 16 ) \ + SYSCALL_ENTRY( 0x13bd, NtUserEndMenu, 0 ) \ + SYSCALL_ENTRY( 0x13be, NtUserEndPaint, 16 ) \ + SYSCALL_ENTRY( 0x13bf, NtUserEnsureDpiDepSysMetCacheForPlateau, 0 ) \ + SYSCALL_ENTRY( 0x13c0, NtUserEnumClipboardFormats, 8 ) \ + SYSCALL_ENTRY( 0x13c1, NtUserEnumDisplayDevices, 32 ) \ + SYSCALL_ENTRY( 0x13c2, NtUserEnumDisplayMonitors, 32 ) \ + SYSCALL_ENTRY( 0x13c3, NtUserEnumDisplaySettings, 32 ) \ + SYSCALL_ENTRY( 0x13c4, NtUserEvent, 0 ) \ + SYSCALL_ENTRY( 0x13c5, NtUserExcludeUpdateRgn, 16 ) \ + SYSCALL_ENTRY( 0x13c6, NtUserFillWindow, 0 ) \ + SYSCALL_ENTRY( 0x13c7, NtUserFindExistingCursorIcon, 24 ) \ + SYSCALL_ENTRY( 0x13c8, NtUserFindWindowEx, 40 ) \ + SYSCALL_ENTRY( 0x13c9, NtUserFlashWindowEx, 8 ) \ + SYSCALL_ENTRY( 0x13ca, NtUserForceEnableNumpadTranslation, 0 ) \ + SYSCALL_ENTRY( 0x13cb, NtUserForceWindowToDpiForTest, 0 ) \ + SYSCALL_ENTRY( 0x13cc, NtUserFrostCrashedWindow, 0 ) \ + SYSCALL_ENTRY( 0x13cd, NtUserFunctionalizeDisplayConfig, 0 ) \ + SYSCALL_ENTRY( 0x13ce, NtUserGetActiveProcessesDpis, 0 ) \ + SYSCALL_ENTRY( 0x13cf, NtUserGetAltTabInfo, 0 ) \ + SYSCALL_ENTRY( 0x13d0, NtUserGetAncestor, 16 ) \ + SYSCALL_ENTRY( 0x13d1, NtUserGetAppImeLevel, 0 ) \ + SYSCALL_ENTRY( 0x13d2, NtUserGetAsyncKeyState, 8 ) \ + SYSCALL_ENTRY( 0x13d3, NtUserGetAtomName, 16 ) \ + SYSCALL_ENTRY( 0x13d4, NtUserGetAutoRotationState, 0 ) \ + SYSCALL_ENTRY( 0x13d5, NtUserGetCIMSSM, 0 ) \ + SYSCALL_ENTRY( 0x13d6, NtUserGetCPD, 0 ) \ + SYSCALL_ENTRY( 0x13d7, NtUserGetCaretBlinkTime, 0 ) \ + SYSCALL_ENTRY( 0x13d8, NtUserGetCaretPos, 8 ) \ + SYSCALL_ENTRY( 0x13d9, NtUserGetClassIcoCur, 0 ) \ + SYSCALL_ENTRY( 0x13da, NtUserGetClassInfoEx, 40 ) \ + SYSCALL_ENTRY( 0x13db, NtUserGetClassName, 24 ) \ + SYSCALL_ENTRY( 0x13dc, NtUserGetClipCursor, 8 ) \ + SYSCALL_ENTRY( 0x13dd, NtUserGetClipboardAccessToken, 0 ) \ + SYSCALL_ENTRY( 0x13de, NtUserGetClipboardData, 16 ) \ + SYSCALL_ENTRY( 0x13df, NtUserGetClipboardFormatName, 24 ) \ + SYSCALL_ENTRY( 0x13e0, NtUserGetClipboardMetadata, 0 ) \ + SYSCALL_ENTRY( 0x13e1, NtUserGetClipboardOwner, 0 ) \ + SYSCALL_ENTRY( 0x13e2, NtUserGetClipboardSequenceNumber, 0 ) \ + SYSCALL_ENTRY( 0x13e3, NtUserGetClipboardViewer, 0 ) \ + SYSCALL_ENTRY( 0x13e4, NtUserGetComboBoxInfo, 0 ) \ + SYSCALL_ENTRY( 0x13e5, NtUserGetControlBrush, 0 ) \ + SYSCALL_ENTRY( 0x13e6, NtUserGetControlColor, 0 ) \ + SYSCALL_ENTRY( 0x13e7, NtUserGetCurrentDpiInfoForWindow, 0 ) \ + SYSCALL_ENTRY( 0x13e8, NtUserGetCurrentInputMessageSource, 8 ) \ + SYSCALL_ENTRY( 0x13e9, NtUserGetCursor, 0 ) \ + SYSCALL_ENTRY( 0x13ea, NtUserGetCursorFrameInfo, 32 ) \ + SYSCALL_ENTRY( 0x13eb, NtUserGetCursorInfo, 8 ) \ + SYSCALL_ENTRY( 0x13ec, NtUserGetCursorPos, 8 ) \ + SYSCALL_ENTRY( 0x13ed, NtUserGetDC, 8 ) \ + SYSCALL_ENTRY( 0x13ee, NtUserGetDCEx, 24 ) \ + SYSCALL_ENTRY( 0x13ef, NtUserGetDCompositionHwndBitmap, 0 ) \ + SYSCALL_ENTRY( 0x13f0, NtUserGetDManipHookInitFunction, 0 ) \ + SYSCALL_ENTRY( 0x13f1, NtUserGetDesktopID, 0 ) \ + SYSCALL_ENTRY( 0x13f2, NtUserGetDesktopVisualTransform, 0 ) \ + SYSCALL_ENTRY( 0x13f3, NtUserGetDeviceChangeInfo, 0 ) \ + SYSCALL_ENTRY( 0x13f4, NtUserGetDisplayAutoRotationPreferences, 0 ) \ + SYSCALL_ENTRY( 0x13f5, NtUserGetDisplayAutoRotationPreferencesByProcessId, 0 ) \ + SYSCALL_ENTRY( 0x13f6, NtUserGetDisplayConfigBufferSizes, 24 ) \ + SYSCALL_ENTRY( 0x13f7, NtUserGetDoubleClickTime, 0 ) \ + SYSCALL_ENTRY( 0x13f8, NtUserGetDpiForCurrentProcess, 0 ) \ + SYSCALL_ENTRY( 0x13f9, NtUserGetDpiForMonitor, 32 ) \ + SYSCALL_ENTRY( 0x13fa, NtUserGetDwmCursorShape, 0 ) \ + SYSCALL_ENTRY( 0x13fb, NtUserGetExtendedPointerDeviceProperty, 0 ) \ + SYSCALL_ENTRY( 0x13fc, NtUserGetForegroundWindow, 0 ) \ + SYSCALL_ENTRY( 0x13fd, NtUserGetGUIThreadInfo, 16 ) \ + SYSCALL_ENTRY( 0x13fe, NtUserGetGestureConfig, 48 ) \ + SYSCALL_ENTRY( 0x13ff, NtUserGetGestureExtArgs, 24 ) \ + SYSCALL_ENTRY( 0x1400, NtUserGetGestureInfo, 16 ) \ + SYSCALL_ENTRY( 0x1401, NtUserGetGuiResources, 0 ) \ + SYSCALL_ENTRY( 0x1402, NtUserGetHDevName, 0 ) \ + SYSCALL_ENTRY( 0x1403, NtUserGetHimetricScaleFactorFromPixelLocation, 0 ) \ + SYSCALL_ENTRY( 0x1404, NtUserGetIMEShowStatus, 0 ) \ + SYSCALL_ENTRY( 0x1405, NtUserGetIconInfo, 48 ) \ + SYSCALL_ENTRY( 0x1406, NtUserGetIconSize, 32 ) \ + SYSCALL_ENTRY( 0x1407, NtUserGetImeHotKey, 0 ) \ + SYSCALL_ENTRY( 0x1408, NtUserGetImeInfoEx, 0 ) \ + SYSCALL_ENTRY( 0x1409, NtUserGetInputContainerId, 0 ) \ + SYSCALL_ENTRY( 0x140a, NtUserGetInputDesktop, 0 ) \ + SYSCALL_ENTRY( 0x140b, NtUserGetInputEvent, 0 ) \ + SYSCALL_ENTRY( 0x140c, NtUserGetInputLocaleInfo, 0 ) \ + SYSCALL_ENTRY( 0x140d, NtUserGetInteractiveControlDeviceInfo, 0 ) \ + SYSCALL_ENTRY( 0x140e, NtUserGetInteractiveControlInfo, 0 ) \ + SYSCALL_ENTRY( 0x140f, NtUserGetInteractiveCtrlSupportedWaveforms, 0 ) \ + SYSCALL_ENTRY( 0x1410, NtUserGetInternalWindowPos, 24 ) \ + SYSCALL_ENTRY( 0x1411, NtUserGetKeyNameText, 24 ) \ + SYSCALL_ENTRY( 0x1412, NtUserGetKeyState, 8 ) \ + SYSCALL_ENTRY( 0x1413, NtUserGetKeyboardLayout, 8 ) \ + SYSCALL_ENTRY( 0x1414, NtUserGetKeyboardLayoutList, 16 ) \ + SYSCALL_ENTRY( 0x1415, NtUserGetKeyboardLayoutName, 8 ) \ + SYSCALL_ENTRY( 0x1416, NtUserGetKeyboardState, 8 ) \ + SYSCALL_ENTRY( 0x1417, NtUserGetKeyboardType, 0 ) \ + SYSCALL_ENTRY( 0x1418, NtUserGetLayeredWindowAttributes, 32 ) \ + SYSCALL_ENTRY( 0x1419, NtUserGetListBoxInfo, 0 ) \ + SYSCALL_ENTRY( 0x141a, NtUserGetMenuBarInfo, 32 ) \ + SYSCALL_ENTRY( 0x141b, NtUserGetMenuIndex, 0 ) \ + SYSCALL_ENTRY( 0x141c, NtUserGetMenuItemRect, 32 ) \ + SYSCALL_ENTRY( 0x141d, NtUserGetMessage, 32 ) \ + SYSCALL_ENTRY( 0x141e, NtUserGetMessagePos, 0 ) \ + SYSCALL_ENTRY( 0x141f, NtUserGetMinuserIdForBaseWindow, 0 ) \ + SYSCALL_ENTRY( 0x1420, NtUserGetModernAppWindow, 0 ) \ + SYSCALL_ENTRY( 0x1421, NtUserGetMouseMovePointsEx, 40 ) \ + SYSCALL_ENTRY( 0x1422, NtUserGetObjectInformation, 40 ) \ + SYSCALL_ENTRY( 0x1423, NtUserGetOemBitmapSize, 0 ) \ + SYSCALL_ENTRY( 0x1424, NtUserGetOpenClipboardWindow, 0 ) \ + SYSCALL_ENTRY( 0x1425, NtUserGetOwnerTransformedMonitorRect, 0 ) \ + SYSCALL_ENTRY( 0x1426, NtUserGetPhysicalDeviceRect, 0 ) \ + SYSCALL_ENTRY( 0x1427, NtUserGetPointerCursorId, 0 ) \ + SYSCALL_ENTRY( 0x1428, NtUserGetPointerDevice, 0 ) \ + SYSCALL_ENTRY( 0x1429, NtUserGetPointerDeviceCursors, 0 ) \ + SYSCALL_ENTRY( 0x142a, NtUserGetPointerDeviceInputSpace, 0 ) \ + SYSCALL_ENTRY( 0x142b, NtUserGetPointerDeviceOrientation, 0 ) \ + SYSCALL_ENTRY( 0x142c, NtUserGetPointerDeviceProperties, 0 ) \ + SYSCALL_ENTRY( 0x142d, NtUserGetPointerDeviceRects, 24 ) \ + SYSCALL_ENTRY( 0x142e, NtUserGetPointerDevices, 0 ) \ + SYSCALL_ENTRY( 0x142f, NtUserGetPointerFrameTimes, 0 ) \ + SYSCALL_ENTRY( 0x1430, NtUserGetPointerInfoList, 64 ) \ + SYSCALL_ENTRY( 0x1431, NtUserGetPointerInputTransform, 0 ) \ + SYSCALL_ENTRY( 0x1432, NtUserGetPointerProprietaryId, 0 ) \ + SYSCALL_ENTRY( 0x1433, NtUserGetPointerType, 16 ) \ + SYSCALL_ENTRY( 0x1434, NtUserGetPrecisionTouchPadConfiguration, 0 ) \ + SYSCALL_ENTRY( 0x1435, NtUserGetPriorityClipboardFormat, 16 ) \ + SYSCALL_ENTRY( 0x1436, NtUserGetProcessDefaultLayout, 8 ) \ + SYSCALL_ENTRY( 0x1437, NtUserGetProcessDpiAwarenessContext, 8 ) \ + SYSCALL_ENTRY( 0x1438, NtUserGetProcessUIContextInformation, 0 ) \ + SYSCALL_ENTRY( 0x1439, NtUserGetProcessWindowStation, 0 ) \ + SYSCALL_ENTRY( 0x143a, NtUserGetProp, 16 ) \ + SYSCALL_ENTRY( 0x143b, NtUserGetProp2, 0 ) \ + SYSCALL_ENTRY( 0x143c, NtUserGetQueueIocp, 0 ) \ + SYSCALL_ENTRY( 0x143d, NtUserGetQueueStatus, 8 ) \ + SYSCALL_ENTRY( 0x143e, NtUserGetQueueStatusReadonly, 0 ) \ + SYSCALL_ENTRY( 0x143f, NtUserGetRawInputBuffer, 24 ) \ + SYSCALL_ENTRY( 0x1440, NtUserGetRawInputData, 40 ) \ + SYSCALL_ENTRY( 0x1441, NtUserGetRawInputDeviceInfo, 32 ) \ + SYSCALL_ENTRY( 0x1442, NtUserGetRawInputDeviceList, 24 ) \ + SYSCALL_ENTRY( 0x1443, NtUserGetRawPointerDeviceData, 0 ) \ + SYSCALL_ENTRY( 0x1444, NtUserGetRegisteredRawInputDevices, 24 ) \ + SYSCALL_ENTRY( 0x1445, NtUserGetRequiredCursorSizes, 0 ) \ + SYSCALL_ENTRY( 0x1446, NtUserGetResizeDCompositionSynchronizationObject, 0 ) \ + SYSCALL_ENTRY( 0x1447, NtUserGetScrollBarInfo, 24 ) \ + SYSCALL_ENTRY( 0x1448, NtUserGetSendMessageReceiver, 0 ) \ + SYSCALL_ENTRY( 0x1449, NtUserGetSharedWindowData, 0 ) \ + SYSCALL_ENTRY( 0x144a, NtUserGetSuppressedWindowActions, 0 ) \ + SYSCALL_ENTRY( 0x144b, NtUserGetSysMenuOffset, 0 ) \ + SYSCALL_ENTRY( 0x144c, NtUserGetSystemContentRects, 0 ) \ + SYSCALL_ENTRY( 0x144d, NtUserGetSystemDpiForProcess, 8 ) \ + SYSCALL_ENTRY( 0x144e, NtUserGetSystemMenu, 16 ) \ + SYSCALL_ENTRY( 0x144f, NtUserGetThreadDesktop, 8 ) \ + SYSCALL_ENTRY( 0x1450, NtUserGetThreadState, 8 ) \ + SYSCALL_ENTRY( 0x1451, NtUserGetTitleBarInfo, 16 ) \ + SYSCALL_ENTRY( 0x1452, NtUserGetTopLevelWindow, 0 ) \ + SYSCALL_ENTRY( 0x1453, NtUserGetTouchInputInfo, 32 ) \ + SYSCALL_ENTRY( 0x1454, NtUserGetTouchValidationStatus, 0 ) \ + SYSCALL_ENTRY( 0x1455, NtUserGetUniformSpaceMapping, 0 ) \ + SYSCALL_ENTRY( 0x1456, NtUserGetUnpredictedMessagePos, 0 ) \ + SYSCALL_ENTRY( 0x1457, NtUserGetUpdateRect, 24 ) \ + SYSCALL_ENTRY( 0x1458, NtUserGetUpdateRgn, 24 ) \ + SYSCALL_ENTRY( 0x1459, NtUserGetUpdatedClipboardFormats, 24 ) \ + SYSCALL_ENTRY( 0x145a, NtUserGetWOWClass, 0 ) \ + SYSCALL_ENTRY( 0x145b, NtUserGetWinStationInfo, 0 ) \ + SYSCALL_ENTRY( 0x145c, NtUserGetWindowBand, 0 ) \ + SYSCALL_ENTRY( 0x145d, NtUserGetWindowCompositionAttribute, 0 ) \ + SYSCALL_ENTRY( 0x145e, NtUserGetWindowCompositionInfo, 0 ) \ + SYSCALL_ENTRY( 0x145f, NtUserGetWindowContextHelpId, 8 ) \ + SYSCALL_ENTRY( 0x1460, NtUserGetWindowDC, 8 ) \ + SYSCALL_ENTRY( 0x1461, NtUserGetWindowDisplayAffinity, 16 ) \ + SYSCALL_ENTRY( 0x1462, NtUserGetWindowFeedbackSetting, 0 ) \ + SYSCALL_ENTRY( 0x1463, NtUserGetWindowGroupId, 0 ) \ + SYSCALL_ENTRY( 0x1464, NtUserGetWindowMinimizeRect, 0 ) \ + SYSCALL_ENTRY( 0x1465, NtUserGetWindowPlacement, 16 ) \ + SYSCALL_ENTRY( 0x1466, NtUserGetWindowProcessHandle, 0 ) \ + SYSCALL_ENTRY( 0x1467, NtUserGetWindowRgnEx, 24 ) \ + SYSCALL_ENTRY( 0x1468, NtUserGetWindowThreadProcessId, 0 ) \ + SYSCALL_ENTRY( 0x1469, NtUserGetWindowTrackInfoAsync, 0 ) \ + SYSCALL_ENTRY( 0x146a, NtUserGhostWindowFromHungWindow, 0 ) \ + SYSCALL_ENTRY( 0x146b, NtUserHandleDelegatedInput, 0 ) \ + SYSCALL_ENTRY( 0x146c, NtUserHandleSystemThreadCreationFailure, 0 ) \ + SYSCALL_ENTRY( 0x146d, NtUserHardErrorControl, 0 ) \ + SYSCALL_ENTRY( 0x146e, NtUserHideCaret, 8 ) \ + SYSCALL_ENTRY( 0x146f, NtUserHideCursorNoCapture, 0 ) \ + SYSCALL_ENTRY( 0x1470, NtUserHidePointerContactVisualization, 0 ) \ + SYSCALL_ENTRY( 0x1471, NtUserHiliteMenuItem, 32 ) \ + SYSCALL_ENTRY( 0x1472, NtUserHungWindowFromGhostWindow, 0 ) \ + SYSCALL_ENTRY( 0x1473, NtUserHwndQueryRedirectionInfo, 0 ) \ + SYSCALL_ENTRY( 0x1474, NtUserHwndSetRedirectionInfo, 0 ) \ + SYSCALL_ENTRY( 0x1475, NtUserImpersonateDdeClientWindow, 0 ) \ + SYSCALL_ENTRY( 0x1476, NtUserInheritWindowMonitor, 0 ) \ + SYSCALL_ENTRY( 0x1477, NtUserInitAnsiOem, 0 ) \ + SYSCALL_ENTRY( 0x1478, NtUserInitTask, 0 ) \ + SYSCALL_ENTRY( 0x1479, NtUserInitThreadCoreMessagingIocp, 0 ) \ + SYSCALL_ENTRY( 0x147a, NtUserInitThreadCoreMessagingIocp2, 0 ) \ + SYSCALL_ENTRY( 0x147b, NtUserInitialize, 0 ) \ + SYSCALL_ENTRY( 0x147c, NtUserInitializeClientPfnArrays, 32 ) \ + SYSCALL_ENTRY( 0x147d, NtUserInitializeGenericHidInjection, 0 ) \ + SYSCALL_ENTRY( 0x147e, NtUserInitializeInputDeviceInjection, 0 ) \ + SYSCALL_ENTRY( 0x147f, NtUserInitializePointerDeviceInjection, 0 ) \ + SYSCALL_ENTRY( 0x1480, NtUserInitializePointerDeviceInjectionEx, 0 ) \ + SYSCALL_ENTRY( 0x1481, NtUserInitializeTouchInjection, 16 ) \ + SYSCALL_ENTRY( 0x1482, NtUserInjectDeviceInput, 0 ) \ + SYSCALL_ENTRY( 0x1483, NtUserInjectGenericHidInput, 0 ) \ + SYSCALL_ENTRY( 0x1484, NtUserInjectGesture, 0 ) \ + SYSCALL_ENTRY( 0x1485, NtUserInjectKeyboardInput, 0 ) \ + SYSCALL_ENTRY( 0x1486, NtUserInjectMouseInput, 0 ) \ + SYSCALL_ENTRY( 0x1487, NtUserInjectPointerInput, 0 ) \ + SYSCALL_ENTRY( 0x1488, NtUserInjectTouchInput, 0 ) \ + SYSCALL_ENTRY( 0x1489, NtUserInteractiveControlQueryUsage, 0 ) \ + SYSCALL_ENTRY( 0x148a, NtUserInternalGetWindowIcon, 16 ) \ + SYSCALL_ENTRY( 0x148b, NtUserInternalGetWindowText, 24 ) \ + SYSCALL_ENTRY( 0x148c, NtUserInternalStartMoveSize, 0 ) \ + SYSCALL_ENTRY( 0x148d, NtUserInternalToUnicode, 0 ) \ + SYSCALL_ENTRY( 0x148e, NtUserInvalidateRect, 24 ) \ + SYSCALL_ENTRY( 0x148f, NtUserInvalidateRgn, 24 ) \ + SYSCALL_ENTRY( 0x1490, NtUserIsChildWindowDpiMessageEnabled, 8 ) \ + SYSCALL_ENTRY( 0x1491, NtUserIsClipboardFormatAvailable, 8 ) \ + SYSCALL_ENTRY( 0x1492, NtUserIsMouseInPointerEnabled, 0 ) \ + SYSCALL_ENTRY( 0x1493, NtUserIsMouseInputEnabled, 0 ) \ + SYSCALL_ENTRY( 0x1494, NtUserIsNonClientDpiScalingEnabled, 0 ) \ + SYSCALL_ENTRY( 0x1495, NtUserIsQueueAttached, 0 ) \ + SYSCALL_ENTRY( 0x1496, NtUserIsResizeLayoutSynchronizationEnabled, 0 ) \ + SYSCALL_ENTRY( 0x1497, NtUserIsTopLevelWindow, 0 ) \ + SYSCALL_ENTRY( 0x1498, NtUserIsTouchWindow, 16 ) \ + SYSCALL_ENTRY( 0x1499, NtUserIsWindowBroadcastingDpiToChildren, 0 ) \ + SYSCALL_ENTRY( 0x149a, NtUserIsWindowDisplayChangeSuppressed, 0 ) \ + SYSCALL_ENTRY( 0x149b, NtUserIsWindowGDIScaledDpiMessageEnabled, 0 ) \ + SYSCALL_ENTRY( 0x149c, NtUserKillSystemTimer, 16 ) \ + SYSCALL_ENTRY( 0x149d, NtUserKillTimer, 16 ) \ + SYSCALL_ENTRY( 0x149e, NtUserLW_LoadFonts, 0 ) \ + SYSCALL_ENTRY( 0x149f, NtUserLayoutCompleted, 0 ) \ + SYSCALL_ENTRY( 0x14a0, NtUserLinkDpiCursor, 0 ) \ + SYSCALL_ENTRY( 0x14a1, NtUserLoadCursorsAndIcons, 0 ) \ + SYSCALL_ENTRY( 0x14a2, NtUserLoadKeyboardLayoutEx, 0 ) \ + SYSCALL_ENTRY( 0x14a3, NtUserLoadUserApiHook, 0 ) \ + SYSCALL_ENTRY( 0x14a4, NtUserLockCursor, 0 ) \ + SYSCALL_ENTRY( 0x14a5, NtUserLockSetForegroundWindow, 0 ) \ + SYSCALL_ENTRY( 0x14a6, NtUserLockWindowStation, 0 ) \ + SYSCALL_ENTRY( 0x14a7, NtUserLockWindowUpdate, 8 ) \ + SYSCALL_ENTRY( 0x14a8, NtUserLockWorkStation, 0 ) \ + SYSCALL_ENTRY( 0x14a9, NtUserLogicalToPerMonitorDPIPhysicalPoint, 16 ) \ + SYSCALL_ENTRY( 0x14aa, NtUserLogicalToPhysicalDpiPointForWindow, 0 ) \ + SYSCALL_ENTRY( 0x14ab, NtUserLogicalToPhysicalPoint, 0 ) \ + SYSCALL_ENTRY( 0x14ac, NtUserMNDragLeave, 0 ) \ + SYSCALL_ENTRY( 0x14ad, NtUserMNDragOver, 0 ) \ + SYSCALL_ENTRY( 0x14ae, NtUserMagControl, 0 ) \ + SYSCALL_ENTRY( 0x14af, NtUserMagGetContextInformation, 0 ) \ + SYSCALL_ENTRY( 0x14b0, NtUserMagSetContextInformation, 0 ) \ + SYSCALL_ENTRY( 0x14b1, NtUserMapDesktopObject, 0 ) \ + SYSCALL_ENTRY( 0x14b2, NtUserMapPointsByVisualIdentifier, 0 ) \ + SYSCALL_ENTRY( 0x14b3, NtUserMapVirtualKeyEx, 24 ) \ + SYSCALL_ENTRY( 0x14b4, NtUserMarkWindowForRawMouse, 0 ) \ + SYSCALL_ENTRY( 0x14b5, NtUserMenuItemFromPoint, 32 ) \ + SYSCALL_ENTRY( 0x14b6, NtUserMessageBeep, 8 ) \ + SYSCALL_ENTRY( 0x14b7, NtUserMessageCall, 56 ) \ + SYSCALL_ENTRY( 0x14b8, NtUserMinInitialize, 0 ) \ + SYSCALL_ENTRY( 0x14b9, NtUserMinMaximize, 0 ) \ + SYSCALL_ENTRY( 0x14ba, NtUserModifyUserStartupInfoFlags, 16 ) \ + SYSCALL_ENTRY( 0x14bb, NtUserModifyWindowTouchCapability, 0 ) \ + SYSCALL_ENTRY( 0x14bc, NtUserMoveWindow, 48 ) \ + SYSCALL_ENTRY( 0x14bd, NtUserMsgWaitForMultipleObjectsEx, 40 ) \ + SYSCALL_ENTRY( 0x14be, NtUserNavigateFocus, 0 ) \ + SYSCALL_ENTRY( 0x14bf, NtUserNlsKbdSendIMENotification, 0 ) \ + SYSCALL_ENTRY( 0x14c0, NtUserNotifyIMEStatus, 16 ) \ + SYSCALL_ENTRY( 0x14c1, NtUserNotifyOverlayWindow, 0 ) \ + SYSCALL_ENTRY( 0x14c2, NtUserNotifyProcessCreate, 0 ) \ + SYSCALL_ENTRY( 0x14c3, NtUserNotifyWinEvent, 32 ) \ + SYSCALL_ENTRY( 0x14c4, NtUserOpenClipboard, 16 ) \ + SYSCALL_ENTRY( 0x14c5, NtUserOpenDesktop, 24 ) \ + SYSCALL_ENTRY( 0x14c6, NtUserOpenInputDesktop, 24 ) \ + SYSCALL_ENTRY( 0x14c7, NtUserOpenThreadDesktop, 0 ) \ + SYSCALL_ENTRY( 0x14c8, NtUserOpenWindowStation, 16 ) \ + SYSCALL_ENTRY( 0x14c9, NtUserPaintDesktop, 0 ) \ + SYSCALL_ENTRY( 0x14ca, NtUserPaintMenuBar, 0 ) \ + SYSCALL_ENTRY( 0x14cb, NtUserPaintMonitor, 0 ) \ + SYSCALL_ENTRY( 0x14cc, NtUserPeekMessage, 40 ) \ + SYSCALL_ENTRY( 0x14cd, NtUserPerMonitorDPIPhysicalToLogicalPoint, 16 ) \ + SYSCALL_ENTRY( 0x14ce, NtUserPhysicalToLogicalDpiPointForWindow, 0 ) \ + SYSCALL_ENTRY( 0x14cf, NtUserPhysicalToLogicalPoint, 0 ) \ + SYSCALL_ENTRY( 0x14d0, NtUserPlayEventSound, 0 ) \ + SYSCALL_ENTRY( 0x14d1, NtUserPostKeyboardInputMessage, 0 ) \ + SYSCALL_ENTRY( 0x14d2, NtUserPostMessage, 32 ) \ + SYSCALL_ENTRY( 0x14d3, NtUserPostQuitMessage, 8 ) \ + SYSCALL_ENTRY( 0x14d4, NtUserPostThreadMessage, 32 ) \ + SYSCALL_ENTRY( 0x14d5, NtUserPrepareForLogoff, 0 ) \ + SYSCALL_ENTRY( 0x14d6, NtUserPrintWindow, 24 ) \ + SYSCALL_ENTRY( 0x14d7, NtUserProcessConnect, 0 ) \ + SYSCALL_ENTRY( 0x14d8, NtUserProcessInkFeedbackCommand, 0 ) \ + SYSCALL_ENTRY( 0x14d9, NtUserPromoteMouseInPointer, 0 ) \ + SYSCALL_ENTRY( 0x14da, NtUserPromotePointer, 0 ) \ + SYSCALL_ENTRY( 0x14db, NtUserQueryActivationObject, 0 ) \ + SYSCALL_ENTRY( 0x14dc, NtUserQueryBSDRWindow, 0 ) \ + SYSCALL_ENTRY( 0x14dd, NtUserQueryDisplayConfig, 48 ) \ + SYSCALL_ENTRY( 0x14de, NtUserQueryInformationThread, 0 ) \ + SYSCALL_ENTRY( 0x14df, NtUserQueryInputContext, 16 ) \ + SYSCALL_ENTRY( 0x14e0, NtUserQuerySendMessage, 0 ) \ + SYSCALL_ENTRY( 0x14e1, NtUserQueryWindow, 16 ) \ + SYSCALL_ENTRY( 0x14e2, NtUserRaiseLowerShellWindow, 0 ) \ + SYSCALL_ENTRY( 0x14e3, NtUserRealChildWindowFromPoint, 24 ) \ + SYSCALL_ENTRY( 0x14e4, NtUserRealInternalGetMessage, 0 ) \ + SYSCALL_ENTRY( 0x14e5, NtUserRealWaitMessageEx, 0 ) \ + SYSCALL_ENTRY( 0x14e6, NtUserRealizePalette, 8 ) \ + SYSCALL_ENTRY( 0x14e7, NtUserReassociateQueueEventCompletionPacket, 0 ) \ + SYSCALL_ENTRY( 0x14e8, NtUserRedrawFrame, 0 ) \ + SYSCALL_ENTRY( 0x14e9, NtUserRedrawFrameAndHook, 0 ) \ + SYSCALL_ENTRY( 0x14ea, NtUserRedrawTitle, 0 ) \ + SYSCALL_ENTRY( 0x14eb, NtUserRedrawWindow, 32 ) \ + SYSCALL_ENTRY( 0x14ec, NtUserRegisterBSDRWindow, 0 ) \ + SYSCALL_ENTRY( 0x14ed, NtUserRegisterClassExWOW, 56 ) \ + SYSCALL_ENTRY( 0x14ee, NtUserRegisterCloakedNotification, 0 ) \ + SYSCALL_ENTRY( 0x14ef, NtUserRegisterDManipHook, 0 ) \ + SYSCALL_ENTRY( 0x14f0, NtUserRegisterEdgy, 0 ) \ + SYSCALL_ENTRY( 0x14f1, NtUserRegisterErrorReportingDialog, 0 ) \ + SYSCALL_ENTRY( 0x14f2, NtUserRegisterForCustomDockTargets, 0 ) \ + SYSCALL_ENTRY( 0x14f3, NtUserRegisterForTooltipDismissNotification, 0 ) \ + SYSCALL_ENTRY( 0x14f4, NtUserRegisterGhostWindow, 0 ) \ + SYSCALL_ENTRY( 0x14f5, NtUserRegisterHotKey, 32 ) \ + SYSCALL_ENTRY( 0x14f6, NtUserRegisterLPK, 0 ) \ + SYSCALL_ENTRY( 0x14f7, NtUserRegisterLogonProcess, 0 ) \ + SYSCALL_ENTRY( 0x14f8, NtUserRegisterManipulationThread, 0 ) \ + SYSCALL_ENTRY( 0x14f9, NtUserRegisterPointerDeviceNotifications, 0 ) \ + SYSCALL_ENTRY( 0x14fa, NtUserRegisterPointerInputTarget, 0 ) \ + SYSCALL_ENTRY( 0x14fb, NtUserRegisterPrecisionTouchpadWindow, 0 ) \ + SYSCALL_ENTRY( 0x14fc, NtUserRegisterRawInputDevices, 24 ) \ + SYSCALL_ENTRY( 0x14fd, NtUserRegisterServicesProcess, 0 ) \ + SYSCALL_ENTRY( 0x14fe, NtUserRegisterSessionPort, 0 ) \ + SYSCALL_ENTRY( 0x14ff, NtUserRegisterShellHookWindow, 0 ) \ + SYSCALL_ENTRY( 0x1500, NtUserRegisterShellPTPListener, 0 ) \ + SYSCALL_ENTRY( 0x1501, NtUserRegisterSiblingFrostWindow, 0 ) \ + SYSCALL_ENTRY( 0x1502, NtUserRegisterSystemThread, 0 ) \ + SYSCALL_ENTRY( 0x1503, NtUserRegisterTasklist, 0 ) \ + SYSCALL_ENTRY( 0x1504, NtUserRegisterTouchHitTestingWindow, 0 ) \ + SYSCALL_ENTRY( 0x1505, NtUserRegisterTouchPadCapable, 8 ) \ + SYSCALL_ENTRY( 0x1506, NtUserRegisterTouchWindow, 16 ) \ + SYSCALL_ENTRY( 0x1507, NtUserRegisterUserApiHook, 0 ) \ + SYSCALL_ENTRY( 0x1508, NtUserRegisterUserHungAppHandlers, 0 ) \ + SYSCALL_ENTRY( 0x1509, NtUserRegisterWindowArrangementCallout, 0 ) \ + SYSCALL_ENTRY( 0x150a, NtUserRegisterWindowMessage, 8 ) \ + SYSCALL_ENTRY( 0x150b, NtUserReleaseCapture, 0 ) \ + SYSCALL_ENTRY( 0x150c, NtUserReleaseDC, 16 ) \ + SYSCALL_ENTRY( 0x150d, NtUserReleaseDwmHitTestWaiters, 0 ) \ + SYSCALL_ENTRY( 0x150e, NtUserRemoteConnect, 0 ) \ + SYSCALL_ENTRY( 0x150f, NtUserRemoteConnectState, 0 ) \ + SYSCALL_ENTRY( 0x1510, NtUserRemoteConsoleShadowStop, 0 ) \ + SYSCALL_ENTRY( 0x1511, NtUserRemoteDisconnect, 0 ) \ + SYSCALL_ENTRY( 0x1512, NtUserRemoteNotify, 0 ) \ + SYSCALL_ENTRY( 0x1513, NtUserRemotePassthruDisable, 0 ) \ + SYSCALL_ENTRY( 0x1514, NtUserRemotePassthruEnable, 0 ) \ + SYSCALL_ENTRY( 0x1515, NtUserRemoteReconnect, 0 ) \ + SYSCALL_ENTRY( 0x1516, NtUserRemoteRedrawRectangle, 0 ) \ + SYSCALL_ENTRY( 0x1517, NtUserRemoteRedrawScreen, 0 ) \ + SYSCALL_ENTRY( 0x1518, NtUserRemoteShadowCleanup, 0 ) \ + SYSCALL_ENTRY( 0x1519, NtUserRemoteShadowSetup, 0 ) \ + SYSCALL_ENTRY( 0x151a, NtUserRemoteShadowStart, 0 ) \ + SYSCALL_ENTRY( 0x151b, NtUserRemoteShadowStop, 0 ) \ + SYSCALL_ENTRY( 0x151c, NtUserRemoteStopScreenUpdates, 0 ) \ + SYSCALL_ENTRY( 0x151d, NtUserRemoteThinwireStats, 0 ) \ + SYSCALL_ENTRY( 0x151e, NtUserRemoveClipboardFormatListener, 8 ) \ + SYSCALL_ENTRY( 0x151f, NtUserRemoveInjectionDevice, 0 ) \ + SYSCALL_ENTRY( 0x1520, NtUserRemoveMenu, 24 ) \ + SYSCALL_ENTRY( 0x1521, NtUserRemoveProp, 16 ) \ + SYSCALL_ENTRY( 0x1522, NtUserRemoveQueueCompletion, 0 ) \ + SYSCALL_ENTRY( 0x1523, NtUserRemoveVisualIdentifier, 0 ) \ + SYSCALL_ENTRY( 0x1524, NtUserReplyMessage, 8 ) \ + SYSCALL_ENTRY( 0x1525, NtUserReportInertia, 0 ) \ + SYSCALL_ENTRY( 0x1526, NtUserRequestMoveSizeOperation, 0 ) \ + SYSCALL_ENTRY( 0x1527, NtUserResetDblClk, 0 ) \ + SYSCALL_ENTRY( 0x1528, NtUserResolveDesktopForWOW, 0 ) \ + SYSCALL_ENTRY( 0x1529, NtUserRestoreWindowDpiChanges, 0 ) \ + SYSCALL_ENTRY( 0x152a, NtUserSBGetParms, 0 ) \ + SYSCALL_ENTRY( 0x152b, NtUserScaleSystemMetricForDPIWithoutCache, 0 ) \ + SYSCALL_ENTRY( 0x152c, NtUserScheduleDispatchNotification, 8 ) \ + SYSCALL_ENTRY( 0x152d, NtUserScrollDC, 56 ) \ + SYSCALL_ENTRY( 0x152e, NtUserScrollWindowEx, 64 ) \ + SYSCALL_ENTRY( 0x152f, NtUserSelectPalette, 24 ) \ + SYSCALL_ENTRY( 0x1530, NtUserSendEventMessage, 0 ) \ + SYSCALL_ENTRY( 0x1531, NtUserSendInput, 24 ) \ + SYSCALL_ENTRY( 0x1532, NtUserSendInteractiveControlHapticsReport, 0 ) \ + SYSCALL_ENTRY( 0x1533, NtUserSetActivationFilter, 0 ) \ + SYSCALL_ENTRY( 0x1534, NtUserSetActiveProcessForMonitor, 0 ) \ + SYSCALL_ENTRY( 0x1535, NtUserSetActiveWindow, 8 ) \ + SYSCALL_ENTRY( 0x1536, NtUserSetAdditionalForegroundBoostProcesses, 24 ) \ + SYSCALL_ENTRY( 0x1537, NtUserSetAppImeLevel, 0 ) \ + SYSCALL_ENTRY( 0x1538, NtUserSetAutoRotation, 0 ) \ + SYSCALL_ENTRY( 0x1539, NtUserSetBridgeWindowChild, 0 ) \ + SYSCALL_ENTRY( 0x153a, NtUserSetBrokeredForeground, 0 ) \ + SYSCALL_ENTRY( 0x153b, NtUserSetCalibrationData, 0 ) \ + SYSCALL_ENTRY( 0x153c, NtUserSetCancelRotationDelayHintWindow, 0 ) \ + SYSCALL_ENTRY( 0x153d, NtUserSetCapture, 8 ) \ + SYSCALL_ENTRY( 0x153e, NtUserSetCaretBlinkTime, 8 ) \ + SYSCALL_ENTRY( 0x153f, NtUserSetCaretPos, 16 ) \ + SYSCALL_ENTRY( 0x1540, NtUserSetChildWindowNoActivate, 0 ) \ + SYSCALL_ENTRY( 0x1541, NtUserSetClassLong, 32 ) \ + SYSCALL_ENTRY( 0x1542, NtUserSetClassLongPtr, 32 ) \ + SYSCALL_ENTRY( 0x1543, NtUserSetClassWord, 24 ) \ + SYSCALL_ENTRY( 0x1544, NtUserSetClipboardData, 24 ) \ + SYSCALL_ENTRY( 0x1545, NtUserSetClipboardViewer, 8 ) \ + SYSCALL_ENTRY( 0x1546, NtUserSetCoreWindow, 0 ) \ + SYSCALL_ENTRY( 0x1547, NtUserSetCoreWindowPartner, 0 ) \ + SYSCALL_ENTRY( 0x1548, NtUserSetCoveredWindowStates, 0 ) \ + SYSCALL_ENTRY( 0x1549, NtUserSetCursor, 8 ) \ + SYSCALL_ENTRY( 0x154a, NtUserSetCursorContents, 0 ) \ + SYSCALL_ENTRY( 0x154b, NtUserSetCursorIconData, 32 ) \ + SYSCALL_ENTRY( 0x154c, NtUserSetCursorIconDataEx, 0 ) \ + SYSCALL_ENTRY( 0x154d, NtUserSetCursorPos, 16 ) \ + SYSCALL_ENTRY( 0x154e, NtUserSetDesktopColorTransform, 0 ) \ + SYSCALL_ENTRY( 0x154f, NtUserSetDesktopVisualInputSink, 0 ) \ + SYSCALL_ENTRY( 0x1550, NtUserSetDialogControlDpiChangeBehavior, 0 ) \ + SYSCALL_ENTRY( 0x1551, NtUserSetDialogPointer, 0 ) \ + SYSCALL_ENTRY( 0x1552, NtUserSetDialogSystemMenu, 0 ) \ + SYSCALL_ENTRY( 0x1553, NtUserSetDisplayAutoRotationPreferences, 0 ) \ + SYSCALL_ENTRY( 0x1554, NtUserSetDisplayConfig, 0 ) \ + SYSCALL_ENTRY( 0x1555, NtUserSetDisplayMapping, 0 ) \ + SYSCALL_ENTRY( 0x1556, NtUserSetDoubleClickTime, 0 ) \ + SYSCALL_ENTRY( 0x1557, NtUserSetDpiForWindow, 0 ) \ + SYSCALL_ENTRY( 0x1558, NtUserSetFallbackForeground, 0 ) \ + SYSCALL_ENTRY( 0x1559, NtUserSetFeatureReportResponse, 0 ) \ + SYSCALL_ENTRY( 0x155a, NtUserSetFocus, 8 ) \ + SYSCALL_ENTRY( 0x155b, NtUserSetForegroundRedirectionForActivationObject, 0 ) \ + SYSCALL_ENTRY( 0x155c, NtUserSetForegroundWindow, 8 ) \ + SYSCALL_ENTRY( 0x155d, NtUserSetForegroundWindowForApplication, 0 ) \ + SYSCALL_ENTRY( 0x155e, NtUserSetFullscreenMagnifierOffsetsDWMUpdated, 0 ) \ + SYSCALL_ENTRY( 0x155f, NtUserSetGestureConfig, 40 ) \ + SYSCALL_ENTRY( 0x1560, NtUserSetImeHotKey, 0 ) \ + SYSCALL_ENTRY( 0x1561, NtUserSetImeInfoEx, 0 ) \ + SYSCALL_ENTRY( 0x1562, NtUserSetImeOwnerWindow, 0 ) \ + SYSCALL_ENTRY( 0x1563, NtUserSetInformationThread, 0 ) \ + SYSCALL_ENTRY( 0x1564, NtUserSetInputServiceState, 0 ) \ + SYSCALL_ENTRY( 0x1565, NtUserSetInteractiveControlFocus, 0 ) \ + SYSCALL_ENTRY( 0x1566, NtUserSetInteractiveCtrlRotationAngle, 0 ) \ + SYSCALL_ENTRY( 0x1567, NtUserSetInternalWindowPos, 32 ) \ + SYSCALL_ENTRY( 0x1568, NtUserSetKeyboardState, 8 ) \ + SYSCALL_ENTRY( 0x1569, NtUserSetLayeredWindowAttributes, 32 ) \ + SYSCALL_ENTRY( 0x156a, NtUserSetMagnificationDesktopMagnifierOffsetsDWMUpdated, 0 ) \ + SYSCALL_ENTRY( 0x156b, NtUserSetManipulationInputTarget, 0 ) \ + SYSCALL_ENTRY( 0x156c, NtUserSetMenu, 16 ) \ + SYSCALL_ENTRY( 0x156d, NtUserSetMenuContextHelpId, 16 ) \ + SYSCALL_ENTRY( 0x156e, NtUserSetMenuDefaultItem, 24 ) \ + SYSCALL_ENTRY( 0x156f, NtUserSetMenuFlagRtoL, 0 ) \ + SYSCALL_ENTRY( 0x1570, NtUserSetMessageExtraInfo, 8 ) \ + SYSCALL_ENTRY( 0x1571, NtUserSetMirrorRendering, 0 ) \ + SYSCALL_ENTRY( 0x1572, NtUserSetModernAppWindow, 0 ) \ + SYSCALL_ENTRY( 0x1573, NtUserSetMonitorWorkArea, 0 ) \ + SYSCALL_ENTRY( 0x1574, NtUserSetMouseInputRateLimitingTimer, 0 ) \ + SYSCALL_ENTRY( 0x1575, NtUserSetMsgBox, 0 ) \ + SYSCALL_ENTRY( 0x1576, NtUserSetObjectInformation, 32 ) \ + SYSCALL_ENTRY( 0x1577, NtUserSetParent, 16 ) \ + SYSCALL_ENTRY( 0x1578, NtUserSetPrecisionTouchPadConfiguration, 0 ) \ + SYSCALL_ENTRY( 0x1579, NtUserSetProcessDefaultLayout, 8 ) \ + SYSCALL_ENTRY( 0x157a, NtUserSetProcessDpiAwarenessContext, 16 ) \ + SYSCALL_ENTRY( 0x157b, NtUserSetProcessInteractionFlags, 0 ) \ + SYSCALL_ENTRY( 0x157c, NtUserSetProcessLaunchForegroundPolicy, 0 ) \ + SYSCALL_ENTRY( 0x157d, NtUserSetProcessMousewheelRoutingMode, 0 ) \ + SYSCALL_ENTRY( 0x157e, NtUserSetProcessRestrictionExemption, 0 ) \ + SYSCALL_ENTRY( 0x157f, NtUserSetProcessUIAccessZorder, 0 ) \ + SYSCALL_ENTRY( 0x1580, NtUserSetProcessWindowStation, 8 ) \ + SYSCALL_ENTRY( 0x1581, NtUserSetProgmanWindow, 8 ) \ + SYSCALL_ENTRY( 0x1582, NtUserSetProp, 24 ) \ + SYSCALL_ENTRY( 0x1583, NtUserSetProp2, 0 ) \ + SYSCALL_ENTRY( 0x1584, NtUserSetScrollInfo, 32 ) \ + SYSCALL_ENTRY( 0x1585, NtUserSetSensorPresence, 0 ) \ + SYSCALL_ENTRY( 0x1586, NtUserSetSharedWindowData, 0 ) \ + SYSCALL_ENTRY( 0x1587, NtUserSetShellChangeNotifyHWND, 0 ) \ + SYSCALL_ENTRY( 0x1588, NtUserSetShellWindowEx, 16 ) \ + SYSCALL_ENTRY( 0x1589, NtUserSetSysColors, 24 ) \ + SYSCALL_ENTRY( 0x158a, NtUserSetSysMenu, 0 ) \ + SYSCALL_ENTRY( 0x158b, NtUserSetSystemContentRects, 0 ) \ + SYSCALL_ENTRY( 0x158c, NtUserSetSystemCursor, 0 ) \ + SYSCALL_ENTRY( 0x158d, NtUserSetSystemMenu, 16 ) \ + SYSCALL_ENTRY( 0x158e, NtUserSetSystemTimer, 24 ) \ + SYSCALL_ENTRY( 0x158f, NtUserSetTSFEventState, 0 ) \ + SYSCALL_ENTRY( 0x1590, NtUserSetTargetForResourceBrokering, 0 ) \ + SYSCALL_ENTRY( 0x1591, NtUserSetTaskmanWindow, 8 ) \ + SYSCALL_ENTRY( 0x1592, NtUserSetThreadDesktop, 8 ) \ + SYSCALL_ENTRY( 0x1593, NtUserSetThreadInputBlocked, 0 ) \ + SYSCALL_ENTRY( 0x1594, NtUserSetThreadLayoutHandles, 0 ) \ + SYSCALL_ENTRY( 0x1595, NtUserSetThreadQueueMergeSetting, 0 ) \ + SYSCALL_ENTRY( 0x1596, NtUserSetThreadState, 0 ) \ + SYSCALL_ENTRY( 0x1597, NtUserSetTimer, 40 ) \ + SYSCALL_ENTRY( 0x1598, NtUserSetUserObjectCapability, 0 ) \ + SYSCALL_ENTRY( 0x1599, NtUserSetVisible, 0 ) \ + SYSCALL_ENTRY( 0x159a, NtUserSetWaitForQueueAttach, 0 ) \ + SYSCALL_ENTRY( 0x159b, NtUserSetWatermarkStrings, 0 ) \ + SYSCALL_ENTRY( 0x159c, NtUserSetWinEventHook, 64 ) \ + SYSCALL_ENTRY( 0x159d, NtUserSetWindowArrangement, 0 ) \ + SYSCALL_ENTRY( 0x159e, NtUserSetWindowBand, 0 ) \ + SYSCALL_ENTRY( 0x159f, NtUserSetWindowCompositionAttribute, 0 ) \ + SYSCALL_ENTRY( 0x15a0, NtUserSetWindowCompositionTransition, 0 ) \ + SYSCALL_ENTRY( 0x15a1, NtUserSetWindowContextHelpId, 16 ) \ + SYSCALL_ENTRY( 0x15a2, NtUserSetWindowDisplayAffinity, 0 ) \ + SYSCALL_ENTRY( 0x15a3, NtUserSetWindowFNID, 16 ) \ + SYSCALL_ENTRY( 0x15a4, NtUserSetWindowFeedbackSetting, 0 ) \ + SYSCALL_ENTRY( 0x15a5, NtUserSetWindowGroup, 0 ) \ + SYSCALL_ENTRY( 0x15a6, NtUserSetWindowLong, 32 ) \ + SYSCALL_ENTRY( 0x15a7, NtUserSetWindowLongPtr, 32 ) \ + SYSCALL_ENTRY( 0x15a8, NtUserSetWindowMessageCapability, 0 ) \ + SYSCALL_ENTRY( 0x15a9, NtUserSetWindowPlacement, 16 ) \ + SYSCALL_ENTRY( 0x15aa, NtUserSetWindowPos, 56 ) \ + SYSCALL_ENTRY( 0x15ab, NtUserSetWindowRgn, 24 ) \ + SYSCALL_ENTRY( 0x15ac, NtUserSetWindowRgnEx, 0 ) \ + SYSCALL_ENTRY( 0x15ad, NtUserSetWindowShowState, 0 ) \ + SYSCALL_ENTRY( 0x15ae, NtUserSetWindowState, 0 ) \ + SYSCALL_ENTRY( 0x15af, NtUserSetWindowStationUser, 0 ) \ + SYSCALL_ENTRY( 0x15b0, NtUserSetWindowWord, 24 ) \ + SYSCALL_ENTRY( 0x15b1, NtUserSetWindowsHookAW, 0 ) \ + SYSCALL_ENTRY( 0x15b2, NtUserSetWindowsHookEx, 48 ) \ + SYSCALL_ENTRY( 0x15b3, NtUserShellForegroundBoostProcess, 0 ) \ + SYSCALL_ENTRY( 0x15b4, NtUserShellHandwritingDelegateInput, 0 ) \ + SYSCALL_ENTRY( 0x15b5, NtUserShellHandwritingHandleDelegatedInput, 0 ) \ + SYSCALL_ENTRY( 0x15b6, NtUserShellHandwritingUndelegateInput, 0 ) \ + SYSCALL_ENTRY( 0x15b7, NtUserShellMigrateWindow, 0 ) \ + SYSCALL_ENTRY( 0x15b8, NtUserShellRegisterHotKey, 0 ) \ + SYSCALL_ENTRY( 0x15b9, NtUserShellSetWindowPos, 0 ) \ + SYSCALL_ENTRY( 0x15ba, NtUserShowCaret, 8 ) \ + SYSCALL_ENTRY( 0x15bb, NtUserShowCursor, 8 ) \ + SYSCALL_ENTRY( 0x15bc, NtUserShowOwnedPopups, 16 ) \ + SYSCALL_ENTRY( 0x15bd, NtUserShowScrollBar, 24 ) \ + SYSCALL_ENTRY( 0x15be, NtUserShowStartGlass, 0 ) \ + SYSCALL_ENTRY( 0x15bf, NtUserShowSystemCursor, 0 ) \ + SYSCALL_ENTRY( 0x15c0, NtUserShowWindow, 16 ) \ + SYSCALL_ENTRY( 0x15c1, NtUserShowWindowAsync, 16 ) \ + SYSCALL_ENTRY( 0x15c2, NtUserShutdownBlockReasonCreate, 0 ) \ + SYSCALL_ENTRY( 0x15c3, NtUserShutdownBlockReasonQuery, 0 ) \ + SYSCALL_ENTRY( 0x15c4, NtUserShutdownReasonDestroy, 0 ) \ + SYSCALL_ENTRY( 0x15c5, NtUserSignalRedirectionStartComplete, 0 ) \ + SYSCALL_ENTRY( 0x15c6, NtUserSlicerControl, 0 ) \ + SYSCALL_ENTRY( 0x15c7, NtUserSoundSentry, 0 ) \ + SYSCALL_ENTRY( 0x15c8, NtUserStopAndEndInertia, 0 ) \ + SYSCALL_ENTRY( 0x15c9, NtUserSuppressWindowActions, 0 ) \ + SYSCALL_ENTRY( 0x15ca, NtUserSuppressWindowDisplayChange, 0 ) \ + SYSCALL_ENTRY( 0x15cb, NtUserSwapMouseButton, 0 ) \ + SYSCALL_ENTRY( 0x15cc, NtUserSwitchDesktop, 8 ) \ + SYSCALL_ENTRY( 0x15cd, NtUserSwitchToThisWindow, 0 ) \ + SYSCALL_ENTRY( 0x15ce, NtUserSystemParametersInfo, 32 ) \ + SYSCALL_ENTRY( 0x15cf, NtUserSystemParametersInfoForDpi, 40 ) \ + SYSCALL_ENTRY( 0x15d0, NtUserTestForInteractiveUser, 0 ) \ + SYSCALL_ENTRY( 0x15d1, NtUserThreadMessageQueueAttached, 0 ) \ + SYSCALL_ENTRY( 0x15d2, NtUserThunkedMenuInfo, 16 ) \ + SYSCALL_ENTRY( 0x15d3, NtUserThunkedMenuItemInfo, 48 ) \ + SYSCALL_ENTRY( 0x15d4, NtUserToUnicodeEx, 56 ) \ + SYSCALL_ENTRY( 0x15d5, NtUserTraceLoggingSendMixedModeTelemetry, 0 ) \ + SYSCALL_ENTRY( 0x15d6, NtUserTrackMouseEvent, 8 ) \ + SYSCALL_ENTRY( 0x15d7, NtUserTrackPopupMenuEx, 48 ) \ + SYSCALL_ENTRY( 0x15d8, NtUserTransformPoint, 0 ) \ + SYSCALL_ENTRY( 0x15d9, NtUserTransformRect, 0 ) \ + SYSCALL_ENTRY( 0x15da, NtUserTranslateAccelerator, 24 ) \ + SYSCALL_ENTRY( 0x15db, NtUserTranslateMessage, 16 ) \ + SYSCALL_ENTRY( 0x15dc, NtUserUndelegateInput, 0 ) \ + SYSCALL_ENTRY( 0x15dd, NtUserUnhookWinEvent, 8 ) \ + SYSCALL_ENTRY( 0x15de, NtUserUnhookWindowsHook, 16 ) \ + SYSCALL_ENTRY( 0x15df, NtUserUnhookWindowsHookEx, 8 ) \ + SYSCALL_ENTRY( 0x15e0, NtUserUnloadKeyboardLayout, 0 ) \ + SYSCALL_ENTRY( 0x15e1, NtUserUnlockWindowStation, 0 ) \ + SYSCALL_ENTRY( 0x15e2, NtUserUnregisterClass, 24 ) \ + SYSCALL_ENTRY( 0x15e3, NtUserUnregisterHotKey, 16 ) \ + SYSCALL_ENTRY( 0x15e4, NtUserUnregisterSessionPort, 0 ) \ + SYSCALL_ENTRY( 0x15e5, NtUserUnregisterTouchWindow, 8 ) \ + SYSCALL_ENTRY( 0x15e6, NtUserUnregisterUserApiHook, 0 ) \ + SYSCALL_ENTRY( 0x15e7, NtUserUpdateClientRect, 0 ) \ + SYSCALL_ENTRY( 0x15e8, NtUserUpdateDefaultDesktopThumbnail, 0 ) \ + SYSCALL_ENTRY( 0x15e9, NtUserUpdateInputContext, 24 ) \ + SYSCALL_ENTRY( 0x15ea, NtUserUpdateInstance, 0 ) \ + SYSCALL_ENTRY( 0x15eb, NtUserUpdateLayeredWindow, 80 ) \ + SYSCALL_ENTRY( 0x15ec, NtUserUpdatePerUserImmEnabling, 0 ) \ + SYSCALL_ENTRY( 0x15ed, NtUserUpdatePerUserSystemParameters, 0 ) \ + SYSCALL_ENTRY( 0x15ee, NtUserUpdateWindow, 0 ) \ + SYSCALL_ENTRY( 0x15ef, NtUserUpdateWindowInputSinkHints, 0 ) \ + SYSCALL_ENTRY( 0x15f0, NtUserUpdateWindowTrackingInfo, 0 ) \ + SYSCALL_ENTRY( 0x15f1, NtUserUpdateWindows, 0 ) \ + SYSCALL_ENTRY( 0x15f2, NtUserUserHandleGrantAccess, 0 ) \ + SYSCALL_ENTRY( 0x15f3, NtUserUserPowerCalloutWorker, 0 ) \ + SYSCALL_ENTRY( 0x15f4, NtUserValidateHandleSecure, 0 ) \ + SYSCALL_ENTRY( 0x15f5, NtUserValidateRect, 16 ) \ + SYSCALL_ENTRY( 0x15f6, NtUserValidateRgn, 16 ) \ + SYSCALL_ENTRY( 0x15f7, NtUserValidateTimerCallback, 0 ) \ + SYSCALL_ENTRY( 0x15f8, NtUserVkKeyScanEx, 16 ) \ + SYSCALL_ENTRY( 0x15f9, NtUserWOWCleanup, 0 ) \ + SYSCALL_ENTRY( 0x15fa, NtUserWOWModuleUnload, 0 ) \ + SYSCALL_ENTRY( 0x15fb, NtUserWaitAvailableMessageEx, 0 ) \ + SYSCALL_ENTRY( 0x15fc, NtUserWaitForInputIdle, 24 ) \ + SYSCALL_ENTRY( 0x15fd, NtUserWaitForMsgAndEvent, 0 ) \ + SYSCALL_ENTRY( 0x15fe, NtUserWaitForRedirectionStartComplete, 0 ) \ + SYSCALL_ENTRY( 0x15ff, NtUserWaitMessage, 0 ) \ + SYSCALL_ENTRY( 0x1600, NtUserWakeRITForShutdown, 0 ) \ + SYSCALL_ENTRY( 0x1601, NtUserWindowFromDC, 8 ) \ + SYSCALL_ENTRY( 0x1602, NtUserWindowFromPhysicalPoint, 0 ) \ + SYSCALL_ENTRY( 0x1603, NtUserWindowFromPoint, 16 ) \ + SYSCALL_ENTRY( 0x1604, NtUserYieldTask, 0 ) \ + SYSCALL_ENTRY( 0x1605, NtUserZapActiveAndFocus, 0 ) \ + SYSCALL_ENTRY( 0x1606, NtValidateCompositionSurfaceHandle, 0 ) \ + SYSCALL_ENTRY( 0x1607, NtVisualCaptureBits, 0 ) #else #define ALL_SYSCALLS ALL_SYSCALLS32 #endif @@ -3801,9 +3809,6 @@ SYSCALL_STUB( NtUserGetDpiForCurrentProcess ) \ SYSCALL_STUB( NtUserGetDwmCursorShape ) \ SYSCALL_STUB( NtUserGetExtendedPointerDeviceProperty ) \ - SYSCALL_STUB( NtUserGetGestureConfig ) \ - SYSCALL_STUB( NtUserGetGestureExtArgs ) \ - SYSCALL_STUB( NtUserGetGestureInfo ) \ SYSCALL_STUB( NtUserGetGuiResources ) \ SYSCALL_STUB( NtUserGetHDevName ) \ SYSCALL_STUB( NtUserGetHimetricScaleFactorFromPixelLocation ) \ @@ -3849,7 +3854,6 @@ SYSCALL_STUB( NtUserGetSysMenuOffset ) \ SYSCALL_STUB( NtUserGetSystemContentRects ) \ SYSCALL_STUB( NtUserGetTopLevelWindow ) \ - SYSCALL_STUB( NtUserGetTouchInputInfo ) \ SYSCALL_STUB( NtUserGetTouchValidationStatus ) \ SYSCALL_STUB( NtUserGetUniformSpaceMapping ) \ SYSCALL_STUB( NtUserGetUnpredictedMessagePos ) \ @@ -3899,7 +3903,6 @@ SYSCALL_STUB( NtUserIsQueueAttached ) \ SYSCALL_STUB( NtUserIsResizeLayoutSynchronizationEnabled ) \ SYSCALL_STUB( NtUserIsTopLevelWindow ) \ - SYSCALL_STUB( NtUserIsTouchWindow ) \ SYSCALL_STUB( NtUserIsWindowBroadcastingDpiToChildren ) \ SYSCALL_STUB( NtUserIsWindowDisplayChangeSuppressed ) \ SYSCALL_STUB( NtUserIsWindowGDIScaledDpiMessageEnabled ) \ @@ -4037,7 +4040,6 @@ SYSCALL_STUB( NtUserSetForegroundRedirectionForActivationObject ) \ SYSCALL_STUB( NtUserSetForegroundWindowForApplication ) \ SYSCALL_STUB( NtUserSetFullscreenMagnifierOffsetsDWMUpdated ) \ - SYSCALL_STUB( NtUserSetGestureConfig ) \ SYSCALL_STUB( NtUserSetImeHotKey ) \ SYSCALL_STUB( NtUserSetImeInfoEx ) \ SYSCALL_STUB( NtUserSetImeOwnerWindow ) \ diff --git a/dlls/win32u/win32u.spec b/dlls/win32u/win32u.spec index 2c409010cd2..7d9fe5a9e2d 100644 --- a/dlls/win32u/win32u.spec +++ b/dlls/win32u/win32u.spec @@ -1019,9 +1019,9 @@ @ stub -syscall NtUserGetExtendedPointerDeviceProperty @ stdcall -syscall NtUserGetForegroundWindow() @ stdcall -syscall NtUserGetGUIThreadInfo(long ptr) -@ stub -syscall NtUserGetGestureConfig -@ stub -syscall NtUserGetGestureExtArgs -@ stub -syscall NtUserGetGestureInfo +@ stdcall -syscall NtUserGetGestureConfig(long long long ptr ptr long) +@ stdcall -syscall NtUserGetGestureExtArgs(long long ptr) +@ stdcall -syscall NtUserGetGestureInfo(long ptr) @ stub -syscall NtUserGetGuiResources @ stub -syscall NtUserGetHDevName @ stub -syscall NtUserGetHimetricScaleFactorFromPixelLocation @@ -1104,7 +1104,7 @@ @ stdcall -syscall NtUserGetThreadState(long) @ stdcall -syscall NtUserGetTitleBarInfo(long ptr) @ stub -syscall NtUserGetTopLevelWindow -@ stub -syscall NtUserGetTouchInputInfo +@ stdcall -syscall NtUserGetTouchInputInfo(long long ptr long) @ stub -syscall NtUserGetTouchValidationStatus @ stub -syscall NtUserGetUniformSpaceMapping @ stub -syscall NtUserGetUnpredictedMessagePos @@ -1173,7 +1173,7 @@ @ stub -syscall NtUserIsQueueAttached @ stub -syscall NtUserIsResizeLayoutSynchronizationEnabled @ stub -syscall NtUserIsTopLevelWindow -@ stub -syscall NtUserIsTouchWindow +@ stdcall -syscall NtUserIsTouchWindow(long ptr) @ stub -syscall NtUserIsWindowBroadcastingDpiToChildren @ stub -syscall NtUserIsWindowDisplayChangeSuppressed @ stub -syscall NtUserIsWindowGDIScaledDpiMessageEnabled @@ -1282,6 +1282,7 @@ @ stub -syscall NtUserRegisterSystemThread @ stub -syscall NtUserRegisterTasklist @ stub -syscall NtUserRegisterTouchHitTestingWindow +@ stdcall -syscall NtUserRegisterTouchWindow(long long) @ stdcall -syscall NtUserRegisterTouchPadCapable(long) @ stub -syscall NtUserRegisterUserApiHook @ stub -syscall NtUserRegisterUserHungAppHandlers @@ -1371,7 +1372,7 @@ @ stdcall -syscall NtUserSetForegroundWindow(long) @ stub -syscall NtUserSetForegroundWindowForApplication @ stub -syscall NtUserSetFullscreenMagnifierOffsetsDWMUpdated -@ stub -syscall NtUserSetGestureConfig +@ stdcall -syscall NtUserSetGestureConfig(long long long ptr long) @ stub -syscall NtUserSetImeHotKey @ stub -syscall NtUserSetImeInfoEx @ stub -syscall NtUserSetImeOwnerWindow @@ -1504,6 +1505,9 @@ @ stub -syscall NtUserUnlockWindowStation @ stdcall -syscall NtUserUnregisterClass(ptr ptr ptr) @ stdcall -syscall NtUserUnregisterHotKey(long long) +@ stdcall -syscall NtUserUnregisterTouchWindow(long) +@ stdcall -syscall NtUserCloseTouchInputHandle(long) +@ stdcall -syscall NtUserCloseGestureInfoHandle(long) @ stub -syscall NtUserUnregisterSessionPort @ stub -syscall NtUserUnregisterUserApiHook @ stub -syscall NtUserUpdateClientRect diff --git a/dlls/win32u/win32u_private.h b/dlls/win32u/win32u_private.h index 060a446a76d..78ebf44ef37 100644 --- a/dlls/win32u/win32u_private.h +++ b/dlls/win32u/win32u_private.h @@ -113,6 +113,8 @@ extern BOOL clip_fullscreen_window( HWND hwnd, BOOL reset ); extern USHORT map_scan_to_kbd_vkey( USHORT scan, HKL layout, UINT *mapped ); extern void destroy_thread_pointers(void); extern BOOL process_pointer_message( MSG *msg, UINT hw_id, const struct hardware_msg_data *msg_data ); +extern BOOL process_touch_message( MSG *msg, UINT hw_id, const struct hardware_msg_data *msg_data ); +extern BOOL process_gesture_message( MSG *msg, UINT hw_id, const struct hardware_msg_data *msg_data ); extern void update_pointer_from_msg( POINTER_INPUT_TYPE type, const MSG *msg ); extern NTSTATUS send_hardware_input( HWND hwnd, UINT flags, const INPUT *input, LPARAM lparam ); diff --git a/dlls/winemac.drv/Makefile.in b/dlls/winemac.drv/Makefile.in index 576a2fbd0c5..8234e570c04 100644 --- a/dlls/winemac.drv/Makefile.in +++ b/dlls/winemac.drv/Makefile.in @@ -38,6 +38,7 @@ SOURCES = \ opengl.c \ surface.c \ systray.c \ + touch.c \ vulkan.c \ window.c \ winemac.rc diff --git a/dlls/winemac.drv/cocoa_app.h b/dlls/winemac.drv/cocoa_app.h index e2f25c6cc41..f0d58e36677 100644 --- a/dlls/winemac.drv/cocoa_app.h +++ b/dlls/winemac.drv/cocoa_app.h @@ -76,6 +76,9 @@ @interface WineApplicationController : NSObject <NSApplicationDelegate> NSTimeInterval lastScrollTime; double accumScrollX, accumScrollY; + NSMutableDictionary* touchIDs; /* NSTouch identity -> touch id */ + unsigned int nextTouchID; + NSMutableDictionary* originalDisplayModes; NSMutableDictionary* latentDisplayModes; BOOL displaysCapturedForFullscreen; @@ -135,6 +138,9 @@ - (void) updateFullscreenWindows; - (BOOL) handleEvent:(NSEvent*)anEvent; - (void) didSendEvent:(NSEvent*)anEvent; + - (void) handleTouch:(NSEvent*)anEvent; + - (int) touchIDForTouch:(NSTouch*)touch; + - (void) releaseTouchID:(NSTouch*)touch; @end diff --git a/dlls/winemac.drv/cocoa_app.m b/dlls/winemac.drv/cocoa_app.m index 102a5b70702..fcca291ad84 100644 --- a/dlls/winemac.drv/cocoa_app.m +++ b/dlls/winemac.drv/cocoa_app.m @@ -198,6 +198,7 @@ - (id) init - (void) dealloc { + [touchIDs release]; [windowsBeingDragged release]; [cursor release]; [screenFrameCGRects release]; @@ -1775,6 +1776,90 @@ - (void) handleScrollWheel:(NSEvent*)theEvent } } + - (void) handleTouch:(NSEvent*)theEvent + { + WineWindow* window = (WineWindow*)[theEvent window]; + NSView* view; + NSSet* touches; + + if (![window isKindOfClass:[WineWindow class]]) + return; + + if (!(view = [window contentView])) + return; + + touches = [theEvent touchesMatchingPhase:NSTouchPhaseAny inView:view]; + if (![touches count]) + return; + + for (NSTouch* touch in touches) + { + int phase; + NSPoint pt, screenPt; + CGPoint cgpt; + macdrv_event* event; + + /* Only direct (on-screen) touches are meaningful here. Indirect + touches come from the trackpad and are delivered to Wine as + mouse and gesture events instead. */ + if (touch.type != NSTouchTypeDirect) + continue; + + if (touch.phase & NSTouchPhaseBegan) + phase = 0; + else if (touch.phase & NSTouchPhaseMoved) + phase = 1; + else if (touch.phase & (NSTouchPhaseEnded | NSTouchPhaseCancelled)) + phase = 2; + else + continue; /* stationary touches need no update */ + + /* Convert the touch location from the (flipped) view coordinate + system to global screen coordinates, the same space the mouse + events use, then scale for Retina. */ + pt = [view convertPoint:[touch locationInView:view] toView:nil]; + screenPt = [window convertPointToScreen:pt]; + cgpt = cgpoint_win_from_mac(NSPointToCGPoint(screenPt)); + + event = macdrv_create_event(TOUCH, window); + event->touch.id = [self touchIDForTouch:touch]; + event->touch.phase = phase; + event->touch.x = floor(cgpt.x); + event->touch.y = floor(cgpt.y); + event->touch.time_ms = [self ticksForEventTime:[theEvent timestamp]]; + + [window.queue postEvent:event]; + macdrv_release_event(event); + + if (phase == 2) + [self releaseTouchID:touch]; + } + } + + - (int) touchIDForTouch:(NSTouch*)touch + { + id identity = touch.identity; + NSNumber* number; + int id; + + if (!touchIDs) + touchIDs = [[NSMutableDictionary alloc] init]; + + if ((number = touchIDs[identity])) + id = [number intValue]; + else + { + id = nextTouchID++; + touchIDs[identity] = @(id); + } + return id; + } + + - (void) releaseTouchID:(NSTouch*)touch + { + [touchIDs removeObjectForKey:touch.identity]; + } + // Returns TRUE if the event was handled and caller should do nothing more // with it. Returns FALSE if the caller should process it as normal and // then call -didSendEvent:. @@ -1803,6 +1888,8 @@ - (BOOL) handleEvent:(NSEvent*)anEvent [self handleScrollWheel:anEvent]; ret = mouseCaptureWindow != nil; } + else if (type == NSEventTypeDirectTouch) + [self handleTouch:anEvent]; else if (type == NSEventTypeKeyDown) { // -[NSApplication sendEvent:] seems to consume presses of the Help diff --git a/dlls/winemac.drv/cocoa_window.m b/dlls/winemac.drv/cocoa_window.m index 8ca5dd76635..6fa7e340157 100644 --- a/dlls/winemac.drv/cocoa_window.m +++ b/dlls/winemac.drv/cocoa_window.m @@ -509,6 +509,7 @@ - (instancetype) initWithFrame:(NSRect)frame [self setWantsLayer:YES]; [self setLayerRetinaProperties:retina_on]; [self setAutoresizesSubviews:NO]; + [self setAcceptsTouchEvents:YES]; } return self; } diff --git a/dlls/winemac.drv/event.c b/dlls/winemac.drv/event.c index c7e5fb1c7a8..2e7ad874ffc 100644 --- a/dlls/winemac.drv/event.c +++ b/dlls/winemac.drv/event.c @@ -56,6 +56,7 @@ static const char *dbgstr_event(int type) "MOUSE_MOVED_RELATIVE", "MOUSE_MOVED_ABSOLUTE", "MOUSE_SCROLL", + "TOUCH", "QUERY_EVENT", "QUERY_EVENT_NO_PREEMPT_WAIT", "REASSERT_WINDOW_POSITION", @@ -106,12 +107,14 @@ static macdrv_event_mask get_event_mask(DWORD mask) { event_mask |= event_mask_for_type(MOUSE_BUTTON); event_mask |= event_mask_for_type(MOUSE_SCROLL); + event_mask |= event_mask_for_type(TOUCH); } if (mask & QS_MOUSEMOVE) { event_mask |= event_mask_for_type(MOUSE_MOVED_RELATIVE); event_mask |= event_mask_for_type(MOUSE_MOVED_ABSOLUTE); + event_mask |= event_mask_for_type(TOUCH); } if (mask & QS_POSTMESSAGE) @@ -422,6 +425,9 @@ void macdrv_handle_event(const macdrv_event *event) case MOUSE_SCROLL: macdrv_mouse_scroll(hwnd, event); break; + case TOUCH: + macdrv_touch(hwnd, event); + break; case QUERY_EVENT: case QUERY_EVENT_NO_PREEMPT_WAIT: macdrv_query_event(hwnd, event); diff --git a/dlls/winemac.drv/gdi.c b/dlls/winemac.drv/gdi.c index 906bb4d09e6..7ac1ca0dd26 100644 --- a/dlls/winemac.drv/gdi.c +++ b/dlls/winemac.drv/gdi.c @@ -245,6 +245,7 @@ static const struct user_driver_funcs macdrv_funcs = .pBeep = macdrv_Beep, .pChangeDisplaySettings = macdrv_ChangeDisplaySettings, .pClipCursor = macdrv_ClipCursor, + .pGetTouchCapabilities = macdrv_GetTouchCapabilities, .pNotifyIcon = macdrv_NotifyIcon, .pCleanupIcons = macdrv_CleanupIcons, .pClipboardWindowProc = macdrv_ClipboardWindowProc, diff --git a/dlls/winemac.drv/macdrv.h b/dlls/winemac.drv/macdrv.h index aeeadae122e..336a45f6c0f 100644 --- a/dlls/winemac.drv/macdrv.h +++ b/dlls/winemac.drv/macdrv.h @@ -132,6 +132,7 @@ static inline RECT rect_from_cgrect(CGRect cgrect) extern BOOL macdrv_GetDeviceGammaRamp(PHYSDEV dev, LPVOID ramp); extern BOOL macdrv_SetDeviceGammaRamp(PHYSDEV dev, LPVOID ramp); extern BOOL macdrv_ClipCursor(const RECT *clip, BOOL reset); +extern UINT macdrv_GetTouchCapabilities(void); extern LRESULT macdrv_NotifyIcon(HWND hwnd, UINT msg, NOTIFYICONDATAW *data); extern void macdrv_CleanupIcons(HWND hwnd); extern LRESULT macdrv_DesktopWindowProc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam); @@ -237,6 +238,7 @@ extern BOOL macdrv_SystemParametersInfo(UINT action, UINT int_param, void *ptr_p extern void macdrv_mouse_button(HWND hwnd, const macdrv_event *event); extern void macdrv_mouse_moved(HWND hwnd, const macdrv_event *event); extern void macdrv_mouse_scroll(HWND hwnd, const macdrv_event *event); +extern void macdrv_touch(HWND hwnd, const macdrv_event *event); extern void macdrv_release_capture(HWND hwnd, const macdrv_event *event); extern void macdrv_compute_keyboard_layout(struct macdrv_thread_data *thread_data); diff --git a/dlls/winemac.drv/macdrv_cocoa.h b/dlls/winemac.drv/macdrv_cocoa.h index 9a91edbe8e3..ded0783d8c5 100644 --- a/dlls/winemac.drv/macdrv_cocoa.h +++ b/dlls/winemac.drv/macdrv_cocoa.h @@ -284,6 +284,7 @@ static inline CGPoint cgpoint_win_from_mac(CGPoint point) MOUSE_MOVED_RELATIVE, MOUSE_MOVED_ABSOLUTE, MOUSE_SCROLL, + TOUCH, QUERY_EVENT, QUERY_EVENT_NO_PREEMPT_WAIT, REASSERT_WINDOW_POSITION, @@ -371,6 +372,13 @@ static inline CGPoint cgpoint_win_from_mac(CGPoint point) int y; unsigned long time_ms; } mouse_scroll; + struct { + int id; + int phase; /* 0 = down, 1 = moved, 2 = up */ + int x; + int y; + unsigned long time_ms; + } touch; struct { struct macdrv_query *query; } query_event; diff --git a/dlls/winemac.drv/mouse.c b/dlls/winemac.drv/mouse.c index 51ae29ae84e..1980059c4f4 100644 --- a/dlls/winemac.drv/mouse.c +++ b/dlls/winemac.drv/mouse.c @@ -940,3 +940,13 @@ void macdrv_release_capture(HWND hwnd, const macdrv_event *event) WARN("failed to post WM_CANCELMODE; error 0x%08x\n", RtlGetLastWin32Error()); } } + +/*********************************************************************** + * macdrv_GetTouchCapabilities + */ +UINT macdrv_GetTouchCapabilities(void) +{ + /* DirectTouch support is compiled in; a real touch screen is required + * for events to arrive, but report the capability optimistically. */ + return MAKELONG( NID_INTEGRATED_TOUCH | NID_MULTI_INPUT | NID_READY, 20 ); +} diff --git a/dlls/winemac.drv/touch.c b/dlls/winemac.drv/touch.c new file mode 100644 index 00000000000..1de8caa83ca --- /dev/null +++ b/dlls/winemac.drv/touch.c @@ -0,0 +1,86 @@ +/* + * MACDRV touch driver + * + * Copyright 2026 Shengdun Wang + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#if 0 +#pragma makedep unix +#endif + +#include "config.h" + +#include "macdrv.h" +#include "wine/server.h" + +WINE_DEFAULT_DEBUG_CHANNEL(cursor); + + +/*********************************************************************** + * send_touch_input + * + * Deliver a touch event to wineserver. Touch positions are encoded as a + * fraction of the raw physical screen, matching what the server decodes + * when it synthesizes mouse input from the touch. + */ +static void send_touch_input(HWND hwnd, unsigned int message, int id, int x, int y) +{ + INPUT input = {0}; + RECT virtual; + POINT pos; + + virtual = NtUserGetVirtualScreenRect(MDT_RAW_DPI); + pos.x = x * 65535 / (virtual.right - virtual.left); + pos.y = y * 65535 / (virtual.bottom - virtual.top); + + input.type = INPUT_HARDWARE; + input.hi.uMsg = message; + input.hi.wParamL = id; + input.hi.wParamH = POINTER_MESSAGE_FLAG_INRANGE | POINTER_MESSAGE_FLAG_INCONTACT; + if (message == WM_POINTERDOWN) input.hi.wParamH |= POINTER_MESSAGE_FLAG_NEW; + + TRACE("hwnd=%p id=%d message=%x screen=%d,%d pos=%d,%d\n", hwnd, id, message, x, y, pos.x, pos.y); + + NtUserSendHardwareInput(hwnd, 0, &input, MAKELPARAM(pos.x, pos.y)); +} + + +/*********************************************************************** + * macdrv_touch + * + * Handler for TOUCH events. + */ +void macdrv_touch(HWND hwnd, const macdrv_event *event) +{ + unsigned int message; + + TRACE("win %p/%p id %d phase %d at (%d,%d) time %lu (%lu ticks ago)\n", hwnd, event->window, + event->touch.id, event->touch.phase, event->touch.x, event->touch.y, + event->touch.time_ms, (NtGetTickCount() - event->touch.time_ms)); + + switch (event->touch.phase) + { + case 0: message = WM_POINTERDOWN; break; + case 1: message = WM_POINTERUPDATE; break; + case 2: message = WM_POINTERUP; break; + default: + WARN("unrecognized touch phase %d\n", event->touch.phase); + return; + } + + send_touch_input(hwnd, message, event->touch.id, event->touch.x, event->touch.y); +} diff --git a/dlls/winewayland.drv/Makefile.in b/dlls/winewayland.drv/Makefile.in index 00dd0055971..2af703e3ca0 100644 --- a/dlls/winewayland.drv/Makefile.in +++ b/dlls/winewayland.drv/Makefile.in @@ -1,7 +1,7 @@ MODULE = winewayland.drv UNIXLIB = winewayland.so -UNIX_CFLAGS = $(EGL_CFLAGS) $(WAYLAND_CLIENT_CFLAGS) $(WAYLAND_EGL_CFLAGS) $(XKBCOMMON_CFLAGS) $(XKBREGISTRY_CFLAGS) -UNIX_LIBS = -lwin32u $(WAYLAND_CLIENT_LIBS) $(WAYLAND_EGL_LIBS) $(XKBCOMMON_LIBS) $(XKBREGISTRY_LIBS) $(PTHREAD_LIBS) -lm +UNIX_CFLAGS = $(EGL_CFLAGS) $(WAYLAND_CLIENT_CFLAGS) $(WAYLAND_EGL_CFLAGS) $(XKBCOMMON_CFLAGS) $(XKBREGISTRY_CFLAGS) $(FREETYPE_CFLAGS) $(FONTCONFIG_CFLAGS) $(DBUS_CFLAGS) +UNIX_LIBS = -lwin32u $(WAYLAND_CLIENT_LIBS) $(WAYLAND_EGL_LIBS) $(XKBCOMMON_LIBS) $(XKBREGISTRY_LIBS) $(FREETYPE_LIBS) $(FONTCONFIG_LIBS) $(PTHREAD_LIBS) -lm IMPORTS = user32 win32u VER_FILEDESCRIPTION_STR = "Wine Wayland driver" @@ -26,10 +26,13 @@ SOURCES = \ wayland_pointer.c \ wayland_surface.c \ wayland_text_input.c \ + wayland_touch.c \ + wayland_csd.c \ waylanddrv_main.c \ window.c \ window_surface.c \ wlr-data-control-unstable-v1.xml \ + xdg-decoration-unstable-v1.xml \ xdg-output-unstable-v1.xml \ xdg-shell.xml \ xdg-toplevel-icon-v1.xml diff --git a/dlls/winewayland.drv/wayland.c b/dlls/winewayland.drv/wayland.c index 52ba39ce2be..7230218afb0 100644 --- a/dlls/winewayland.drv/wayland.c +++ b/dlls/winewayland.drv/wayland.c @@ -26,10 +26,18 @@ #include "waylanddrv.h" +#include "ntstatus.h" +#include "winreg.h" + #include "wine/debug.h" #include <stdlib.h> +#ifdef SONAME_LIBDBUS_1 +#include <dlfcn.h> +#include <dbus/dbus.h> +#endif + WINE_DEFAULT_DEBUG_CHANNEL(waylanddrv); struct wayland process_wayland = @@ -43,6 +51,255 @@ struct wayland process_wayland = .output_mutex = PTHREAD_MUTEX_INITIALIZER }; +static inline void ascii_to_unicode( WCHAR *dst, const char *src, size_t len ) +{ + while (len--) *dst++ = (unsigned char)*src++; +} + +#define IS_OPTION_TRUE(ch) ((ch) == 'y' || (ch) == 'Y' || (ch) == 't' || (ch) == 'T' || (ch) == '1') + +static inline UINT asciiz_to_unicode( WCHAR *dst, const char *src ) +{ + WCHAR *p = dst; + while ((*p++ = *src++)); + return (p - dst) * sizeof(WCHAR); +} + +static HKEY reg_open_key( HKEY root, const WCHAR *name, ULONG name_len ) +{ + UNICODE_STRING nameW = { name_len, name_len, (WCHAR *)name }; + OBJECT_ATTRIBUTES attr; + HANDLE ret; + + attr.Length = sizeof(attr); + attr.RootDirectory = root; + attr.ObjectName = &nameW; + attr.Attributes = 0; + attr.SecurityDescriptor = NULL; + attr.SecurityQualityOfService = NULL; + + return NtOpenKeyEx( &ret, MAXIMUM_ALLOWED, &attr, 0 ) ? 0 : ret; +} + +static HKEY open_hkcu_key( const char *name ) +{ + WCHAR bufferW[256]; + static HKEY hkcu; + + if (!hkcu) + { + char buffer[256]; + DWORD_PTR sid_data[(sizeof(TOKEN_USER) + SECURITY_MAX_SID_SIZE) / sizeof(DWORD_PTR)]; + DWORD i, len = sizeof(sid_data); + SID *sid; + + if (NtQueryInformationToken( GetCurrentThreadEffectiveToken(), TokenUser, sid_data, len, &len )) + return 0; + + sid = ((TOKEN_USER *)sid_data)->User.Sid; + len = sprintf( buffer, "\\Registry\\User\\S-%u-%u", sid->Revision, + MAKELONG( MAKEWORD( sid->IdentifierAuthority.Value[5], + sid->IdentifierAuthority.Value[4] ), + MAKEWORD( sid->IdentifierAuthority.Value[3], + sid->IdentifierAuthority.Value[2] ))); + for (i = 0; i < sid->SubAuthorityCount; i++) + len += sprintf( buffer + len, "-%u", sid->SubAuthority[i] ); + + ascii_to_unicode( bufferW, buffer, len ); + hkcu = reg_open_key( NULL, bufferW, len * sizeof(WCHAR) ); + } + + return reg_open_key( hkcu, bufferW, asciiz_to_unicode( bufferW, name ) - sizeof(WCHAR) ); +} + +static ULONG query_reg_value( HKEY hkey, const WCHAR *name, KEY_VALUE_PARTIAL_INFORMATION *info, ULONG size ) +{ + unsigned int name_size = name ? lstrlenW( name ) * sizeof(WCHAR) : 0; + UNICODE_STRING nameW = { name_size, name_size, (WCHAR *)name }; + + if (NtQueryValueKey( hkey, &nameW, KeyValuePartialInformation, + info, size, &size )) + return 0; + + return size - FIELD_OFFSET(KEY_VALUE_PARTIAL_INFORMATION, Data); +} + +static DWORD get_config_key( HKEY defkey, HKEY appkey, const char *name, WCHAR *buffer, DWORD size ) +{ + WCHAR nameW[128]; + char buf[2048]; + KEY_VALUE_PARTIAL_INFORMATION *info = (void *)buf; + + asciiz_to_unicode( nameW, name ); + + if (appkey && query_reg_value( appkey, nameW, info, sizeof(buf) )) + { + size = min( info->DataLength, size - sizeof(WCHAR) ); + memcpy( buffer, info->Data, size ); + buffer[size / sizeof(WCHAR)] = 0; + return 0; + } + + if (defkey && query_reg_value( defkey, nameW, info, sizeof(buf) )) + { + size = min( info->DataLength, size - sizeof(WCHAR) ); + memcpy( buffer, info->Data, size ); + buffer[size / sizeof(WCHAR)] = 0; + return 0; + } + + return ERROR_FILE_NOT_FOUND; +} + +static void wayland_read_wm_settings(void) +{ + static const WCHAR x11driverW[] = {'\\','X','1','1',' ','D','r','i','v','e','r',0}; + WCHAR buffer[MAX_PATH + 16], *p, *appname; + HKEY hkey, appkey = 0; + DWORD len; + + /* @@ Wine registry key: HKCU\Software\Wine\X11 Driver */ + hkey = open_hkcu_key( "Software\\Wine\\X11 Driver" ); + + /* open the app-specific key */ + appname = RtlGetCurrentPeb()->ProcessParameters->ImagePathName.Buffer; + if ((p = wcsrchr( appname, '/' ))) appname = p + 1; + if ((p = wcsrchr( appname, '\\' ))) appname = p + 1; + len = lstrlenW( appname ); + + if (len && len < MAX_PATH) + { + HKEY tmpkey; + int i; + for (i = 0; appname[i]; i++) buffer[i] = RtlDowncaseUnicodeChar( appname[i] ); + buffer[i] = 0; + appname = buffer; + memcpy( appname + i, x11driverW, sizeof(x11driverW) ); + /* @@ Wine registry key: HKCU\Software\Wine\AppDefaults\app.exe\X11 Driver */ + if ((tmpkey = open_hkcu_key( "Software\\Wine\\AppDefaults" ))) + { + appkey = reg_open_key( tmpkey, appname, lstrlenW( appname ) * sizeof(WCHAR) ); + NtClose( tmpkey ); + } + } + + process_wayland.managed_mode = TRUE; + if (!get_config_key( hkey, appkey, "Managed", buffer, sizeof(buffer) )) + process_wayland.managed_mode = IS_OPTION_TRUE( buffer[0] ); + + process_wayland.decorated_mode = TRUE; + if (!get_config_key( hkey, appkey, "Decorated", buffer, sizeof(buffer) )) + process_wayland.decorated_mode = IS_OPTION_TRUE( buffer[0] ); + + if (appkey) NtClose( appkey ); + if (hkey) NtClose( hkey ); + + TRACE( "managed=%d decorated=%d\n", process_wayland.managed_mode, process_wayland.decorated_mode ); +} + +#ifdef SONAME_LIBDBUS_1 + +#define WAYLAND_DBUS_FUNCS \ + DO_FUNC(dbus_bus_get_private); \ + DO_FUNC(dbus_connection_close); \ + DO_FUNC(dbus_connection_flush); \ + DO_FUNC(dbus_connection_send_with_reply_and_block); \ + DO_FUNC(dbus_connection_unref); \ + DO_FUNC(dbus_error_free); \ + DO_FUNC(dbus_error_init); \ + DO_FUNC(dbus_message_iter_append_basic); \ + DO_FUNC(dbus_message_iter_get_arg_type); \ + DO_FUNC(dbus_message_iter_get_basic); \ + DO_FUNC(dbus_message_iter_init); \ + DO_FUNC(dbus_message_iter_init_append); \ + DO_FUNC(dbus_message_iter_next); \ + DO_FUNC(dbus_message_iter_recurse); \ + DO_FUNC(dbus_message_new_method_call); \ + DO_FUNC(dbus_message_unref); \ + DO_FUNC(dbus_set_error_const) + +#define DO_FUNC(f) static typeof(f) *p_##f +WAYLAND_DBUS_FUNCS; +#undef DO_FUNC + +static BOOL wayland_load_dbus_functions(void) +{ + void *handle; + + if (!(handle = dlopen(SONAME_LIBDBUS_1, RTLD_NOW))) return FALSE; + +#define DO_FUNC(f) if (!(p_##f = dlsym(handle, #f))) return FALSE + WAYLAND_DBUS_FUNCS; +#undef DO_FUNC + return TRUE; +} + +static BOOL wayland_query_dark_theme(void) +{ + static const char *bus_name = "org.freedesktop.portal.Desktop"; + static const char *path = "/org/freedesktop/portal/desktop"; + static const char *iface = "org.freedesktop.portal.Settings"; + static const char *namespace = "org.freedesktop.appearance"; + static const char *key = "color-scheme"; + DBusConnection *connection; + DBusMessage *request, *reply; + DBusMessageIter iter, variant; + DBusError error; + dbus_uint32_t value = 0; + BOOL dark = FALSE; + + if (!wayland_load_dbus_functions()) return FALSE; + + p_dbus_error_init(&error); + if (!(connection = p_dbus_bus_get_private(DBUS_BUS_SESSION, &error))) + { + TRACE("failed to connect to session bus: %s\n", error.message); + p_dbus_error_free(&error); + return FALSE; + } + p_dbus_error_free(&error); + + if ((request = p_dbus_message_new_method_call(bus_name, path, iface, "Read"))) + { + p_dbus_message_iter_init_append(request, &iter); + p_dbus_message_iter_append_basic(&iter, DBUS_TYPE_STRING, &namespace); + p_dbus_message_iter_append_basic(&iter, DBUS_TYPE_STRING, &key); + + p_dbus_error_init(&error); + reply = p_dbus_connection_send_with_reply_and_block(connection, request, 1000, &error); + p_dbus_message_unref(request); + if (reply) + { + p_dbus_error_free(&error); + p_dbus_message_iter_init(reply, &iter); + /* Unwrap any layers of variant wrapping. */ + while (p_dbus_message_iter_get_arg_type(&iter) == DBUS_TYPE_VARIANT) + { + p_dbus_message_iter_recurse(&iter, &variant); + iter = variant; + } + if (p_dbus_message_iter_get_arg_type(&iter) == DBUS_TYPE_UINT32) + p_dbus_message_iter_get_basic(&iter, &value); + p_dbus_message_unref(reply); + } + else + { + TRACE("failed to read color scheme: %s\n", error.message); + p_dbus_error_free(&error); + } + } + + p_dbus_connection_flush(connection); + p_dbus_connection_close(connection); + p_dbus_connection_unref(connection); + + dark = (value == 1); /* 0 = NoPreference, 1 = PreferDark, 2 = PreferLight */ + TRACE("color scheme value=%u dark=%d\n", value, dark); + return dark; +} + +#endif /* SONAME_LIBDBUS_1 */ + /********************************************************************** * xdg_wm_base handling */ @@ -70,6 +327,11 @@ static void wl_seat_handle_capabilities(void *data, struct wl_seat *seat, else if (!(caps & WL_SEAT_CAPABILITY_POINTER) && process_wayland.pointer.wl_pointer) wayland_pointer_deinit(); + if ((caps & WL_SEAT_CAPABILITY_TOUCH) && !process_wayland.touch.wl_touch) + wayland_touch_init(wl_seat_get_touch(seat)); + else if (!(caps & WL_SEAT_CAPABILITY_TOUCH) && process_wayland.touch.wl_touch) + wayland_touch_deinit(); + if ((caps & WL_SEAT_CAPABILITY_KEYBOARD) && !process_wayland.keyboard.wl_keyboard) wayland_keyboard_init(wl_seat_get_keyboard(seat)); else if (!(caps & WL_SEAT_CAPABILITY_KEYBOARD) && process_wayland.keyboard.wl_keyboard) @@ -113,6 +375,11 @@ static void registry_handle_global(void *data, struct wl_registry *registry, wl_list_for_each(output, &process_wayland.output_list, link) wayland_output_use_xdg_extension(output); } + else if (strcmp(interface, "zxdg_decoration_manager_v1") == 0) + { + process_wayland.zxdg_decoration_manager_v1 = + wl_registry_bind(registry, id, &zxdg_decoration_manager_v1_interface, 1); + } else if (strcmp(interface, "wl_compositor") == 0) { process_wayland.wl_compositor = @@ -255,6 +522,7 @@ static void registry_handle_global_remove(void *data, struct wl_registry *regist { TRACE("removing seat\n"); if (process_wayland.pointer.wl_pointer) wayland_pointer_deinit(); + if (process_wayland.touch.wl_touch) wayland_touch_deinit(); if (process_wayland.text_input.zwp_text_input_v3) wayland_text_input_deinit(); pthread_mutex_lock(&seat->mutex); wl_seat_release(seat->wl_seat); @@ -373,6 +641,18 @@ BOOL wayland_process_init(void) if (!process_wayland.wp_fractional_scale_manager_v1) ERR("Wayland compositor doesn't support wp_fractional_scale_manager_v1 (fractional scaling will be broken)\n"); +#ifdef SONAME_LIBDBUS_1 + process_wayland.dark_theme = wayland_query_dark_theme(); +#else + process_wayland.dark_theme = FALSE; +#endif + + process_wayland.sm_caption_height = NtUserGetSystemMetrics(SM_CYCAPTION); + process_wayland.sm_cx_size = NtUserGetSystemMetrics(SM_CXSIZE); + process_wayland.sm_menu_height = NtUserGetSystemMetrics(SM_CYMENU); + + wayland_read_wm_settings(); + process_wayland.initialized = TRUE; return TRUE; diff --git a/dlls/winewayland.drv/wayland_csd.c b/dlls/winewayland.drv/wayland_csd.c new file mode 100644 index 00000000000..cd4b53f2f02 --- /dev/null +++ b/dlls/winewayland.drv/wayland_csd.c @@ -0,0 +1,469 @@ +/* + * Wayland client-side window decorations + * + * Draws an Adwaita-style title bar into the window surface for windows + * that the compositor does not decorate with server-side decorations + * (e.g. GNOME/Mutter, which doesn't implement the xdg-decoration protocol). + * + * Copyright (c) 2026 cqwrteur + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#if 0 +#pragma makedep unix +#endif + +#include "config.h" + +#include <string.h> + +#include <fontconfig/fontconfig.h> +#include <ft2build.h> +#include FT_FREETYPE_H + +#include "waylanddrv.h" + +#include "wine/debug.h" + +WINE_DEFAULT_DEBUG_CHANNEL(waylanddrv); + +/* Adwaita light theme colors */ +#define CSD_LIGHT_BG_ACTIVE_TOP 0xfff6f5f4 +#define CSD_LIGHT_BG_ACTIVE_BOTTOM 0xffdeddda +#define CSD_LIGHT_BG_INACTIVE_TOP 0xfff6f5f4 +#define CSD_LIGHT_BG_INACTIVE_BOTTOM 0xffe8e7e6 +#define CSD_LIGHT_FG 0xff2e3436 +#define CSD_LIGHT_FG_INACTIVE 0xff92928f +#define CSD_LIGHT_BORDER 0xffc0bfbc +#define CSD_LIGHT_BUTTON_BG 0xffdcddda +#define CSD_LIGHT_BUTTON_FG 0xff2e3436 + +/* Adwaita dark theme colors */ +#define CSD_DARK_BG_ACTIVE_TOP 0xff383838 +#define CSD_DARK_BG_ACTIVE_BOTTOM 0xff2b2b2b +#define CSD_DARK_BG_INACTIVE_TOP 0xff2f2f2f +#define CSD_DARK_BG_INACTIVE_BOTTOM 0xff262626 +#define CSD_DARK_FG 0xffeeeeec +#define CSD_DARK_FG_INACTIVE 0xff9c9c99 +#define CSD_DARK_BORDER 0xff1c1c1c +#define CSD_DARK_BUTTON_BG 0xff414141 +#define CSD_DARK_BUTTON_FG 0xffeeeeec + +static FT_Library csd_ft_library; +static FT_Face csd_ft_face; +static char *csd_font_file; +static pthread_mutex_t csd_font_mutex = PTHREAD_MUTEX_INITIALIZER; + +static BOOL csd_font_init(void) +{ + FcPattern *pattern, *match; + FcChar8 *file = NULL; + FcConfig *config; + FcResult result; + BOOL ret = TRUE; + + pthread_mutex_lock(&csd_font_mutex); + if (csd_ft_library) goto out; + + if (!FcInit()) { ret = FALSE; goto out; } + if (!(config = FcInitLoadConfigAndFonts())) { ret = FALSE; goto out; } + + if (!(pattern = FcNameParse((const FcChar8 *)"sans-serif"))) + { + ret = FALSE; + goto out; + } + FcConfigSubstitute(config, pattern, FcMatchPattern); + FcDefaultSubstitute(pattern); + + if (!(match = FcFontMatch(config, pattern, &result))) + { + FcPatternDestroy(pattern); + ret = FALSE; + goto out; + } + if (FcPatternGetString(match, FC_FILE, 0, &file) != FcResultMatch || !file) + { + FcPatternDestroy(match); + FcPatternDestroy(pattern); + ret = FALSE; + goto out; + } + csd_font_file = strdup((const char *)file); + FcPatternDestroy(match); + FcPatternDestroy(pattern); + + if (FT_Init_FreeType(&csd_ft_library) || + FT_New_Face(csd_ft_library, csd_font_file, 0, &csd_ft_face) || + FT_Select_Charmap(csd_ft_face, FT_ENCODING_UNICODE)) + { + if (csd_ft_face) + { + FT_Done_Face(csd_ft_face); + csd_ft_face = NULL; + } + if (csd_ft_library) + { + FT_Done_FreeType(csd_ft_library); + csd_ft_library = NULL; + } + ret = FALSE; + } + +out: + pthread_mutex_unlock(&csd_font_mutex); + return ret; +} + +static void csd_put_pixel(UINT32 *pixels, int stride, int x, int y, UINT32 color) +{ + if (x < 0 || y < 0 || x >= stride) return; + pixels[y * stride + x] = color; +} + +static void csd_draw_hline(UINT32 *pixels, int stride, int x0, int x1, int y, UINT32 color) +{ + int x; + for (x = max(x0, 0); x < min(x1, stride); x++) csd_put_pixel(pixels, stride, x, y, color); +} + +static void csd_draw_vline(UINT32 *pixels, int stride, int y0, int y1, int x, UINT32 color) +{ + int y; + for (y = y0; y < y1; y++) csd_put_pixel(pixels, stride, x, y, color); +} + +static void csd_draw_circle(UINT32 *pixels, int stride, int cx, int cy, int radius, UINT32 color) +{ + int x, y; + for (y = -radius; y <= radius; y++) + { + for (x = -radius; x <= radius; x++) + { + if (x * x + y * y <= radius * radius) + csd_put_pixel(pixels, stride, cx + x, cy + y, color); + } + } +} + +static void csd_blend_pixel(UINT32 *pixels, int stride, int x, int y, UINT32 fg, BYTE alpha) +{ + UINT32 bg; + UINT32 r, g, b; + + if (x < 0 || y < 0 || x >= stride || !alpha) return; + + bg = pixels[y * stride + x]; + r = ((fg >> 16) & 0xff) * alpha + ((bg >> 16) & 0xff) * (255 - alpha); + g = ((fg >> 8) & 0xff) * alpha + ((bg >> 8) & 0xff) * (255 - alpha); + b = (fg & 0xff) * alpha + (bg & 0xff) * (255 - alpha); + pixels[y * stride + x] = 0xff000000 | ((r / 255) << 16) | ((g / 255) << 8) | (b / 255); +} + +static int csd_text_width(const WCHAR *text) +{ + int width = 0; + while (*text) + { + FT_UInt glyph = FT_Get_Char_Index(csd_ft_face, *text++); + if (glyph) + { + FT_Load_Glyph(csd_ft_face, glyph, FT_LOAD_DEFAULT); + width += csd_ft_face->glyph->advance.x >> 6; + } + } + return width; +} + +static void csd_draw_text(UINT32 *pixels, int stride, const WCHAR *text, int x, int y, UINT32 color) +{ + int pen = x; + while (*text) + { + FT_UInt glyph = FT_Get_Char_Index(csd_ft_face, *text++); + if (!glyph) continue; + if (FT_Load_Glyph(csd_ft_face, glyph, FT_LOAD_DEFAULT)) continue; + if (FT_Render_Glyph(csd_ft_face->glyph, FT_RENDER_MODE_NORMAL)) continue; + + { + FT_Bitmap *bitmap = &csd_ft_face->glyph->bitmap; + int glyph_x = pen + csd_ft_face->glyph->bitmap_left; + /* bitmap_top is the distance from the baseline up to the top of + * the bitmap, so the bitmap's top edge in buffer coordinates is + * baseline - bitmap_top. */ + int glyph_y = y - csd_ft_face->glyph->bitmap_top; + int i, j; + + for (j = 0; j < bitmap->rows; j++) + { + for (i = 0; i < bitmap->width; i++) + { + BYTE alpha = bitmap->buffer[j * bitmap->width + i]; + csd_blend_pixel(pixels, stride, glyph_x + i, glyph_y + j, color, alpha); + } + } + } + pen += csd_ft_face->glyph->advance.x >> 6; + } +} + +enum csd_button_type +{ + CSD_BUTTON_MINIMIZE, + CSD_BUTTON_MAXIMIZE, + CSD_BUTTON_CLOSE +}; + +static void csd_clear_rounded_corner(UINT32 *pixels, int stride, int x0, int y0, int radius, int cx, int cy) +{ + int x, y; + + for (y = 0; y < radius; y++) + { + for (x = 0; x < radius; x++) + { + int dx = x - cx, dy = y - cy; + if (dx * dx + dy * dy > radius * radius) + pixels[(y0 + y) * stride + (x0 + x)] = 0; /* transparent */ + } + } +} + +static void csd_draw_button(UINT32 *pixels, int stride, const RECT *rect, + enum csd_button_type type, UINT32 button_bg, + UINT32 button_fg) +{ + int cx = (rect->left + rect->right) / 2; + int cy = (rect->top + rect->bottom) / 2; + int size = min(rect->right - rect->left, rect->bottom - rect->top); + int radius = size * 2 / 5; + int s = radius * 2 / 3; + + csd_draw_circle(pixels, stride, cx, cy, radius, button_bg); + + switch (type) + { + case CSD_BUTTON_MINIMIZE: + csd_draw_hline(pixels, stride, cx - s, cx + s + 1, cy, button_fg); + csd_draw_hline(pixels, stride, cx - s, cx + s + 1, cy + 1, button_fg); + break; + case CSD_BUTTON_MAXIMIZE: + csd_draw_hline(pixels, stride, cx - s, cx + s + 1, cy - s, button_fg); + csd_draw_hline(pixels, stride, cx - s, cx + s + 1, cy + s, button_fg); + csd_draw_vline(pixels, stride, cy - s, cy + s + 1, cx - s, button_fg); + csd_draw_vline(pixels, stride, cy - s, cy + s + 1, cx + s, button_fg); + break; + case CSD_BUTTON_CLOSE: + { + int i; + for (i = 0; i <= s; i++) + { + csd_put_pixel(pixels, stride, cx - s + i, cy - s + i, button_fg); + csd_put_pixel(pixels, stride, cx + s - i, cy - s + i, button_fg); + csd_put_pixel(pixels, stride, cx - s + i, cy + s - i, button_fg); + csd_put_pixel(pixels, stride, cx + s - i, cy + s - i, button_fg); + } + break; + } + } +} + +/********************************************************************** + * wayland_csd_should_draw + * + * Return TRUE if a client-side title bar should be drawn for the window. + */ +BOOL wayland_csd_should_draw(struct wayland_win_data *data) +{ + struct wayland_surface *surface = data->wayland_surface; + + if (!process_wayland.managed_mode || !process_wayland.decorated_mode) return FALSE; + if (!surface || !wayland_surface_is_toplevel(surface)) return FALSE; + if (surface->decoration_mode == ZXDG_TOPLEVEL_DECORATION_V1_MODE_SERVER_SIDE) return FALSE; + /* only draw a title bar if the window actually has a caption area */ + if (data->rects.window.top == data->rects.client.top) return FALSE; + return TRUE; +} + +BOOL wayland_csd_should_draw_win(HWND hwnd) +{ + struct wayland_win_data *data; + BOOL ret = FALSE; + + if ((data = wayland_win_data_get(hwnd))) + { + ret = wayland_csd_should_draw(data); + wayland_win_data_release(data); + } + return ret; +} + +void wayland_csd_set_active(HWND hwnd, BOOL active) +{ + struct wayland_win_data *data; + + if (!(data = wayland_win_data_get(hwnd))) return; + if (data->csd_active != active) + { + data->csd_active = active; + wayland_win_data_release(data); + NtUserExposeWindowSurface(hwnd, 0, NULL); + return; + } + wayland_win_data_release(data); +} + +/********************************************************************** + * wayland_csd_paint + * + * Paint an Adwaita-style title bar over the caption strip of the window + * surface. The caption strip occupies the rows [0, client_top) of the + * surface buffer, where client_top is the offset of the client area + * within the surface. + * + * This must not call back into win32u, since it runs from the window + * surface flush which is itself invoked from win32u. All data it needs + * is cached in the wayland_win_data. + */ +void wayland_csd_paint(struct wayland_shm_buffer *buffer, struct wayland_win_data *data, int client_top) +{ + UINT32 *pixels = buffer->map_data; + int stride = buffer->width; + RECT btn_rect; + UINT32 top_color, bottom_color, fg_color, fg_inactive, border, button_bg, button_fg; + WCHAR *title = data->csd_title; + int title_len, i; + INT caption_cy, btn_cx; + BOOL active = data->csd_active; + DWORD style = data->csd_style; + DWORD ex_style = data->csd_ex_style; + int bar_height, content_w; + + if (process_wayland.dark_theme) + { + top_color = active ? CSD_DARK_BG_ACTIVE_TOP : CSD_DARK_BG_INACTIVE_TOP; + bottom_color = active ? CSD_DARK_BG_ACTIVE_BOTTOM : CSD_DARK_BG_INACTIVE_BOTTOM; + fg_color = CSD_DARK_FG; + fg_inactive = CSD_DARK_FG_INACTIVE; + border = CSD_DARK_BORDER; + button_bg = CSD_DARK_BUTTON_BG; + button_fg = CSD_DARK_BUTTON_FG; + } + else + { + top_color = active ? CSD_LIGHT_BG_ACTIVE_TOP : CSD_LIGHT_BG_INACTIVE_TOP; + bottom_color = active ? CSD_LIGHT_BG_ACTIVE_BOTTOM : CSD_LIGHT_BG_INACTIVE_BOTTOM; + fg_color = CSD_LIGHT_FG; + fg_inactive = CSD_LIGHT_FG_INACTIVE; + border = CSD_LIGHT_BORDER; + button_bg = CSD_LIGHT_BUTTON_BG; + button_fg = CSD_LIGHT_BUTTON_FG; + } + + bar_height = min(client_top, buffer->height); + if (bar_height <= 0) return; + + /* The buffer covers the visible rect rounded up to 128 pixels, but only + * the actual visible rect (the window content) is displayed. Position + * the title and buttons within that content area. */ + content_w = data->rects.visible.right - data->rects.visible.left; + + TRACE("hwnd=%p painting titlebar height=%d active=%d buffer=%dx%d content=%dx%d dark=%d\n", + data->hwnd, bar_height, active, buffer->width, buffer->height, content_w, bar_height, process_wayland.dark_theme); + + /* vertical gradient */ + for (i = 0; i < bar_height; i++) + { + int r, g, b, denom = bar_height - 1; + int tr = (int)((top_color >> 16) & 0xff), br = (int)((bottom_color >> 16) & 0xff); + int tg = (int)((top_color >> 8) & 0xff), bg = (int)((bottom_color >> 8) & 0xff); + int tb = (int)(top_color & 0xff), bb = (int)(bottom_color & 0xff); + if (denom <= 0) denom = 1; + r = tr + (br - tr) * i / denom; + g = tg + (bg - tg) * i / denom; + b = tb + (bb - tb) * i / denom; + csd_draw_hline(pixels, stride, 0, buffer->width, i, + 0xff000000 | (r << 16) | (g << 8) | b); + } + + /* bottom border */ + if (bar_height < buffer->height) + csd_draw_hline(pixels, stride, 0, buffer->width, bar_height, border); + + /* window title, centered */ + title_len = lstrlenW(title); + if (title_len > 0 && csd_font_init()) + { + int width, x, baseline, font_size; + + pthread_mutex_lock(&csd_font_mutex); + + /* Scale the title with the caption height so it is prominent + * regardless of the window's DPI. */ + font_size = bar_height * 3 / 5; + if (font_size < 8) font_size = 8; + if (font_size > bar_height - 6) font_size = bar_height - 6; + FT_Set_Pixel_Sizes(csd_ft_face, 0, font_size); + width = csd_text_width(title); + x = (content_w - width) / 2; + if (x < 0) x = 0; + baseline = (bar_height - ((csd_ft_face->size->metrics.ascender - csd_ft_face->size->metrics.descender) >> 6)) / 2 + + (csd_ft_face->size->metrics.ascender >> 6); + TRACE("title=%s font_size=%d width=%d x=%d baseline=%d ascender=%d bar_height=%d\n", + wine_dbgstr_w(title), font_size, width, x, baseline, (int)(csd_ft_face->size->metrics.ascender >> 6), bar_height); + csd_draw_text(pixels, stride, title, x, baseline, active ? fg_color : fg_inactive); + + pthread_mutex_unlock(&csd_font_mutex); + } + + /* buttons on the right, matching win32u caption hit-test positions */ + caption_cy = bar_height; + btn_cx = bar_height; + if (caption_cy < 1) caption_cy = bar_height; + + btn_rect.top = 0; + btn_rect.bottom = min(caption_cy, bar_height); + /* Inset from the right edge so the buttons stay clear of the rounded + * top-right corner. */ + btn_rect.right = content_w - bar_height / 3; + + if (style & WS_SYSMENU) + { + btn_rect.left = btn_rect.right - caption_cy; + csd_draw_button(pixels, stride, &btn_rect, CSD_BUTTON_CLOSE, button_bg, button_fg); + btn_rect.right = btn_rect.left; + } + if ((style & (WS_MINIMIZEBOX | WS_MAXIMIZEBOX)) && !(ex_style & WS_EX_TOOLWINDOW)) + { + btn_rect.left = btn_rect.right - btn_cx; + csd_draw_button(pixels, stride, &btn_rect, CSD_BUTTON_MAXIMIZE, button_bg, button_fg); + btn_rect.right = btn_rect.left; + btn_rect.left = btn_rect.right - btn_cx; + csd_draw_button(pixels, stride, &btn_rect, CSD_BUTTON_MINIMIZE, button_bg, button_fg); + } + + /* Round the top corners of the window so it matches the desktop theme. + * The circle that rounds a corner is centered just inside the window: + * at the bottom-right of the top-left corner region and at the + * bottom-left of the top-right corner region. Skip the rounding when + * maximized so the window meets the screen edges squarely. */ + if (bar_height >= 9 && !(style & WS_MAXIMIZE)) + { + int corner = bar_height / 3; + csd_clear_rounded_corner(pixels, stride, 0, 0, corner, corner, corner); + csd_clear_rounded_corner(pixels, stride, content_w - corner, 0, corner, 0, corner); + } +} diff --git a/dlls/winewayland.drv/wayland_keyboard.c b/dlls/winewayland.drv/wayland_keyboard.c index 0a6eea2fa73..c4d508c258c 100644 --- a/dlls/winewayland.drv/wayland_keyboard.c +++ b/dlls/winewayland.drv/wayland_keyboard.c @@ -804,6 +804,8 @@ static void keyboard_handle_enter(void *private, struct wl_keyboard *wl_keyboard keyboard->focused_hwnd = hwnd; pthread_mutex_unlock(&keyboard->mutex); + wayland_csd_set_active(hwnd, TRUE); + NtUserPostMessage(keyboard->focused_hwnd, WM_INPUTLANGCHANGEREQUEST, 0 /*FIXME*/, (LPARAM)keyboard_hkl); @@ -842,6 +844,8 @@ static void keyboard_handle_leave(void *data, struct wl_keyboard *wl_keyboard, keyboard->focused_hwnd = NULL; pthread_mutex_unlock(&keyboard->mutex); + wayland_csd_set_active(hwnd, FALSE); + /* The spec for the leave event tells us to treat all keys as released, * and for any key repetition to stop. */ release_all_keys(hwnd); diff --git a/dlls/winewayland.drv/wayland_pointer.c b/dlls/winewayland.drv/wayland_pointer.c index 0c190a9a48a..48e3255490a 100644 --- a/dlls/winewayland.drv/wayland_pointer.c +++ b/dlls/winewayland.drv/wayland_pointer.c @@ -1083,3 +1083,19 @@ BOOL WAYLAND_ClipCursor(const RECT *clip, BOOL reset) return TRUE; } + +/*********************************************************************** + * WAYLAND_GetTouchCapabilities + */ +UINT WAYLAND_GetTouchCapabilities(void) +{ + UINT caps = 0; + + pthread_mutex_lock(&process_wayland.touch.mutex); + if (process_wayland.touch.wl_touch) caps = NID_INTEGRATED_TOUCH | NID_MULTI_INPUT | NID_READY; + pthread_mutex_unlock(&process_wayland.touch.mutex); + + TRACE("caps=%#x\n", caps); + + return MAKELONG(caps, WAYLAND_TOUCH_MAX_SLOTS); +} diff --git a/dlls/winewayland.drv/wayland_surface.c b/dlls/winewayland.drv/wayland_surface.c index e02028ad689..d15d2e9a4f8 100644 --- a/dlls/winewayland.drv/wayland_surface.c +++ b/dlls/winewayland.drv/wayland_surface.c @@ -137,6 +137,37 @@ static const struct xdg_toplevel_listener xdg_toplevel_listener = xdg_toplevel_handle_close }; +static void zxdg_toplevel_decoration_handle_configure(void *private, + struct zxdg_toplevel_decoration_v1 *decoration, + uint32_t mode) +{ + struct wayland_surface *surface; + struct wayland_win_data *data; + HWND hwnd = private; + BOOL changed = FALSE; + + TRACE("hwnd=%p mode=%u\n", hwnd, mode); + + if (!(data = wayland_win_data_get(hwnd))) return; + if ((surface = data->wayland_surface) && wayland_surface_is_toplevel(surface) && + surface->xdg_toplevel_decoration == decoration && surface->decoration_mode != mode) + { + surface->decoration_mode = mode; + surface->decoration_frame_pending = TRUE; + changed = TRUE; + } + wayland_win_data_release(data); + + /* A change in the effective decoration mode affects the visible rect and + * window geometry, so re-run the configure handling. */ + if (changed) NtUserPostMessage(hwnd, WM_WAYLAND_CONFIGURE, 0, 0); +} + +static const struct zxdg_toplevel_decoration_v1_listener zxdg_toplevel_decoration_listener = +{ + zxdg_toplevel_decoration_handle_configure +}; + void wp_fractional_scale_handle_scale(void* user_data, struct wp_fractional_scale_v1 *fractional_scale_v1, uint32_t scale_fixed) @@ -346,6 +377,22 @@ void wayland_surface_make_toplevel(struct wayland_surface *surface) if (!surface->xdg_toplevel) goto err; xdg_toplevel_add_listener(surface->xdg_toplevel, &xdg_toplevel_listener, surface->hwnd); + if (process_wayland.zxdg_decoration_manager_v1) + { + surface->xdg_toplevel_decoration = + zxdg_decoration_manager_v1_get_toplevel_decoration( + process_wayland.zxdg_decoration_manager_v1, surface->xdg_toplevel); + if (!surface->xdg_toplevel_decoration) goto err; + zxdg_toplevel_decoration_v1_add_listener(surface->xdg_toplevel_decoration, + &zxdg_toplevel_decoration_listener, + surface->hwnd); + /* Ask for server-side decorations so the compositor draws the + * system-themed title bar, like the window manager does on X11. */ + zxdg_toplevel_decoration_v1_set_mode(surface->xdg_toplevel_decoration, + ZXDG_TOPLEVEL_DECORATION_V1_MODE_SERVER_SIDE); + surface->decoration_mode = ZXDG_TOPLEVEL_DECORATION_V1_MODE_SERVER_SIDE; + } + if (process_name) xdg_toplevel_set_app_id(surface->xdg_toplevel, process_name); @@ -444,6 +491,12 @@ void wayland_surface_clear_role(struct wayland_surface *surface) surface->xdg_toplevel_icon = NULL; } + if (surface->xdg_toplevel_decoration) + { + zxdg_toplevel_decoration_v1_destroy(surface->xdg_toplevel_decoration); + surface->xdg_toplevel_decoration = NULL; + } + if (surface->xdg_toplevel) { xdg_toplevel_destroy(surface->xdg_toplevel); @@ -675,9 +728,27 @@ static void wayland_surface_reconfigure_size(struct wayland_surface *surface, TRACE("hwnd=%p size=%dx%d\n", surface->hwnd, width, height); if (width != 0 && height != 0) + { + /* The buffer covers the visible rect rounded up to the nearest + * 128 pixels, so its aspect ratio can differ from that of the + * surface (visible rect / scale). Crop the buffer to the actual + * window content so scaling it to the surface size doesn't distort + * the image. */ + int content_w = surface->window.rect.right - surface->window.rect.left; + int content_h = surface->window.rect.bottom - surface->window.rect.top; + + wp_viewport_set_source(surface->wp_viewport, + wl_fixed_from_int(0), wl_fixed_from_int(0), + wl_fixed_from_int(content_w), wl_fixed_from_int(content_h)); wp_viewport_set_destination(surface->wp_viewport, width, height); + } else + { + wp_viewport_set_source(surface->wp_viewport, + wl_fixed_from_int(-1), wl_fixed_from_int(-1), + wl_fixed_from_int(-1), wl_fixed_from_int(-1)); wp_viewport_set_destination(surface->wp_viewport, -1, -1); + } } /********************************************************************** diff --git a/dlls/winewayland.drv/wayland_touch.c b/dlls/winewayland.drv/wayland_touch.c new file mode 100644 index 00000000000..e13d5994639 --- /dev/null +++ b/dlls/winewayland.drv/wayland_touch.c @@ -0,0 +1,232 @@ +/* + * Wayland touch handling + * + * Copyright (c) 2026 cqwrteur + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#if 0 +#pragma makedep unix +#endif + +#include "config.h" + +#include <stdlib.h> +#include <string.h> + +#include "waylanddrv.h" +#include "wine/server.h" +#include "wine/debug.h" + +WINE_DEFAULT_DEBUG_CHANNEL(input); + +static struct wayland_touch_slot *wayland_touch_find_slot(int32_t id) +{ + struct wayland_touch *touch = &process_wayland.touch; + unsigned int i; + + for (i = 0; i < WAYLAND_TOUCH_MAX_SLOTS; i++) + if (touch->slots[i].used && touch->slots[i].id == id) return &touch->slots[i]; + return NULL; +} + +static struct wayland_touch_slot *wayland_touch_find_free_slot(void) +{ + struct wayland_touch *touch = &process_wayland.touch; + unsigned int i; + + for (i = 0; i < WAYLAND_TOUCH_MAX_SLOTS; i++) + if (!touch->slots[i].used) return &touch->slots[i]; + return NULL; +} + +static void send_touch_input(struct wayland_touch_slot *slot, unsigned int message) +{ + INPUT input = {0}; + RECT virtual; + POINT screen, pos; + struct wayland_surface *surface; + struct wayland_win_data *data; + UINT flags = 0; + + if (!(data = wayland_win_data_get(slot->hwnd))) return; + if (!(surface = data->wayland_surface)) + { + wayland_win_data_release(data); + return; + } + + screen.x = wl_fixed_to_double(slot->x); + screen.y = wl_fixed_to_double(slot->y); + screen = map_point_from_surface(surface, screen); + screen.x += surface->window.rect.left; + screen.y += surface->window.rect.top; + + wayland_win_data_release(data); + + virtual = NtUserGetVirtualScreenRect(MDT_RAW_DPI); + pos.x = screen.x * 65535 / (virtual.right - virtual.left); + pos.y = screen.y * 65535 / (virtual.bottom - virtual.top); + + input.type = INPUT_HARDWARE; + input.hi.uMsg = message; + if (message == WM_POINTERDOWN) flags |= POINTER_MESSAGE_FLAG_NEW; + input.hi.wParamL = slot->id; + input.hi.wParamH = POINTER_MESSAGE_FLAG_INRANGE | POINTER_MESSAGE_FLAG_INCONTACT | flags; + + TRACE("hwnd=%p id=%d message=%x screen_xy=%d,%d\n", slot->hwnd, slot->id, message, screen.x, screen.y); + + NtUserSendHardwareInput(slot->hwnd, 0, &input, MAKELPARAM(pos.x, pos.y)); +} + +static void touch_handle_down(void *data, struct wl_touch *wl_touch, uint32_t serial, + uint32_t time, struct wl_surface *wl_surface, int32_t id, + wl_fixed_t x, wl_fixed_t y) +{ + struct wayland_touch_slot *slot; + + InterlockedExchange(&process_wayland.input_serial, serial); + + if (!wl_surface) return; + + pthread_mutex_lock(&process_wayland.touch.mutex); + slot = wayland_touch_find_slot(id); + if (!slot) slot = wayland_touch_find_free_slot(); + if (slot) + { + slot->id = id; + slot->hwnd = wl_surface_get_user_data(wl_surface); + slot->x = x; + slot->y = y; + slot->used = TRUE; + process_wayland.touch.serial = serial; + process_wayland.touch.serial_id = id; + process_wayland.touch.serial_hwnd = slot->hwnd; + } + pthread_mutex_unlock(&process_wayland.touch.mutex); + + if (!slot) return; + + send_touch_input(slot, WM_POINTERDOWN); +} + +static void touch_handle_up(void *data, struct wl_touch *wl_touch, uint32_t serial, + uint32_t time, int32_t id) +{ + struct wayland_touch_slot *slot; + + InterlockedExchange(&process_wayland.input_serial, serial); + + pthread_mutex_lock(&process_wayland.touch.mutex); + slot = wayland_touch_find_slot(id); + if (slot) + { + slot->used = FALSE; + if (process_wayland.touch.serial_id == id) + { + process_wayland.touch.serial = 0; + process_wayland.touch.serial_id = -1; + process_wayland.touch.serial_hwnd = NULL; + } + } + pthread_mutex_unlock(&process_wayland.touch.mutex); + + if (!slot) return; + + send_touch_input(slot, WM_POINTERUP); +} + +static void touch_handle_motion(void *data, struct wl_touch *wl_touch, uint32_t time, + int32_t id, wl_fixed_t x, wl_fixed_t y) +{ + struct wayland_touch_slot *slot; + + pthread_mutex_lock(&process_wayland.touch.mutex); + slot = wayland_touch_find_slot(id); + if (slot) + { + slot->x = x; + slot->y = y; + } + pthread_mutex_unlock(&process_wayland.touch.mutex); + + if (!slot) return; + + send_touch_input(slot, WM_POINTERUPDATE); +} + +static void touch_handle_cancel(void *data, struct wl_touch *wl_touch) +{ + struct wayland_touch_slot *slot; + unsigned int i; + + for (i = 0; i < WAYLAND_TOUCH_MAX_SLOTS; i++) + { + pthread_mutex_lock(&process_wayland.touch.mutex); + slot = &process_wayland.touch.slots[i]; + if (!slot->used) + { + pthread_mutex_unlock(&process_wayland.touch.mutex); + continue; + } + slot->used = FALSE; + if (process_wayland.touch.serial_id == slot->id) + { + process_wayland.touch.serial = 0; + process_wayland.touch.serial_id = -1; + process_wayland.touch.serial_hwnd = NULL; + } + pthread_mutex_unlock(&process_wayland.touch.mutex); + send_touch_input(slot, WM_POINTERUP); + } +} + +static void touch_handle_frame(void *data, struct wl_touch *wl_touch) +{ +} + +static const struct wl_touch_listener touch_listener = +{ + touch_handle_down, + touch_handle_up, + touch_handle_motion, + touch_handle_frame, + touch_handle_cancel +}; + +void wayland_touch_init(struct wl_touch *wl_touch) +{ + struct wayland_touch *touch = &process_wayland.touch; + + pthread_mutex_lock(&touch->mutex); + touch->wl_touch = wl_touch; + pthread_mutex_unlock(&touch->mutex); + wl_touch_add_listener(touch->wl_touch, &touch_listener, NULL); +} + +void wayland_touch_deinit(void) +{ + struct wayland_touch *touch = &process_wayland.touch; + + pthread_mutex_lock(&touch->mutex); + if (touch->wl_touch) + { + wl_touch_release(touch->wl_touch); + touch->wl_touch = NULL; + } + memset(touch->slots, 0, sizeof(touch->slots)); + pthread_mutex_unlock(&touch->mutex); +} diff --git a/dlls/winewayland.drv/waylanddrv.h b/dlls/winewayland.drv/waylanddrv.h index 303efce2d44..c7fc4c34053 100644 --- a/dlls/winewayland.drv/waylanddrv.h +++ b/dlls/winewayland.drv/waylanddrv.h @@ -34,6 +34,7 @@ #include "relative-pointer-unstable-v1-client-protocol.h" #include "text-input-unstable-v3-client-protocol.h" #include "viewporter-client-protocol.h" +#include "xdg-decoration-unstable-v1-client-protocol.h" #include "xdg-output-unstable-v1-client-protocol.h" #include "xdg-shell-client-protocol.h" #include "wlr-data-control-unstable-v1-client-protocol.h" @@ -123,6 +124,26 @@ struct wayland_pointer pthread_mutex_t mutex; }; +#define WAYLAND_TOUCH_MAX_SLOTS 16 + +struct wayland_touch_slot +{ + int32_t id; + HWND hwnd; + wl_fixed_t x, y; + BOOL used; +}; + +struct wayland_touch +{ + struct wl_touch *wl_touch; + struct wayland_touch_slot slots[WAYLAND_TOUCH_MAX_SLOTS]; + uint32_t serial; + int32_t serial_id; + HWND serial_hwnd; + pthread_mutex_t mutex; +}; + struct wayland_text_input { struct zwp_text_input_v3 *zwp_text_input_v3; @@ -175,6 +196,7 @@ struct wayland struct wl_shm *wl_shm; struct wp_viewporter *wp_viewporter; struct wl_subcompositor *wl_subcompositor; + struct zxdg_decoration_manager_v1 *zxdg_decoration_manager_v1; struct wp_fractional_scale_manager_v1 *wp_fractional_scale_manager_v1; struct zwp_pointer_constraints_v1 *zwp_pointer_constraints_v1; struct zwp_relative_pointer_manager_v1 *zwp_relative_pointer_manager_v1; @@ -188,6 +210,7 @@ struct wayland struct wayland_seat seat; struct wayland_keyboard keyboard; struct wayland_pointer pointer; + struct wayland_touch touch; struct wayland_text_input text_input; struct wayland_data_device data_device; #ifdef WL_FIXES_ACK_GLOBAL_REMOVE @@ -197,6 +220,12 @@ struct wayland /* Protects the output_list and the wayland_output.current states. */ pthread_mutex_t output_mutex; LONG input_serial; + BOOL dark_theme; + INT sm_caption_height; + INT sm_cx_size; + INT sm_menu_height; + BOOL managed_mode; + BOOL decorated_mode; }; struct wayland_output_mode @@ -291,6 +320,8 @@ struct wayland_surface struct xdg_surface *xdg_surface; struct xdg_toplevel *xdg_toplevel; struct xdg_toplevel_icon_v1 *xdg_toplevel_icon; + struct zxdg_toplevel_decoration_v1 *xdg_toplevel_decoration; + uint32_t decoration_mode; }; struct { @@ -302,6 +333,7 @@ struct wayland_surface struct wayland_surface_config pending, requested, processing, current; BOOL resizing; + BOOL decoration_frame_pending; struct wayland_window_config window; int content_width, content_height; HCURSOR hcursor; @@ -386,11 +418,28 @@ struct wayland_win_data BOOL resizeable; BOOL managed; BOOL layered_attribs_set; + /* Cached data used for painting client-side decorations. These are + * updated from safe driver callbacks so that the paint routine doesn't + * need to call back into win32u (which would deadlock the surface flush). */ + WCHAR csd_title[256]; + DWORD csd_style; + DWORD csd_ex_style; + BOOL csd_active; + BOOL csd_has_menu; }; struct wayland_win_data *wayland_win_data_get(HWND hwnd); void wayland_win_data_release(struct wayland_win_data *data); +/********************************************************************** + * Wayland client-side decorations + */ + +BOOL wayland_csd_should_draw(struct wayland_win_data *data); +BOOL wayland_csd_should_draw_win(HWND hwnd); +void wayland_csd_paint(struct wayland_shm_buffer *buffer, struct wayland_win_data *data, int client_top); +void wayland_csd_set_active(HWND hwnd, BOOL active); + struct wayland_client_surface *get_client_surface(HWND hwnd); void set_client_surface(HWND hwnd, struct wayland_client_surface *client); BOOL set_window_surface_contents(HWND hwnd, struct wayland_shm_buffer *shm_buffer, HRGN damage_region); @@ -415,6 +464,13 @@ void wayland_pointer_init(struct wl_pointer *wl_pointer); void wayland_pointer_deinit(void); void wayland_pointer_clear_constraint(void); +/********************************************************************** + * Wayland touch + */ + +void wayland_touch_init(struct wl_touch *wl_touch); +void wayland_touch_deinit(void); + /********************************************************************** * Wayland text input */ @@ -454,6 +510,7 @@ RGNDATA *get_region_data(HRGN region); LRESULT WAYLAND_ClipboardWindowProc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam); BOOL WAYLAND_ClipCursor(const RECT *clip, BOOL reset); +UINT WAYLAND_GetTouchCapabilities(void); LRESULT WAYLAND_DesktopWindowProc(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp); void WAYLAND_DestroyWindow(HWND hwnd); BOOL WAYLAND_SetIMECompositionRect(HWND hwnd, RECT rect); @@ -463,6 +520,7 @@ void WAYLAND_SetLayeredWindowAttributes(HWND hwnd, COLORREF key, BYTE alpha, DWO void WAYLAND_SetWindowIcons(HWND hwnd, HICON icon, const ICONINFO *ii, HICON icon_small, const ICONINFO *ii_small); void WAYLAND_SetWindowStyle(HWND hwnd, INT offset, STYLESTRUCT *style); void WAYLAND_SetWindowText(HWND hwnd, LPCWSTR text); +BOOL WAYLAND_GetWindowStyleMasks(HWND hwnd, UINT style, UINT ex_style, UINT *style_mask, UINT *ex_style_mask); LRESULT WAYLAND_SysCommand(HWND hwnd, WPARAM wparam, LPARAM lparam, const POINT *pos); void WAYLAND_UpdateLayeredWindow(HWND hwnd, BYTE alpha, UINT flags); UINT WAYLAND_UpdateDisplayDevices(const struct gdi_device_manager *device_manager, void *param); diff --git a/dlls/winewayland.drv/waylanddrv_main.c b/dlls/winewayland.drv/waylanddrv_main.c index 275a3907f92..5aa162d1b45 100644 --- a/dlls/winewayland.drv/waylanddrv_main.c +++ b/dlls/winewayland.drv/waylanddrv_main.c @@ -36,6 +36,7 @@ static const struct user_driver_funcs waylanddrv_funcs = { .pClipboardWindowProc = WAYLAND_ClipboardWindowProc, .pClipCursor = WAYLAND_ClipCursor, + .pGetTouchCapabilities = WAYLAND_GetTouchCapabilities, .pDesktopWindowProc = WAYLAND_DesktopWindowProc, .pDestroyWindow = WAYLAND_DestroyWindow, .pSetIMECompositionRect = WAYLAND_SetIMECompositionRect, @@ -47,6 +48,7 @@ static const struct user_driver_funcs waylanddrv_funcs = .pSetWindowIcons = WAYLAND_SetWindowIcons, .pSetWindowStyle = WAYLAND_SetWindowStyle, .pSetWindowText = WAYLAND_SetWindowText, + .pGetWindowStyleMasks = WAYLAND_GetWindowStyleMasks, .pSysCommand = WAYLAND_SysCommand, .pUpdateLayeredWindow = WAYLAND_UpdateLayeredWindow, .pUpdateDisplayDevices = WAYLAND_UpdateDisplayDevices, diff --git a/dlls/winewayland.drv/window.c b/dlls/winewayland.drv/window.c index 270fdfb40e6..9cd775ce42f 100644 --- a/dlls/winewayland.drv/window.c +++ b/dlls/winewayland.drv/window.c @@ -51,6 +51,56 @@ static int wayland_win_data_cmp_rb(const void *key, static pthread_mutex_t win_data_mutex; static struct rb_tree win_data_rb = { wayland_win_data_cmp_rb }; +/*********************************************************************** + * WAYLAND_GetWindowStyleMasks + * + * Return the window style bits that are handled by the host compositor's + * server-side decorations, so that win32u excludes them from the visible + * rect and doesn't draw Wine's own title bar over the compositor's. + */ +BOOL WAYLAND_GetWindowStyleMasks(HWND hwnd, UINT style, UINT ex_style, UINT *style_mask, UINT *ex_style_mask) +{ + struct wayland_win_data *data; + struct wayland_surface *surface; + BOOL server_side = FALSE; + + *style_mask = *ex_style_mask = 0; + + if (!process_wayland.zxdg_decoration_manager_v1) return TRUE; + + if ((data = wayland_win_data_get(hwnd))) + { + /* If the window is not managed, no compositor decoration is applied. */ + if (data->managed) + { + if ((surface = data->wayland_surface)) + server_side = wayland_surface_is_toplevel(surface) && + surface->decoration_mode == ZXDG_TOPLEVEL_DECORATION_V1_MODE_SERVER_SIDE; + else + server_side = TRUE; /* we request server-side for managed toplevels */ + } + wayland_win_data_release(data); + } + else + { + /* The window data isn't created yet, assume server-side decorations + * for managed windows, as we always request them. */ + DWORD wnd_style = NtUserGetWindowLongW(hwnd, GWL_STYLE); + if ((wnd_style & WS_CHILD) != WS_CHILD && + ((wnd_style & WS_CAPTION) == WS_CAPTION || (wnd_style & WS_THICKFRAME))) + server_side = TRUE; + } + + if (!server_side) return TRUE; + + if ((style & WS_CAPTION) == WS_CAPTION) *style_mask |= WS_CAPTION; + if ((style & WS_THICKFRAME) == WS_THICKFRAME) *style_mask |= WS_THICKFRAME; + if ((style & WS_DLGFRAME) == WS_DLGFRAME) *style_mask |= WS_DLGFRAME; + if ((ex_style & WS_EX_DLGMODALFRAME) == WS_EX_DLGMODALFRAME) *ex_style_mask |= WS_EX_DLGMODALFRAME; + + return TRUE; +} + /*********************************************************************** * wayland_win_data_create * @@ -71,6 +121,12 @@ static struct wayland_win_data *wayland_win_data_create(HWND hwnd, const struct data->hwnd = hwnd; data->rects = *rects; + data->csd_style = NtUserGetWindowLongW(hwnd, GWL_STYLE); + data->csd_ex_style = NtUserGetWindowLongW(hwnd, GWL_EXSTYLE); + { + MENUBARINFO mbi = {.cbSize = sizeof(mbi)}; + data->csd_has_menu = NtUserGetMenuBarInfo(hwnd, OBJID_MENU, 0, &mbi); + } pthread_mutex_lock(&win_data_mutex); @@ -454,6 +510,10 @@ void WAYLAND_WindowPosChanged(HWND hwnd, HWND insert_after, HWND owner_hint, UIN data->is_fullscreen = fullscreen; data->resizeable = swp_flags & WINE_SWP_RESIZABLE; data->managed = managed; + { + MENUBARINFO mbi = {.cbSize = sizeof(mbi)}; + data->csd_has_menu = NtUserGetMenuBarInfo(hwnd, OBJID_MENU, 0, &mbi); + } if (!surface) { @@ -501,7 +561,22 @@ static void wayland_configure_window(HWND hwnd) if (!surface->requested.serial) { - TRACE("requested configure event already handled, returning\n"); + /* A decoration mode change may arrive without a pending configure + * event, in which case just trigger a frame change so that win32u + * recomputes the visible rect and window surface. */ + if (surface->decoration_frame_pending) + { + surface->decoration_frame_pending = FALSE; + TRACE("hwnd=%p decoration frame change\n", hwnd); + NtUserSetRawWindowPos(hwnd, data->rects.window, + SWP_FRAMECHANGED | SWP_NOMOVE | SWP_NOSIZE | + SWP_NOZORDER | SWP_NOACTIVATE | SWP_NOOWNERZORDER, + FALSE); + } + else + { + TRACE("requested configure event already handled, returning\n"); + } wayland_win_data_release(data); return; } @@ -542,6 +617,13 @@ static void wayland_configure_window(HWND hwnd) flags |= SWP_FRAMECHANGED; } + /* A decoration mode change also entails a frame change. */ + if (surface->decoration_frame_pending) + { + surface->decoration_frame_pending = FALSE; + flags |= SWP_FRAMECHANGED; + } + surface_rect = map_rect_to_surface(surface, surface->window.rect); /* If the window is already fullscreen and its size is compatible with what @@ -711,6 +793,9 @@ void WAYLAND_SetWindowStyle(HWND hwnd, INT offset, STYLESTRUCT *style) if (hwnd == NtUserGetDesktopWindow()) return; if (!(data = wayland_win_data_get(hwnd))) return; + if (offset == GWL_STYLE) data->csd_style = style->styleNew; + else if (offset == GWL_EXSTYLE) data->csd_ex_style = style->styleNew; + /* Changing WS_EX_LAYERED resets attributes */ if (offset == GWL_EXSTYLE && (changed & WS_EX_LAYERED)) { @@ -734,6 +819,10 @@ void WAYLAND_SetWindowText(HWND hwnd, LPCWSTR text) if ((data = wayland_win_data_get(hwnd))) { + if (text) + lstrcpynW(data->csd_title, text, ARRAY_SIZE(data->csd_title)); + else + data->csd_title[0] = 0; if ((surface = data->wayland_surface) && wayland_surface_is_toplevel(surface)) wayland_surface_set_title(surface, text); wayland_win_data_release(data); @@ -762,6 +851,16 @@ LRESULT WAYLAND_SysCommand(HWND hwnd, WPARAM wparam, LPARAM lparam, const POINT button_serial = 0; pthread_mutex_unlock(&process_wayland.pointer.mutex); + /* Touch based moves are initiated from a touch down serial, not a + * pointer button serial. */ + if (!button_serial) + { + pthread_mutex_lock(&process_wayland.touch.mutex); + if (process_wayland.touch.serial_hwnd == hwnd) + button_serial = process_wayland.touch.serial; + pthread_mutex_unlock(&process_wayland.touch.mutex); + } + if (command == SC_MOVE || command == SC_SIZE) { if ((data = wayland_win_data_get(hwnd))) diff --git a/dlls/winewayland.drv/window_surface.c b/dlls/winewayland.drv/window_surface.c index e7595b7ccb0..a6c04bf00fd 100644 --- a/dlls/winewayland.drv/window_surface.c +++ b/dlls/winewayland.drv/window_surface.c @@ -388,7 +388,8 @@ static BOOL wayland_window_surface_flush(struct window_surface *window_surface, goto done; } - buffer_format = (shape_bits || wws->layered) ? WL_SHM_FORMAT_ARGB8888 : WL_SHM_FORMAT_XRGB8888; + buffer_format = (shape_bits || wws->layered || wayland_csd_should_draw_win(window_surface->hwnd)) ? + WL_SHM_FORMAT_ARGB8888 : WL_SHM_FORMAT_XRGB8888; if (wws->wayland_buffer_queue->format != buffer_format) { int width = wws->wayland_buffer_queue->width; @@ -440,9 +441,33 @@ static BOOL wayland_window_surface_flush(struct window_surface *window_surface, } wayland_shm_buffer_copy_data(shm_buffer, color_bits, &surface_rect, copy_from_window_region, - shape_bits && !wws->layered); + (shape_bits && !wws->layered) || wayland_csd_should_draw_win(window_surface->hwnd)); if (shape_bits) wayland_shm_buffer_copy_shape(shm_buffer, rect, shape_info, shape_bits); + if (wayland_csd_should_draw_win(window_surface->hwnd)) + { + struct wayland_win_data *csd_data; + int csd_client_top = 0; + + if ((csd_data = wayland_win_data_get(window_surface->hwnd))) + { + int nonclient_top = csd_data->rects.client.top - csd_data->rects.visible.top; + int border = csd_data->rects.client.left - csd_data->rects.window.left; + /* The caption occupies the non-client top minus the menu bar. + * The cached SM_CYCAPTION/SM_CYMENU metrics are at the process + * DPI, but their ratio is DPI independent, so use it to split + * the window's actual caption+menu height. */ + if (csd_data->csd_has_menu) + csd_client_top = nonclient_top - (nonclient_top - border) * + process_wayland.sm_menu_height / + (process_wayland.sm_caption_height + process_wayland.sm_menu_height); + else + csd_client_top = nonclient_top; + wayland_csd_paint(shm_buffer, csd_data, csd_client_top); + wayland_win_data_release(csd_data); + } + } + NtGdiSetRectRgn(shm_buffer->damage_region, 0, 0, 0, 0); flushed = set_window_surface_contents(window_surface->hwnd, shm_buffer, surface_damage_region); diff --git a/dlls/winewayland.drv/xdg-decoration-unstable-v1.xml b/dlls/winewayland.drv/xdg-decoration-unstable-v1.xml new file mode 100644 index 00000000000..4426f6cd8e4 --- /dev/null +++ b/dlls/winewayland.drv/xdg-decoration-unstable-v1.xml @@ -0,0 +1,176 @@ +<?xml version="1.0" encoding="UTF-8"?> +<protocol name="xdg_decoration_unstable_v1"> + <copyright> + Copyright © 2018 Simon Ser + + Permission is hereby granted, free of charge, to any person obtaining a + copy of this software and associated documentation files (the "Software"), + to deal in the Software without restriction, including without limitation + the rights to use, copy, modify, merge, publish, distribute, sublicense, + and/or sell copies of the Software, and to permit persons to whom the + Software is furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice (including the next + paragraph) shall be included in all copies or substantial portions of the + Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + DEALINGS IN THE SOFTWARE. + </copyright> + + <interface name="zxdg_decoration_manager_v1" version="2"> + <description summary="window decoration manager"> + This interface allows a compositor to announce support for server-side + decorations. + + A window decoration is a set of window controls as deemed appropriate by + the party managing them, such as user interface components used to move, + resize and change a window's state. + + A client can use this protocol to request being decorated by a supporting + compositor. + + If compositor and client do not negotiate the use of a server-side + decoration using this protocol, clients continue to self-decorate as they + see fit. + + Warning! The protocol described in this file is experimental and + backward incompatible changes may be made. Backward compatible changes + may be added together with the corresponding interface version bump. + Backward incompatible changes are done by bumping the version number in + the protocol and interface names and resetting the interface version. + Once the protocol is to be declared stable, the 'z' prefix and the + version number in the protocol and interface names are removed and the + interface version number is reset. + </description> + + <request name="destroy" type="destructor"> + <description summary="destroy the decoration manager object"> + Destroy the decoration manager. This doesn't destroy objects created + with the manager. + </description> + </request> + + <request name="get_toplevel_decoration"> + <description summary="create a new toplevel decoration object"> + Create a new decoration object associated with the given toplevel. + + For objects of version 1, creating an xdg_toplevel_decoration from an + xdg_toplevel which has a buffer attached or committed is a client + error, and any attempts by a client to attach or manipulate a buffer + prior to the first xdg_toplevel_decoration.configure event must also be + treated as errors. + + For objects of version 2 or newer, creating an xdg_toplevel_decoration + from an xdg_toplevel which has a buffer attached or committed is + allowed. The initial decoration mode of the surface if a buffer is + already attached depends on whether a xdg_toplevel_decoration object + has been associated with the surface or not prior to this request. + + If an xdg_toplevel_decoration was associated with the surface, then + destroyed without a surface commit, the previous decoration mode is + retained. + + If no xdg_toplevel_decoration was associated with the surface prior to + this request, or if a surface commit has been perfomed after a previous + xdg_toplevel_decoration object associated with the surface was + destroyed, the decoration mode is assumed to be client-side. + </description> + <arg name="id" type="new_id" interface="zxdg_toplevel_decoration_v1"/> + <arg name="toplevel" type="object" interface="xdg_toplevel"/> + </request> + </interface> + + <interface name="zxdg_toplevel_decoration_v1" version="2"> + <description summary="decoration object for a toplevel surface"> + The decoration object allows the compositor to toggle server-side window + decorations for a toplevel surface. The client can request to switch to + another mode. + + The xdg_toplevel_decoration object must be destroyed before its + xdg_toplevel. + </description> + + <enum name="error"> + <entry name="unconfigured_buffer" value="0" + summary="xdg_toplevel has a buffer attached before configure"/> + <entry name="already_constructed" value="1" + summary="xdg_toplevel already has a decoration object"/> + <entry name="orphaned" value="2" + summary="xdg_toplevel destroyed before the decoration object"/> + <entry name="invalid_mode" value="3" summary="invalid mode"/> + </enum> + + <request name="destroy" type="destructor"> + <description summary="destroy the decoration object"> + Switch back to a mode without any server-side decorations at the next + commit, unless a new xdg_toplevel_decoration is created for the surface + first. + </description> + </request> + + <enum name="mode"> + <description summary="window decoration modes"> + These values describe window decoration modes. + </description> + <entry name="client_side" value="1" + summary="no server-side window decoration"/> + <entry name="server_side" value="2" + summary="server-side window decoration"/> + </enum> + + <request name="set_mode"> + <description summary="set the decoration mode"> + Set the toplevel surface decoration mode. This informs the compositor + that the client prefers the provided decoration mode. + + After requesting a decoration mode, the compositor will respond by + emitting an xdg_surface.configure event. The client should then update + its content, drawing it without decorations if the received mode is + server-side decorations. The client must also acknowledge the configure + when committing the new content (see xdg_surface.ack_configure). + + The compositor can decide not to use the client's mode and enforce a + different mode instead. + + Clients whose decoration mode depend on the xdg_toplevel state may send + a set_mode request in response to an xdg_surface.configure event and wait + for the next xdg_surface.configure event to prevent unwanted state. + Such clients are responsible for preventing configure loops and must + make sure not to send multiple successive set_mode requests with the + same decoration mode. + + If an invalid mode is supplied by the client, the invalid_mode protocol + error is raised by the compositor. + </description> + <arg name="mode" type="uint" enum="mode" summary="the decoration mode"/> + </request> + + <request name="unset_mode"> + <description summary="unset the decoration mode"> + Unset the toplevel surface decoration mode. This informs the compositor + that the client doesn't prefer a particular decoration mode. + + This request has the same semantics as set_mode. + </description> + </request> + + <event name="configure"> + <description summary="notify a decoration mode change"> + The configure event configures the effective decoration mode. The + configured state should not be applied immediately. Clients must send an + ack_configure in response to this event. See xdg_surface.configure and + xdg_surface.ack_configure for details. + + A configure event can be sent at any time. The specified mode must be + obeyed by the client. + </description> + <arg name="mode" type="uint" enum="mode" summary="the decoration mode"/> + </event> + </interface> +</protocol> diff --git a/dlls/winex11.drv/init.c b/dlls/winex11.drv/init.c index a3078d73d64..4f1346e8971 100644 --- a/dlls/winex11.drv/init.c +++ b/dlls/winex11.drv/init.c @@ -629,6 +629,7 @@ static const struct user_driver_funcs x11drv_funcs = .pGetCursorPos = X11DRV_GetCursorPos, .pSetCursorPos = X11DRV_SetCursorPos, .pClipCursor = X11DRV_ClipCursor, + .pGetTouchCapabilities = X11DRV_GetTouchCapabilities, .pSystrayDockInit = X11DRV_SystrayDockInit, .pSystrayDockInsert = X11DRV_SystrayDockInsert, .pSystrayDockClear = X11DRV_SystrayDockClear, diff --git a/dlls/winex11.drv/mouse.c b/dlls/winex11.drv/mouse.c index 7e4d6f9b031..94233a15451 100644 --- a/dlls/winex11.drv/mouse.c +++ b/dlls/winex11.drv/mouse.c @@ -126,6 +126,7 @@ static Cursor create_cursor( HANDLE handle ); #ifdef HAVE_X11_EXTENSIONS_XINPUT2_H static BOOL xinput2_available; +static BOOL touch_available; static BOOL broken_rawevents; #define MAKE_FUNCPTR(f) static typeof(f) * p##f MAKE_FUNCPTR(XIGetClientPointer); @@ -274,6 +275,11 @@ void x11drv_xinput2_enable( Display *display, Window window ) } else { + /* Select touch events for all devices: the touchscreen may be a + * floating slave device (e.g. under Xwayland it is reported as an + * unfloating slave), which an XIAllMasterDevices selection would + * miss. */ + mask.deviceid = XIAllDevices; XISetMask( mask_bits, XI_TouchBegin ); XISetMask( mask_bits, XI_TouchUpdate ); XISetMask( mask_bits, XI_TouchEnd ); @@ -303,6 +309,10 @@ void x11drv_xinput2_disable( Display *display, Window window ) if (--x11drv_thread_data()->root_window_users) return; XISetMask( mask_bits, XI_DeviceChanged ); } + else + { + mask.deviceid = XIAllDevices; + } pXISelectEvents( display, window, &mask, 1 ); } @@ -337,7 +347,13 @@ void x11drv_xinput2_init( struct x11drv_thread_data *data ) else { XIDeviceInfo *pointer_info = pXIQueryDevice( data->display, data->xinput2_pointer, &count ); + int j; + update_relative_valuators( pointer_info->classes, pointer_info->num_classes ); + for (j = 0; j < pointer_info->num_classes; j++) + { + if (pointer_info->classes[j]->type == XITouchClass) touch_available = TRUE; + } pXIFreeDeviceInfo( pointer_info ); } @@ -1681,10 +1697,29 @@ static BOOL X11DRV_TouchEvent( HWND hwnd, XGenericEventCookie *xev ) int flags = 0; POINT pos; + /* call_event_handler passes a null hwnd for generic events; resolve the + * target window from the event window (the window under the touch) so the + * synthesized click goes to the touched window instead of the focus window. */ + if (!hwnd && event->event) + { + XFindContext( gdi_display, event->event, winContext, (char **)&hwnd ); + if (!hwnd) + { + struct x11drv_thread_data *thread_data = x11drv_thread_data(); + if (thread_data) XFindContext( thread_data->display, event->event, winContext, (char **)&hwnd ); + } + TRACE( "resolved touch hwnd=%p from event window %lx\n", hwnd, event->event ); + } + pt = map_event_coords( hwnd, event->event, event->root, root, pt ); pos.x = pt.x * 65535 / (virtual.right - virtual.left); pos.y = pt.y * 65535 / (virtual.bottom - virtual.top); + TRACE( "touch msg=%d detail %u hwnd=%p event_win=%lx root_win=%lx evd=%g,%g rootd=%g,%g pt=%d,%d pos=%d,%d virt=%d,%d\n", + event->evtype, event->detail, hwnd, event->event, event->root, + event->event_x, event->event_y, event->root_x, event->root_y, + pt.x, pt.y, pos.x, pos.y, virtual.right - virtual.left, virtual.bottom - virtual.top ); + switch (event->evtype) { case XI_TouchBegin: @@ -1787,3 +1822,14 @@ BOOL X11DRV_GenericEvent( HWND hwnd, XEvent *xev ) #endif return ret; } + +/*********************************************************************** + * X11DRV_GetTouchCapabilities + */ +UINT X11DRV_GetTouchCapabilities(void) +{ +#ifdef HAVE_X11_EXTENSIONS_XINPUT2_H + if (touch_available) return MAKELONG( NID_INTEGRATED_TOUCH | NID_MULTI_INPUT | NID_READY, 20 ); +#endif + return 0; +} diff --git a/dlls/winex11.drv/x11drv.h b/dlls/winex11.drv/x11drv.h index 9ed169996ce..4970e62bb46 100644 --- a/dlls/winex11.drv/x11drv.h +++ b/dlls/winex11.drv/x11drv.h @@ -218,6 +218,7 @@ extern void X11DRV_SetCursor( HWND hwnd, HCURSOR handle ); extern BOOL X11DRV_SetCursorPos( INT x, INT y ); extern BOOL X11DRV_GetCursorPos( LPPOINT pos ); extern BOOL X11DRV_ClipCursor( const RECT *clip, BOOL reset ); +extern UINT X11DRV_GetTouchCapabilities(void); extern void X11DRV_SystrayDockInit( HWND systray ); extern BOOL X11DRV_SystrayDockInsert( HWND owner, UINT cx, UINT cy, void *icon ); extern void X11DRV_SystrayDockClear( HWND hwnd ); diff --git a/dlls/wow64win/user.c b/dlls/wow64win/user.c index 92c1877566b..e596ebcd2d8 100644 --- a/dlls/wow64win/user.c +++ b/dlls/wow64win/user.c @@ -4204,6 +4204,93 @@ NTSTATUS WINAPI wow64_NtUserRegisterTouchPadCapable( UINT *args ) return NtUserRegisterTouchPadCapable( capable ); } +NTSTATUS WINAPI wow64_NtUserRegisterTouchWindow( UINT *args ) +{ + HWND hwnd = get_handle( &args ); + UINT flags = get_ulong( &args ); + + return NtUserRegisterTouchWindow( hwnd, flags ); +} + +NTSTATUS WINAPI wow64_NtUserUnregisterTouchWindow( UINT *args ) +{ + HWND hwnd = get_handle( &args ); + + return NtUserUnregisterTouchWindow( hwnd ); +} + +NTSTATUS WINAPI wow64_NtUserIsTouchWindow( UINT *args ) +{ + HWND hwnd = get_handle( &args ); + ULONG *flags = get_ptr( &args ); + + return NtUserIsTouchWindow( hwnd, flags ); +} + +NTSTATUS WINAPI wow64_NtUserGetTouchInputInfo( UINT *args ) +{ + HTOUCHINPUT handle = get_handle( &args ); + UINT count = get_ulong( &args ); + TOUCHINPUT *ptr = get_ptr( &args ); + INT size = get_ulong( &args ); + + return NtUserGetTouchInputInfo( handle, count, ptr, size ); +} + +NTSTATUS WINAPI wow64_NtUserCloseTouchInputHandle( UINT *args ) +{ + HTOUCHINPUT handle = get_handle( &args ); + + return NtUserCloseTouchInputHandle( handle ); +} + +NTSTATUS WINAPI wow64_NtUserSetGestureConfig( UINT *args ) +{ + HWND hwnd = get_handle( &args ); + DWORD reserved = get_ulong( &args ); + UINT count = get_ulong( &args ); + GESTURECONFIG *config = get_ptr( &args ); + UINT size = get_ulong( &args ); + + return NtUserSetGestureConfig( hwnd, reserved, count, config, size ); +} + +NTSTATUS WINAPI wow64_NtUserGetGestureConfig( UINT *args ) +{ + HWND hwnd = get_handle( &args ); + DWORD reserved = get_ulong( &args ); + DWORD flags = get_ulong( &args ); + UINT *count = get_ptr( &args ); + GESTURECONFIG *config = get_ptr( &args ); + UINT size = get_ulong( &args ); + + return NtUserGetGestureConfig( hwnd, reserved, flags, count, config, size ); +} + +NTSTATUS WINAPI wow64_NtUserGetGestureInfo( UINT *args ) +{ + HGESTUREINFO handle = get_handle( &args ); + GESTUREINFO *info = get_ptr( &args ); + + return NtUserGetGestureInfo( handle, info ); +} + +NTSTATUS WINAPI wow64_NtUserGetGestureExtArgs( UINT *args ) +{ + HGESTUREINFO handle = get_handle( &args ); + UINT size = get_ulong( &args ); + BYTE *data = get_ptr( &args ); + + return NtUserGetGestureExtArgs( handle, size, data ); +} + +NTSTATUS WINAPI wow64_NtUserCloseGestureInfoHandle( UINT *args ) +{ + HGESTUREINFO handle = get_handle( &args ); + + return NtUserCloseGestureInfoHandle( handle ); +} + NTSTATUS WINAPI wow64_NtUserReleaseCapture( UINT *args ) { return NtUserReleaseCapture(); diff --git a/include/ntuser.h b/include/ntuser.h index be41b33adfd..8f1d08a7aed 100644 --- a/include/ntuser.h +++ b/include/ntuser.h @@ -959,6 +959,16 @@ W32KAPI ATOM WINAPI NtUserRegisterClassExWOW( const WNDCLASSEXW *wc, UNICODE_ W32KAPI BOOL WINAPI NtUserRegisterHotKey( HWND hwnd, INT id, UINT modifiers, UINT vk ); W32KAPI BOOL WINAPI NtUserRegisterRawInputDevices( const RAWINPUTDEVICE *devices, UINT device_count, UINT size ); W32KAPI BOOL WINAPI NtUserRegisterTouchPadCapable( BOOL capable ); +W32KAPI BOOL WINAPI NtUserRegisterTouchWindow( HWND hwnd, ULONG flags ); +W32KAPI BOOL WINAPI NtUserUnregisterTouchWindow( HWND hwnd ); +W32KAPI BOOL WINAPI NtUserIsTouchWindow( HWND hwnd, ULONG *flags ); +W32KAPI BOOL WINAPI NtUserGetTouchInputInfo( HTOUCHINPUT handle, UINT count, TOUCHINPUT *ptr, int size ); +W32KAPI BOOL WINAPI NtUserCloseTouchInputHandle( HTOUCHINPUT handle ); +W32KAPI BOOL WINAPI NtUserSetGestureConfig( HWND hwnd, DWORD reserved, UINT count, GESTURECONFIG *config, UINT size ); +W32KAPI BOOL WINAPI NtUserGetGestureConfig( HWND hwnd, DWORD reserved, DWORD flags, UINT *count, GESTURECONFIG *config, UINT size ); +W32KAPI BOOL WINAPI NtUserGetGestureInfo( HGESTUREINFO handle, GESTUREINFO *info ); +W32KAPI BOOL WINAPI NtUserGetGestureExtArgs( HGESTUREINFO handle, UINT size, BYTE *args ); +W32KAPI BOOL WINAPI NtUserCloseGestureInfoHandle( HGESTUREINFO handle ); W32KAPI ATOM WINAPI NtUserRegisterWindowMessage( UNICODE_STRING *name ); W32KAPI BOOL WINAPI NtUserReleaseCapture(void); W32KAPI INT WINAPI NtUserReleaseDC( HWND hwnd, HDC hdc ); diff --git a/include/wine/gdi_driver.h b/include/wine/gdi_driver.h index 1f7f0298b63..dcd0d2f54f2 100644 --- a/include/wine/gdi_driver.h +++ b/include/wine/gdi_driver.h @@ -218,7 +218,7 @@ struct gdi_dc_funcs }; /* increment this when you change the DC function table */ -#define WINE_GDI_DRIVER_VERSION 110 +#define WINE_GDI_DRIVER_VERSION 111 #define GDI_PRIORITY_NULL_DRV 0 /* null driver */ #define GDI_PRIORITY_FONT_DRV 100 /* any font driver */ @@ -430,6 +430,9 @@ struct user_driver_funcs void (*pWindowPosChanged)(HWND,HWND,HWND,UINT,const struct window_rects*,struct window_surface*); /* system parameters */ BOOL (*pSystemParametersInfo)(UINT,UINT,void*,UINT); + /* returns NID_* digitizer capabilities in the low word and the maximum + * number of simultaneous touches in the high word, or 0 for no touch */ + UINT (*pGetTouchCapabilities)(void); /* wintab support */ LRESULT (*pWintabProc)(HWND,UINT,WPARAM,LPARAM,void*); /* vulkan support */ diff --git a/include/wine/server_protocol.h b/include/wine/server_protocol.h index 2f04955a486..492b5b96b41 100644 --- a/include/wine/server_protocol.h +++ b/include/wine/server_protocol.h @@ -3642,6 +3642,66 @@ struct set_window_fnid_reply +struct set_window_touch_flags_request +{ + struct request_header __header; + user_handle_t handle; + unsigned int flags; + unsigned int set; +}; +struct set_window_touch_flags_reply +{ + struct reply_header __header; +}; + + + +struct get_window_touch_flags_request +{ + struct request_header __header; + user_handle_t handle; +}; +struct get_window_touch_flags_reply +{ + struct reply_header __header; + unsigned int flags; + char __pad_12[4]; +}; + + + +struct set_gesture_config_request +{ + struct request_header __header; + user_handle_t handle; + unsigned int count; + /* VARARG(config,bytes); */ + char __pad_20[4]; +}; +struct set_gesture_config_reply +{ + struct reply_header __header; +}; + + + +struct get_gesture_config_request +{ + struct request_header __header; + user_handle_t handle; + unsigned int count; + char __pad_20[4]; +}; +struct get_gesture_config_reply +{ + struct reply_header __header; + unsigned int count; + /* VARARG(config,bytes); */ + char __pad_12[4]; +}; + + + struct set_parent_request { struct request_header __header; @@ -6389,6 +6449,10 @@ enum request REQ_init_window_info, REQ_set_window_info, REQ_set_window_fnid, + REQ_set_window_touch_flags, + REQ_get_window_touch_flags, + REQ_set_gesture_config, + REQ_get_gesture_config, REQ_set_parent, REQ_get_window_parents, REQ_get_window_list, @@ -6704,6 +6768,10 @@ union generic_request struct init_window_info_request init_window_info_request; struct set_window_info_request set_window_info_request; struct set_window_fnid_request set_window_fnid_request; + struct set_window_touch_flags_request set_window_touch_flags_request; + struct get_window_touch_flags_request get_window_touch_flags_request; + struct set_gesture_config_request set_gesture_config_request; + struct get_gesture_config_request get_gesture_config_request; struct set_parent_request set_parent_request; struct get_window_parents_request get_window_parents_request; struct get_window_list_request get_window_list_request; @@ -7017,6 +7085,10 @@ union generic_reply struct init_window_info_reply init_window_info_reply; struct set_window_info_reply set_window_info_reply; struct set_window_fnid_reply set_window_fnid_reply; + struct set_window_touch_flags_reply set_window_touch_flags_reply; + struct get_window_touch_flags_reply get_window_touch_flags_reply; + struct set_gesture_config_reply set_gesture_config_reply; + struct get_gesture_config_reply get_gesture_config_reply; struct set_parent_reply set_parent_reply; struct get_window_parents_reply get_window_parents_reply; struct get_window_list_reply get_window_list_reply; @@ -7177,6 +7249,6 @@ union generic_reply struct alpc_create_port_reply alpc_create_port_reply; }; -#define SERVER_PROTOCOL_VERSION 959 +#define SERVER_PROTOCOL_VERSION 960 #endif /* __WINE_WINE_SERVER_PROTOCOL_H */ diff --git a/server/protocol.def b/server/protocol.def index 118bafd9c9b..d7274331a89 100644 --- a/server/protocol.def +++ b/server/protocol.def @@ -2730,6 +2730,40 @@ enum message_type @END +/* Set or clear the touch flags of a window */ +@REQ(set_window_touch_flags) + user_handle_t handle; /* handle to the window */ + unsigned int flags; /* touch flags to set or clear */ + unsigned int set; /* set if nonzero, clear if zero */ +@END + + +/* Get the touch flags of a window */ +@REQ(get_window_touch_flags) + user_handle_t handle; /* handle to the window */ +@REPLY + unsigned int flags; /* touch flags */ +@END + + +/* Set the gesture configuration of a window */ +@REQ(set_gesture_config) + user_handle_t handle; /* handle to the window */ + unsigned int count; /* number of config entries */ + VARARG(config,bytes); /* GESTURECONFIG array */ +@END + + +/* Get the gesture configuration of a window */ +@REQ(get_gesture_config) + user_handle_t handle; /* handle to the window */ + unsigned int count; /* number of config entries to retrieve */ +@REPLY + unsigned int count; /* number of config entries retrieved */ + VARARG(config,bytes); /* GESTURECONFIG array */ +@END + + /* Set the parent of a window */ @REQ(set_parent) user_handle_t handle; /* handle to the window */ diff --git a/server/queue.c b/server/queue.c index 3d8ae3f96dd..e4c3e775463 100644 --- a/server/queue.c +++ b/server/queue.c @@ -28,6 +28,14 @@ #include <poll.h> #include <limits.h> +#ifndef M_PI +#define M_PI 3.14159265358979323846 +#endif + +#ifndef WHEEL_DELTA +#define WHEEL_DELTA 120 +#endif + #include "ntstatus.h" #include "windef.h" #include "winbase.h" @@ -731,12 +739,16 @@ static inline int filter_contains_hw_range( unsigned int first, unsigned int las /* hardware message ranges are (in numerical order): * WM_NCMOUSEFIRST .. WM_NCMOUSELAST * WM_INPUT_DEVICE_CHANGE .. WM_KEYLAST + * WM_GESTURE * WM_MOUSEFIRST .. WM_MOUSELAST + * WM_TOUCH .. WM_POINTERLEAVE */ if (last < WM_NCMOUSEFIRST) return 0; if (first > WM_NCMOUSELAST && last < WM_INPUT_DEVICE_CHANGE) return 0; - if (first > WM_KEYLAST && last < WM_MOUSEFIRST) return 0; - if (first > WM_MOUSELAST) return 0; + if (first > WM_KEYLAST && last < WM_GESTURE) return 0; + if (first > WM_GESTURE && last < WM_MOUSEFIRST) return 0; + if (first > WM_MOUSELAST && last < WM_TOUCH) return 0; + if (first > WM_POINTERLEAVE) return 0; return 1; } @@ -744,6 +756,7 @@ static inline int filter_contains_hw_range( unsigned int first, unsigned int las static inline int get_hardware_msg_bit( unsigned int message ) { if (message >= WM_POINTERUPDATE && message <= WM_POINTERLEAVE) return QS_POINTER; + if (message == WM_TOUCH || message == WM_GESTURE) return QS_TOUCH; if (message == WM_INPUT_DEVICE_CHANGE || message == WM_INPUT) return QS_RAWINPUT; if (message == WM_MOUSEMOVE || message == WM_NCMOUSEMOVE) return QS_MOUSEMOVE; if (message >= WM_KEYFIRST && message <= WM_KEYLAST) return QS_KEY; @@ -1746,6 +1759,7 @@ static user_handle_t find_hardware_message_window( struct desktop *desktop, stru switch (get_hardware_msg_bit( msg->msg )) { case QS_POINTER: + case QS_TOUCH: case QS_RAWINPUT: case QS_HARDWARE: if (!(win = msg->win) && input) win = input_shm->focus; @@ -2463,17 +2477,121 @@ struct pointer struct desktop *desktop; user_handle_t win; int primary; + unsigned int synthetic_updates; /* consecutive timed WM_POINTERUPDATE, to detect stale touches */ + int long_press_sent; /* press-and-hold right click already synthesized */ + int click_pending; /* a left click is pending until the tap is confirmed */ + int drag_press_sent; /* a left button press was synthesized for a press-and-drag */ + unsigned int down_lparam; /* lparam position at touch down, to detect drag movement */ + unsigned int down_time; /* tick count when the touch started */ union hw_input input; }; +/* if a touch produces this many consecutive timed WM_POINTERUPDATE without any + * real driver input (and no WM_POINTERUP), treat it as a lost touch end and + * release it (~5s at 16ms/update) */ +#define STALE_POINTER_MAX_UPDATES 312 + +/* press-and-hold for this many ms before synthesizing a right click */ +#define LONG_PRESS_MS 800 + +/* a second finger that lands and lifts again within this many ms while another + * finger stays down is a "stick + tap" right click gesture */ +#define SECOND_TAP_MS 250 + +/* a first finger must be held for at least this long before a second finger + * tap is recognized as a GID_PRESSANDTAP instead of a GID_TWOFINGERTAP */ +#define PRESS_AND_TAP_HOLD_MS 150 + +/* after the touch moves this far (in 1/65535 screen fraction units) from the + * down position, treat it as a drag instead of a tap or a long press */ +#define DRAG_MOVE_THRESHOLD 300 + +/* a touch that moves more than this far (in 1/65535 units) from the down + * position is no longer considered still, so the long-press clock is reset */ +#define STILL_MOVE_THRESHOLD 80 + static void queue_pointer_message( struct pointer *pointer, int repeated ); +/* queue a synthetic mouse message at the touch position of a pointer */ +static void send_pointer_mouse_message( struct pointer *pointer, unsigned int msg ) +{ + struct desktop *desktop = pointer->desktop; + struct hw_msg_source source = { IMDT_UNAVAILABLE, IMDT_TOUCH }; + const union hw_input *input = &pointer->input; + struct rectangle top_rect; + struct message *m; + + get_virtual_screen_rect( desktop, &top_rect, 1 ); + if (!(m = alloc_hardware_message( 0xff515700, source, get_tick_count(), 0 ))) return; + m->win = get_user_full_handle( pointer->win ); + m->msg = msg; + m->wparam = 0; + m->lparam = 0; + m->x = LOWORD(input->hw.lparam) * (top_rect.right - top_rect.left) / 65535; + m->y = HIWORD(input->hw.lparam) * (top_rect.bottom - top_rect.top) / 65535; + queue_hardware_message( desktop, m, 0 ); +} + +/* synthesize a right click (WM_RBUTTONDOWN / WM_RBUTTONUP) at the touch position, + * emulating the press-and-hold gesture */ +static void send_pointer_right_click( struct pointer *pointer ) +{ + unsigned int i; + static const unsigned int messages[] = { WM_RBUTTONDOWN, WM_RBUTTONUP }; + + for (i = 0; i < ARRAY_SIZE(messages); i++) + send_pointer_mouse_message( pointer, messages[i] ); +} + static void pointer_message_timeout( void *private ) { struct pointer *pointer = private; + + if (++pointer->synthetic_updates > STALE_POINTER_MAX_UPDATES) + { + /* the driver never delivered the matching WM_POINTERUP (the touch end + * was lost), so synthesize it to release the button and stop flooding + * the queue; queue_pointer_message also frees the pointer */ + pointer->input.hw.msg = WM_POINTERUP; + queue_pointer_message( pointer, 0 ); + return; + } + if (!pointer->long_press_sent && pointer->click_pending && + get_tick_count() - pointer->down_time >= LONG_PRESS_MS) + { + /* press-and-hold gesture -> right click, not a left click */ + if (pointer->drag_press_sent) + { + /* release the left button that the drag press synthesized */ + send_pointer_mouse_message( pointer, WM_LBUTTONUP ); + pointer->drag_press_sent = 0; + } + pointer->long_press_sent = 1; + pointer->click_pending = 0; + send_pointer_right_click( pointer ); + } queue_pointer_message( pointer, 1 ); } +/* queue a synthetic mouse message from a touch pointer (used for tap clicks, + * scroll wheels and right-click emulation) */ +static void queue_pointer_mouse( struct desktop *desktop, user_handle_t win, unsigned int msg, + int x, int y, unsigned int wparam ) +{ + struct hw_msg_source source = { IMDT_UNAVAILABLE, IMDT_TOUCH }; + struct message *m = alloc_hardware_message( 0xff515700, source, get_tick_count(), 0 ); + + if (!m) return; + m->win = get_user_full_handle( win ); + m->msg = msg; + m->wparam = wparam; + m->lparam = 0; + m->x = x; + m->y = y; + if (!send_hook_ll_message( desktop, m, WH_MOUSE_LL, 0, NULL )) + queue_hardware_message( desktop, m, 0 ); +} + static void queue_pointer_message( struct pointer *pointer, int repeated ) { static const unsigned int messages[][2] = @@ -2493,7 +2611,9 @@ static void queue_pointer_message( struct pointer *pointer, int repeated ) struct message *msg; int x, y; - get_virtual_screen_rect( desktop, &top_rect, 0 ); + /* the drivers encode touch positions as a fraction of the raw physical + * screen, so decode them with the raw rect to keep coordinates consistent */ + get_virtual_screen_rect( desktop, &top_rect, 1 ); x = LOWORD(input->hw.lparam) * (top_rect.right - top_rect.left) / 65535; y = HIWORD(input->hw.lparam) * (top_rect.bottom - top_rect.top) / 65535; @@ -2513,21 +2633,59 @@ static void queue_pointer_message( struct pointer *pointer, int repeated ) queue_hardware_message( desktop, msg, 1 ); } - if (!repeated && pointer->primary && (msg = alloc_hardware_message( 0xff515700, source, time, 0 ))) + if (!repeated && pointer->primary) { - unsigned int message = WM_MOUSEMOVE; - if (input->hw.msg == WM_POINTERDOWN) message = WM_LBUTTONDOWN; - else if (input->hw.msg == WM_POINTERUP) message = WM_LBUTTONUP; - - msg->win = get_user_full_handle( win ); - msg->msg = message; - msg->wparam = 0; - msg->lparam = 0; - msg->x = x; - msg->y = y; + if (input->hw.msg == WM_POINTERDOWN) + { + /* delay the left click until we know this is a tap rather than a + * two-finger scroll/zoom or a press-and-hold */ + pointer->click_pending = 1; + pointer->down_lparam = input->hw.lparam; + pointer->down_time = get_tick_count(); + } + else if (input->hw.msg == WM_POINTERUP) + { + if (pointer->drag_press_sent) + { + /* a drag press was synthesized earlier: release the button */ + queue_pointer_mouse( desktop, win, WM_LBUTTONUP, x, y, 0 ); + pointer->drag_press_sent = 0; + } + else if (pointer->click_pending) + { + /* confirmed tap: send a full click */ + queue_pointer_mouse( desktop, win, WM_LBUTTONDOWN, x, y, 0 ); + queue_pointer_mouse( desktop, win, WM_LBUTTONUP, x, y, 0 ); + } + pointer->click_pending = 0; + } + else /* WM_POINTERUPDATE */ + { + /* if the finger moved away from the down position it's a drag, so + * press the left button at the down position (where the finger + * first touched, e.g. on a splitter) and let subsequent motion + * drag; otherwise keep the click pending for a possible long-press + * right click. A finger that drifts beyond the still threshold is + * no longer a press-and-hold, so reset the long-press clock. */ + int dx = abs((short)LOWORD(input->hw.lparam) - (short)LOWORD(pointer->down_lparam)); + int dy = abs((short)HIWORD(input->hw.lparam) - (short)HIWORD(pointer->down_lparam)); + + if (dx > STILL_MOVE_THRESHOLD || dy > STILL_MOVE_THRESHOLD) + pointer->down_time = get_tick_count(); + + if (pointer->click_pending && !pointer->drag_press_sent && !pointer->long_press_sent && + (dx > DRAG_MOVE_THRESHOLD || dy > DRAG_MOVE_THRESHOLD)) + { + int down_x, down_y; - if (!send_hook_ll_message( desktop, msg, WH_MOUSE_LL, 0, NULL )) - queue_hardware_message( desktop, msg, 0 ); + down_x = LOWORD(pointer->down_lparam) * (top_rect.right - top_rect.left) / 65535; + down_y = HIWORD(pointer->down_lparam) * (top_rect.bottom - top_rect.top) / 65535; + pointer->drag_press_sent = 1; + pointer->click_pending = 0; + queue_pointer_mouse( desktop, win, WM_LBUTTONDOWN, down_x, down_y, 0 ); + } + queue_pointer_mouse( desktop, win, WM_MOUSEMOVE, x, y, 0 ); + } } if (input->hw.msg != WM_POINTERUP) @@ -2554,11 +2712,489 @@ static struct pointer *find_pointer_from_id( struct desktop *desktop, unsigned i pointer->timeout = NULL; pointer->desktop = desktop; pointer->primary = list_empty( &desktop->pointers ); + pointer->long_press_sent = 0; + pointer->click_pending = 0; + pointer->drag_press_sent = 0; + pointer->down_lparam = 0; + pointer->down_time = 0; list_add_tail( &desktop->pointers, &pointer->entry ); return pointer; } +/* release pointers whose touch end was lost (no real input for a long time); + * synthesizes the missing WM_POINTERUP so the app sees the button release, + * then frees the pointer so the next touch can become primary again */ +static void free_stale_pointers( struct desktop *desktop ) +{ + struct pointer *pointer, *next; + + LIST_FOR_EACH_ENTRY_SAFE( pointer, next, &desktop->pointers, struct pointer, entry ) + { + if (pointer->synthetic_updates > STALE_POINTER_MAX_UPDATES) + { + if (pointer->timeout) remove_timeout_user( pointer->timeout ); + pointer->input.hw.msg = WM_POINTERUP; + queue_pointer_message( pointer, 0 ); /* sends UP + frees the pointer */ + } + } +} + +/* queue a WM_TOUCH message for the touch contact described by 'changed' */ +static void queue_touch_message( struct desktop *desktop, struct pointer *changed ) +{ + desktop_shm_t *desktop_shm = desktop->shared; + struct hw_msg_source source = { IMDT_TOUCH, IMO_HARDWARE }; + struct message *msg; + struct pointer *p; + TOUCHINPUT *data; + struct rectangle top_rect; + unsigned int count = 0, i = 0; + + LIST_FOR_EACH_ENTRY( p, &desktop->pointers, struct pointer, entry ) count++; + if (!count) return; + + if (!(msg = alloc_hardware_message( 0, source, get_tick_count(), count * sizeof(TOUCHINPUT) ))) return; + + get_virtual_screen_rect( desktop, &top_rect, 1 ); + data = (TOUCHINPUT *)((char *)msg->data + sizeof(struct hardware_msg_data)); + + LIST_FOR_EACH_ENTRY( p, &desktop->pointers, struct pointer, entry ) + { + DWORD flags = TOUCHEVENTF_INRANGE | TOUCHEVENTF_MOVE; + int x = LOWORD( p->input.hw.lparam ) * (top_rect.right - top_rect.left) / 65535; + int y = HIWORD( p->input.hw.lparam ) * (top_rect.bottom - top_rect.top) / 65535; + + if (p == changed) + { + if (p->input.hw.msg == WM_POINTERDOWN) flags = TOUCHEVENTF_INRANGE | TOUCHEVENTF_DOWN; + else if (p->input.hw.msg == WM_POINTERUP) flags = TOUCHEVENTF_UP; + else flags = TOUCHEVENTF_INRANGE | TOUCHEVENTF_MOVE; + } + + if (i == 0) flags |= TOUCHEVENTF_PRIMARY; + + data[i].x = x * 100; + data[i].y = y * 100; + data[i].hSource = 0; + data[i].dwID = LOWORD( p->input.hw.wparam ); + data[i].dwFlags = flags; + data[i].dwTime = msg->time; + data[i].dwExtraInfo = 0; + data[i].cxContact = 1; + data[i].cyContact = 1; + i++; + } + + msg->win = get_user_full_handle( changed->win ); + msg->msg = WM_TOUCH; + msg->wparam = count; + msg->lparam = 0; + msg->x = desktop_shm->cursor.x; + msg->y = desktop_shm->cursor.y; + + queue_hardware_message( desktop, msg, 1 ); +} + +static unsigned int gesture_sequence_id; + +/* queue a WM_GESTURE message */ +static void queue_gesture_message( struct desktop *desktop, user_handle_t win, + unsigned int flags, unsigned int gesture_id, POINT pt, + ULONGLONG arguments, unsigned int sequence_id ) +{ + struct hw_msg_source source = { IMDT_TOUCH, IMO_HARDWARE }; + struct message *msg; + GESTUREINFO *info; + + if (!(msg = alloc_hardware_message( 0, source, get_tick_count(), sizeof(GESTUREINFO) ))) return; + + info = (GESTUREINFO *)((char *)msg->data + sizeof(struct hardware_msg_data)); + info->cbSize = sizeof(GESTUREINFO); + info->dwFlags = flags; + info->dwID = gesture_id; + info->hwndTarget = 0; + info->ptsLocation.x = pt.x; + info->ptsLocation.y = pt.y; + info->dwInstanceID = 0; + info->dwSequenceID = sequence_id; + info->ullArguments = arguments; + info->cbExtraArgs = 0; + + msg->win = get_user_full_handle( win ); + msg->msg = WM_GESTURE; + msg->wparam = 0; + msg->lparam = 0; + msg->x = pt.x; + msg->y = pt.y; + + queue_hardware_message( desktop, msg, 1 ); +} + +/* recognize gestures from the touch contacts and queue WM_GESTURE messages */ + +/* reset the WM_GESTURE recognition state, leaving the legacy gesture state + * (scroll/zoom, stick + tap) untouched since it may be shared with the legacy + * mouse synthesis path */ +static void reset_gesture_state( struct gesture_state *gesture ) +{ + gesture->active = 0; + gesture->sequence_id = 0; + gesture->win = 0; + gesture->contact_count = 0; + gesture->gfirst_down_time = 0; + gesture->gsecond_id = 0; + gesture->gsecond_down_time = 0; + gesture->gtwo_tap = 0; +} + +static void update_gesture( struct desktop *desktop, struct pointer *changed ) +{ + struct gesture_state *gesture = &desktop->gesture; + struct rectangle top_rect; + struct pointer *p; + unsigned int count = 0, i; + int pos[2][2]; + POINT pt; + + get_virtual_screen_rect( desktop, &top_rect, 1 ); + + /* collect the positions of the active (not yet lifted) contacts */ + LIST_FOR_EACH_ENTRY( p, &desktop->pointers, struct pointer, entry ) + { + if (p->input.hw.msg == WM_POINTERUP) continue; + if (count >= 2) break; + pos[count][0] = LOWORD( p->input.hw.lparam ) * (top_rect.right - top_rect.left) / 65535; + pos[count][1] = HIWORD( p->input.hw.lparam ) * (top_rect.bottom - top_rect.top) / 65535; + count++; + } + + /* no more contacts: a two-finger tap completes when both fingers lifted */ + if (!count) + { + if (gesture->active) + { + if (gesture->gtwo_tap && window_gesture_is_enabled( gesture->win, GID_TWOFINGERTAP )) + { + int dx = gesture->gx[1] - gesture->gx[0], dy = gesture->gy[1] - gesture->gy[0]; + pt.x = (gesture->gx[0] + gesture->gx[1]) / 2; + pt.y = (gesture->gy[0] + gesture->gy[1]) / 2; + queue_gesture_message( desktop, gesture->win, 0, GID_TWOFINGERTAP, pt, + dx * dx + dy * dy, gesture->sequence_id ); + } + pt.x = gesture->glast_x[0]; pt.y = gesture->glast_y[0]; + queue_gesture_message( desktop, gesture->win, GF_END, GID_END, pt, 0, gesture->sequence_id ); + } + reset_gesture_state( gesture ); + return; + } + + if (!gesture->active) + { + if (count >= 2) + { + /* start a two-finger gesture when the second contact lands; if the + * first finger was already held this may be a press-and-tap, and + * if both landed together it may be a two-finger tap */ + gesture->active = 1; + gesture->sequence_id = ++gesture_sequence_id; + gesture->win = changed->win; + gesture->contact_count = 2; + gesture->gdistance = gesture->glast_distance = 0; + gesture->gpan_x = gesture->gpan_y = 0; + gesture->gtwo_tap = 0; + for (i = 0; i < count; i++) + { + gesture->gx[i] = gesture->glast_x[i] = pos[i][0]; + gesture->gy[i] = gesture->glast_y[i] = pos[i][1]; + } + gesture->glast_pan_x = (pos[0][0] + pos[1][0]) / 2; + gesture->glast_pan_y = (pos[0][1] + pos[1][1]) / 2; + gesture->gtime = get_tick_count(); + gesture->gsecond_id = LOWORD( changed->input.hw.wparam ); + gesture->gsecond_down_time = get_tick_count(); + gesture->gstick_x = pos[0][0]; + gesture->gstick_y = pos[0][1]; + pt.x = pos[0][0]; pt.y = pos[0][1]; + queue_gesture_message( desktop, changed->win, GF_BEGIN, GID_BEGIN, pt, 0, gesture->sequence_id ); + } + else + { + /* remember the single contact position; this is the first finger + * that may be held for a press-and-tap */ + gesture->glast_x[0] = pos[0][0]; + gesture->glast_y[0] = pos[0][1]; + gesture->gfirst_down_time = get_tick_count(); + gesture->gstick_x = pos[0][0]; + gesture->gstick_y = pos[0][1]; + } + return; + } + + if (gesture->contact_count == 1) + { + /* single-finger pan */ + if (count < 1) + { + pt.x = gesture->glast_x[0]; pt.y = gesture->glast_y[0]; + queue_gesture_message( desktop, gesture->win, GF_END, GID_END, pt, 0, gesture->sequence_id ); + reset_gesture_state( gesture ); + return; + } + if (window_gesture_is_enabled( gesture->win, GID_PAN )) + { + gesture->gpan_x += pos[0][0] - gesture->glast_x[0]; + gesture->gpan_y += pos[0][1] - gesture->glast_y[0]; + pt.x = pos[0][0]; pt.y = pos[0][1]; + queue_gesture_message( desktop, gesture->win, 0, GID_PAN, pt, + MAKELONG( gesture->gpan_x, gesture->gpan_y ), gesture->sequence_id ); + } + gesture->glast_x[0] = pos[0][0]; + gesture->glast_y[0] = pos[0][1]; + return; + } + + /* two-finger gesture in progress */ + if (count < 2) + { + /* one finger lifted; if the second finger tapped while the first was + * held it's a press-and-tap, otherwise wait for both to lift for a + * two-finger tap */ + if (gesture->gtwo_tap) + { + pt.x = gesture->glast_x[0]; pt.y = gesture->glast_y[0]; + queue_gesture_message( desktop, gesture->win, GF_END, GID_END, pt, 0, gesture->sequence_id ); + reset_gesture_state( gesture ); + return; + } + if (LOWORD( changed->input.hw.wparam ) == gesture->gsecond_id && + get_tick_count() - gesture->gsecond_down_time < SECOND_TAP_MS && + get_tick_count() - gesture->gfirst_down_time >= PRESS_AND_TAP_HOLD_MS) + { + /* the second finger tapped while the first was held: press-and-tap */ + if (window_gesture_is_enabled( gesture->win, GID_PRESSANDTAP )) + { + int dx = gesture->gx[1] - gesture->gstick_x, dy = gesture->gy[1] - gesture->gstick_y; + pt.x = gesture->gstick_x; pt.y = gesture->gstick_y; + queue_gesture_message( desktop, gesture->win, 0, GID_PRESSANDTAP, pt, + MAKELONG( dx, dy ), gesture->sequence_id ); + } + pt.x = gesture->glast_x[0]; pt.y = gesture->glast_y[0]; + queue_gesture_message( desktop, gesture->win, GF_END, GID_END, pt, 0, gesture->sequence_id ); + reset_gesture_state( gesture ); + return; + } + /* the first finger lifted, or the gesture is no longer a tap */ + gesture->gtwo_tap = (get_tick_count() - gesture->gtime < SECOND_TAP_MS); + pt.x = gesture->glast_x[0]; pt.y = gesture->glast_y[0]; + queue_gesture_message( desktop, gesture->win, GF_END, GID_END, pt, 0, gesture->sequence_id ); + reset_gesture_state( gesture ); + return; + } + + { + int dx = pos[1][0] - pos[0][0], dy = pos[1][1] - pos[0][1]; + int distance2 = dx * dx + dy * dy; /* squared distance between contacts */ + int prev_dx = gesture->glast_x[1] - gesture->glast_x[0], prev_dy = gesture->glast_y[1] - gesture->glast_y[0]; + int centroid_x = (pos[0][0] + pos[1][0]) / 2, centroid_y = (pos[0][1] + pos[1][1]) / 2; + int prev_len2 = prev_dx * prev_dx + prev_dy * prev_dy; + int cross = prev_dx * dy - prev_dy * dx; /* sin(angle delta) * |prev| * |cur| */ + + /* fingers moving enough cancels a two-finger tap */ + if (distance2 != gesture->glast_distance && abs( distance2 - gesture->glast_distance ) > 2000) + gesture->gtwo_tap = 0; + + if (window_gesture_is_enabled( gesture->win, GID_ZOOM ) && gesture->glast_distance && + distance2 != gesture->glast_distance && + (distance2 > gesture->glast_distance ? distance2 - gesture->glast_distance : + gesture->glast_distance - distance2) > 200) + { + pt.x = centroid_x; pt.y = centroid_y; + queue_gesture_message( desktop, gesture->win, 0, GID_ZOOM, pt, distance2, gesture->sequence_id ); + } + if (window_gesture_is_enabled( gesture->win, GID_ROTATE ) && prev_len2 && + abs( cross ) * 1000 / prev_len2 > 8) + { + /* approximate the angle delta (radians) for small angles as cross / |prev|^2 */ + double angle_delta = (double)cross / prev_len2; + pt.x = centroid_x; pt.y = centroid_y; + queue_gesture_message( desktop, gesture->win, 0, GID_ROTATE, pt, + (ULONGLONG)GID_ROTATE_ANGLE_TO_ARGUMENT( angle_delta ), gesture->sequence_id ); + } + if (window_gesture_is_enabled( gesture->win, GID_PAN ) && + (centroid_x != gesture->glast_pan_x || centroid_y != gesture->glast_pan_y)) + { + gesture->gpan_x += centroid_x - gesture->glast_pan_x; + gesture->gpan_y += centroid_y - gesture->glast_pan_y; + pt.x = centroid_x; pt.y = centroid_y; + queue_gesture_message( desktop, gesture->win, 0, GID_PAN, pt, + MAKELONG( gesture->gpan_x, gesture->gpan_y ), gesture->sequence_id ); + } + + gesture->glast_distance = distance2; + gesture->glast_pan_x = centroid_x; + gesture->glast_pan_y = centroid_y; + for (i = 0; i < count; i++) + { + gesture->glast_x[i] = gesture->gx[i]; + gesture->glast_y[i] = gesture->gy[i]; + gesture->gx[i] = pos[i][0]; + gesture->gy[i] = pos[i][1]; + } + } +} + +/* two-finger scroll / pinch zoom for windows that don't use WM_GESTURE. + * Windows turns these into mouse wheel events for legacy apps. */ +static void update_legacy_gesture( struct desktop *desktop, struct pointer *changed ) +{ + struct gesture_state *gesture = &desktop->gesture; + struct rectangle top_rect; + struct pointer *p; + unsigned int count = 0, i; + int pos[2][2]; + int centroid_x, centroid_y, dx, dy, distance2; + + get_virtual_screen_rect( desktop, &top_rect, 1 ); + + LIST_FOR_EACH_ENTRY( p, &desktop->pointers, struct pointer, entry ) + { + if (p->input.hw.msg == WM_POINTERUP) continue; + if (count >= 2) break; + pos[count][0] = LOWORD( p->input.hw.lparam ) * (top_rect.right - top_rect.left) / 65535; + pos[count][1] = HIWORD( p->input.hw.lparam ) * (top_rect.bottom - top_rect.top) / 65535; + count++; + } + + if (count < 2) + { + /* if a second finger landed while the first was held and lifted again + * within SECOND_TAP_MS, it's a "stick + tap" right click */ + if (gesture->second_down_time && count == 1 && + get_tick_count() - gesture->second_down_time < SECOND_TAP_MS) + { + /* the remaining contact should be the held (first) finger, near + * the position recorded when the second finger landed */ + if (abs(pos[0][0] - gesture->stick_x) < 60 && abs(pos[0][1] - gesture->stick_y) < 60) + { + LIST_FOR_EACH_ENTRY( p, &desktop->pointers, struct pointer, entry ) + { + if (p->input.hw.msg == WM_POINTERUP) continue; + p->click_pending = 0; + p->long_press_sent = 1; + if (p->drag_press_sent) + { + send_pointer_mouse_message( p, WM_LBUTTONUP ); + p->drag_press_sent = 0; + } + send_pointer_mouse_message( p, WM_RBUTTONDOWN ); + send_pointer_mouse_message( p, WM_RBUTTONUP ); + break; + } + } + } + gesture->second_down_time = 0; + gesture->legacy_active = 0; + gesture->scroll_x = gesture->scroll_y = gesture->zoom_acc = 0; + return; + } + + if (!gesture->legacy_active) + { + gesture->legacy_active = 1; + gesture->scroll_x = gesture->scroll_y = gesture->zoom_acc = 0; + /* a second finger landed while the first was already down; remember + * the first finger's position and when the second landed so a quick + * second-finger tap can be detected as a right click */ + gesture->stick_x = pos[0][0]; + gesture->stick_y = pos[0][1]; + gesture->second_down_time = get_tick_count(); + /* two-finger gesture: cancel any pending tap click, long press and + * drag press so the gesture doesn't leave a button held */ + LIST_FOR_EACH_ENTRY( p, &desktop->pointers, struct pointer, entry ) + { + if (p->drag_press_sent) + { + send_pointer_mouse_message( p, WM_LBUTTONUP ); + p->drag_press_sent = 0; + } + p->click_pending = 0; + p->long_press_sent = 1; + } + for (i = 0; i < 2; i++) + { + gesture->last_x[i] = pos[i][0]; + gesture->last_y[i] = pos[i][1]; + } + gesture->last_distance = 0; + gesture->last_pan_x = (pos[0][0] + pos[1][0]) / 2; + gesture->last_pan_y = (pos[0][1] + pos[1][1]) / 2; + return; + } + + centroid_x = (pos[0][0] + pos[1][0]) / 2; + centroid_y = (pos[0][1] + pos[1][1]) / 2; + dx = pos[1][0] - pos[0][0]; + dy = pos[1][1] - pos[0][1]; + distance2 = dx * dx + dy * dy; + + /* pinch zoom: distance change -> Ctrl + wheel */ + if (gesture->last_distance) + { + gesture->zoom_acc += distance2 - gesture->last_distance; + while (gesture->zoom_acc > 5000) + { + queue_pointer_mouse( desktop, changed->win, WM_MOUSEWHEEL, centroid_x, centroid_y, + (WHEEL_DELTA << 16) | MK_CONTROL ); + gesture->zoom_acc -= 5000; + } + while (gesture->zoom_acc < -5000) + { + queue_pointer_mouse( desktop, changed->win, WM_MOUSEWHEEL, centroid_x, centroid_y, + (-(WHEEL_DELTA << 16)) | MK_CONTROL ); + gesture->zoom_acc += 5000; + } + } + + /* two-finger scroll: centroid movement -> wheel */ + gesture->scroll_x += centroid_x - gesture->last_pan_x; + gesture->scroll_y += centroid_y - gesture->last_pan_y; + + while (gesture->scroll_y > 25) + { + queue_pointer_mouse( desktop, changed->win, WM_MOUSEWHEEL, centroid_x, centroid_y, + (-(WHEEL_DELTA << 16)) ); + gesture->scroll_y -= 25; + } + while (gesture->scroll_y < -25) + { + queue_pointer_mouse( desktop, changed->win, WM_MOUSEWHEEL, centroid_x, centroid_y, + (WHEEL_DELTA << 16) ); + gesture->scroll_y += 25; + } + while (gesture->scroll_x > 25) + { + queue_pointer_mouse( desktop, changed->win, WM_MOUSEHWHEEL, centroid_x, centroid_y, + (-(WHEEL_DELTA << 16)) ); + gesture->scroll_x -= 25; + } + while (gesture->scroll_x < -25) + { + queue_pointer_mouse( desktop, changed->win, WM_MOUSEHWHEEL, centroid_x, centroid_y, + (WHEEL_DELTA << 16) ); + gesture->scroll_x += 25; + } + + gesture->last_distance = distance2; + gesture->last_pan_x = centroid_x; + gesture->last_pan_y = centroid_y; + for (i = 0; i < 2; i++) + { + gesture->last_x[i] = pos[i][0]; + gesture->last_y[i] = pos[i][1]; + } +} + /* queue a hardware message for a custom type of event */ static void queue_custom_hardware_message( struct desktop *desktop, user_handle_t win, unsigned int origin, const union hw_input *input ) @@ -2593,12 +3229,39 @@ static void queue_custom_hardware_message( struct desktop *desktop, user_handle_ if (input->hw.msg == WM_POINTERDOWN || input->hw.msg == WM_POINTERUP || input->hw.msg == WM_POINTERUPDATE) { + BOOL gesture_enabled = window_gesture_is_enabled( win, GID_ZOOM ) || + window_gesture_is_enabled( win, GID_PAN ) || + window_gesture_is_enabled( win, GID_ROTATE ) || + window_gesture_is_enabled( win, GID_TWOFINGERTAP ) || + window_gesture_is_enabled( win, GID_PRESSANDTAP ); + + if (input->hw.msg == WM_POINTERDOWN) free_stale_pointers( desktop ); + pointer = find_pointer_from_id( desktop, LOWORD(input->hw.wparam) ); if (pointer->timeout) remove_timeout_user( pointer->timeout ); pointer->input = *input; pointer->win = win; + pointer->synthetic_updates = 0; /* real driver input resets the stale counter */ - queue_pointer_message( pointer, 0 ); + if (window_is_touch_registered( win )) + { + /* a touch-registered window receives WM_TOUCH instead of WM_GESTURE */ + queue_touch_message( desktop, pointer ); + if (input->hw.msg == WM_POINTERUP) + { + list_remove( &pointer->entry ); + free( pointer ); + } + } + else + { + /* gesture-enabled windows receive WM_GESTURE in addition to the + * legacy mouse synthesis, so apps that don't handle gestures still + * get tap-to-click, scroll and right-click behavior */ + if (gesture_enabled) update_gesture( desktop, pointer ); + update_legacy_gesture( desktop, pointer ); + queue_pointer_message( pointer, 0 ); + } return; } @@ -2757,7 +3420,7 @@ static int get_hardware_message( struct thread *thread, unsigned int hw_id, user set_reply_data( msg->data, msg->data_size ); if (msg_bit == QS_HARDWARE) flags |= PM_REMOVE; /* always remove internal hardware messages right away */ - else if (!(msg_bit & (QS_RAWINPUT | QS_POINTER))) flags &= ~PM_REMOVE; /* wait for accept_hardware_message request */ + else if (!(msg_bit & (QS_RAWINPUT | QS_POINTER | QS_TOUCH))) flags &= ~PM_REMOVE; /* wait for accept_hardware_message request */ if (flags & PM_REMOVE) release_hardware_message( current->queue, data->hw_id ); return 1; } diff --git a/server/request_handlers.h b/server/request_handlers.h index 3372c6c92db..a2473af5ee3 100644 --- a/server/request_handlers.h +++ b/server/request_handlers.h @@ -157,6 +157,10 @@ DECL_HANDLER(get_window_info); DECL_HANDLER(init_window_info); DECL_HANDLER(set_window_info); DECL_HANDLER(set_window_fnid); +DECL_HANDLER(set_window_touch_flags); +DECL_HANDLER(get_window_touch_flags); +DECL_HANDLER(set_gesture_config); +DECL_HANDLER(get_gesture_config); DECL_HANDLER(set_parent); DECL_HANDLER(get_window_parents); DECL_HANDLER(get_window_list); @@ -469,6 +473,10 @@ static const req_handler req_handlers[REQ_NB_REQUESTS] = (req_handler)req_init_window_info, (req_handler)req_set_window_info, (req_handler)req_set_window_fnid, + (req_handler)req_set_window_touch_flags, + (req_handler)req_get_window_touch_flags, + (req_handler)req_set_gesture_config, + (req_handler)req_get_gesture_config, (req_handler)req_set_parent, (req_handler)req_get_window_parents, (req_handler)req_get_window_list, @@ -1539,6 +1547,22 @@ C_ASSERT( sizeof(struct set_window_info_reply) == 24 ); C_ASSERT( offsetof(struct set_window_fnid_request, handle) == 12 ); C_ASSERT( offsetof(struct set_window_fnid_request, atom) == 16 ); C_ASSERT( sizeof(struct set_window_fnid_request) == 24 ); +C_ASSERT( offsetof(struct set_window_touch_flags_request, handle) == 12 ); +C_ASSERT( offsetof(struct set_window_touch_flags_request, flags) == 16 ); +C_ASSERT( offsetof(struct set_window_touch_flags_request, set) == 20 ); +C_ASSERT( sizeof(struct set_window_touch_flags_request) == 24 ); +C_ASSERT( offsetof(struct get_window_touch_flags_request, handle) == 12 ); +C_ASSERT( sizeof(struct get_window_touch_flags_request) == 16 ); +C_ASSERT( offsetof(struct get_window_touch_flags_reply, flags) == 8 ); +C_ASSERT( sizeof(struct get_window_touch_flags_reply) == 16 ); +C_ASSERT( offsetof(struct set_gesture_config_request, handle) == 12 ); +C_ASSERT( offsetof(struct set_gesture_config_request, count) == 16 ); +C_ASSERT( sizeof(struct set_gesture_config_request) == 24 ); +C_ASSERT( offsetof(struct get_gesture_config_request, handle) == 12 ); +C_ASSERT( offsetof(struct get_gesture_config_request, count) == 16 ); +C_ASSERT( sizeof(struct get_gesture_config_request) == 24 ); +C_ASSERT( offsetof(struct get_gesture_config_reply, count) == 8 ); +C_ASSERT( sizeof(struct get_gesture_config_reply) == 16 ); C_ASSERT( offsetof(struct set_parent_request, handle) == 12 ); C_ASSERT( offsetof(struct set_parent_request, parent) == 16 ); C_ASSERT( sizeof(struct set_parent_request) == 24 ); diff --git a/server/request_trace.h b/server/request_trace.h index eed94a179b8..635c00548ef 100644 --- a/server/request_trace.h +++ b/server/request_trace.h @@ -1779,6 +1779,42 @@ static void dump_set_window_fnid_request( const struct set_window_fnid_request * fprintf( stderr, ", atom=%04x", req->atom ); } +static void dump_set_window_touch_flags_request( const struct set_window_touch_flags_request *req ) +{ + fprintf( stderr, " handle=%08x", req->handle ); + fprintf( stderr, ", flags=%08x", req->flags ); + fprintf( stderr, ", set=%08x", req->set ); +} + +static void dump_get_window_touch_flags_request( const struct get_window_touch_flags_request *req ) +{ + fprintf( stderr, " handle=%08x", req->handle ); +} + +static void dump_get_window_touch_flags_reply( const struct get_window_touch_flags_reply *req ) +{ + fprintf( stderr, " flags=%08x", req->flags ); +} + +static void dump_set_gesture_config_request( const struct set_gesture_config_request *req ) +{ + fprintf( stderr, " handle=%08x", req->handle ); + fprintf( stderr, ", count=%08x", req->count ); + dump_varargs_bytes( ", config=", cur_size ); +} + +static void dump_get_gesture_config_request( const struct get_gesture_config_request *req ) +{ + fprintf( stderr, " handle=%08x", req->handle ); + fprintf( stderr, ", count=%08x", req->count ); +} + +static void dump_get_gesture_config_reply( const struct get_gesture_config_reply *req ) +{ + fprintf( stderr, " count=%08x", req->count ); + dump_varargs_bytes( ", config=", cur_size ); +} + static void dump_set_parent_request( const struct set_parent_request *req ) { fprintf( stderr, " handle=%08x", req->handle ); @@ -3689,6 +3725,10 @@ static const dump_func req_dumpers[REQ_NB_REQUESTS] = (dump_func)dump_init_window_info_request, (dump_func)dump_set_window_info_request, (dump_func)dump_set_window_fnid_request, + (dump_func)dump_set_window_touch_flags_request, + (dump_func)dump_get_window_touch_flags_request, + (dump_func)dump_set_gesture_config_request, + (dump_func)dump_get_gesture_config_request, (dump_func)dump_set_parent_request, (dump_func)dump_get_window_parents_request, (dump_func)dump_get_window_list_request, @@ -4001,6 +4041,10 @@ static const dump_func reply_dumpers[REQ_NB_REQUESTS] = NULL, (dump_func)dump_set_window_info_reply, NULL, + NULL, + (dump_func)dump_get_window_touch_flags_reply, + NULL, + (dump_func)dump_get_gesture_config_reply, (dump_func)dump_set_parent_reply, (dump_func)dump_get_window_parents_reply, (dump_func)dump_get_window_list_reply, @@ -4313,6 +4357,10 @@ static const char * const req_names[REQ_NB_REQUESTS] = "init_window_info", "set_window_info", "set_window_fnid", + "set_window_touch_flags", + "get_window_touch_flags", + "set_gesture_config", + "get_gesture_config", "set_parent", "get_window_parents", "get_window_list", diff --git a/server/user.h b/server/user.h index 117d95fa7b3..d74690a28bc 100644 --- a/server/user.h +++ b/server/user.h @@ -61,6 +61,43 @@ struct key_repeat struct timeout_user *timeout; /* timeout for repeat */ }; +struct gesture_state +{ + /* WM_GESTURE recognition state */ + unsigned int active; /* a gesture is in progress */ + unsigned int sequence_id; /* gesture sequence id */ + user_handle_t win; /* target window */ + unsigned int contact_count; /* number of active contacts */ + int gx[2]; /* current contact positions */ + int gy[2]; + int glast_x[2]; /* previous contact positions */ + int glast_y[2]; + int gdistance; /* distance between the two contacts */ + int glast_distance; /* previous distance */ + int gpan_x; /* cumulative pan distance */ + int gpan_y; + int glast_pan_x; /* previous pan position */ + int glast_pan_y; + unsigned int gtime; /* time the gesture started */ + unsigned int gfirst_down_time; /* tick when the first contact landed */ + unsigned int gsecond_id; /* touch id of the second contact */ + unsigned int gsecond_down_time; /* tick when the second contact landed */ + unsigned int gtwo_tap; /* two-finger tap candidate in progress */ + int gstick_x, gstick_y; /* position of the first (held) contact */ + /* legacy (mouse synthesis) state */ + unsigned int legacy_active; /* two-finger legacy gesture (scroll/zoom) in progress */ + int scroll_x; /* accumulated two-finger scroll (x) */ + int scroll_y; /* accumulated two-finger scroll (y) */ + int zoom_acc; /* accumulated pinch zoom distance */ + int last_x[2]; /* previous contact positions */ + int last_y[2]; + int last_distance; /* previous distance */ + int last_pan_x; /* previous pan position */ + int last_pan_y; + unsigned int second_down_time; /* tick when the second contact landed (stick+tap) */ + int stick_x, stick_y; /* position of the first (held) contact */ +}; + struct desktop { struct object obj; /* object header */ @@ -77,6 +114,7 @@ struct desktop struct hook_table *global_hooks; /* table of global hooks on this desktop */ struct list hotkeys; /* list of registered hotkeys */ struct list pointers; /* list of active pointers */ + struct gesture_state gesture; /* gesture recognition state */ struct timeout_user *close_timeout; /* timeout before closing the desktop */ struct thread_input *foreground_input; /* thread input of foreground thread */ process_id_t foreground_pid; /* id of the foreground process */ @@ -178,6 +216,8 @@ extern struct thread *make_window_foreground( struct desktop *desktop, user_hand int *is_desktop, int *set_foreground ); extern int is_window_visible( user_handle_t window ); extern int is_window_transparent( user_handle_t window ); +extern BOOL window_is_touch_registered( user_handle_t window ); +extern BOOL window_gesture_is_enabled( user_handle_t window, unsigned int gesture_id ); extern int make_window_active( user_handle_t window ); extern struct thread *get_window_thread( user_handle_t handle ); extern user_handle_t shallow_window_from_point( struct desktop *desktop, int x, int y ); diff --git a/server/window.c b/server/window.c index 28e95a675b7..fef7a682783 100644 --- a/server/window.c +++ b/server/window.c @@ -46,6 +46,9 @@ struct property lparam_t data; /* property data (user-defined storage) */ }; +/* internal touch flag to indicate that the window is registered for touch */ +#define WIN_TOUCH_FLAG_REGISTERED 0x80000000 + enum property_type { PROP_TYPE_FREE, /* free entry */ @@ -83,6 +86,9 @@ struct window unsigned int color_key; /* color key for a layered window */ unsigned int alpha; /* alpha value for a layered window */ unsigned int layered_flags; /* flags for a layered window */ + unsigned int touch_flags; /* touch registration flags */ + unsigned int gesture_count; /* number of gesture config entries */ + GESTURECONFIG *gesture_config; /* gesture config array */ WCHAR *text; /* window caption text */ data_size_t text_len; /* length of window caption */ unsigned int paint_flags; /* various painting flags */ @@ -156,6 +162,7 @@ static void window_destroy( struct object *obj ) if (win->update_region) free_region( win->update_region ); if (win->class) release_class( win->class ); free( win->text ); + free( win->gesture_config ); if (win->shared) free_shared_object( win->shared ); } @@ -664,6 +671,9 @@ static struct window *create_window( struct window *parent, struct window *owner win->is_layered = 0; win->is_orphan = 0; win->set_foreground = 0; + win->touch_flags = 0; + win->gesture_count = 0; + win->gesture_config = NULL; win->text = NULL; win->text_len = 0; win->paint_flags = 0; @@ -2298,6 +2308,102 @@ DECL_HANDLER(set_window_fnid) } +/* check whether the window or one of its parents is registered for touch */ +BOOL window_is_touch_registered( user_handle_t handle ) +{ + struct window *win; + + if (!(win = get_window( handle ))) return FALSE; + for (;;) + { + if (win->touch_flags) return TRUE; + if (!win->parent) break; + win = win->parent; + } + return FALSE; +} + +/* check whether the window or one of its parents has the given gesture enabled */ +BOOL window_gesture_is_enabled( user_handle_t handle, unsigned int gesture_id ) +{ + struct window *win; + unsigned int i; + + if (!(win = get_window( handle ))) return FALSE; + for (;;) + { + for (i = 0; i < win->gesture_count; i++) + { + if (win->gesture_config[i].dwID == gesture_id) return !!(win->gesture_config[i].dwWant & 1); + } + if (!win->parent) break; + win = win->parent; + } + return FALSE; +} + + +/* set or clear the touch flags of a window */ +DECL_HANDLER(set_window_touch_flags) +{ + struct window *win = get_window( req->handle ); + + if (!win) return; + if (req->set) win->touch_flags = WIN_TOUCH_FLAG_REGISTERED | req->flags; + else win->touch_flags = 0; +} + + +/* get the touch flags of a window */ +DECL_HANDLER(get_window_touch_flags) +{ + struct window *win = get_window( req->handle ); + + if (!win) return; + reply->flags = win->touch_flags; +} + + +/* set the gesture configuration of a window */ +DECL_HANDLER(set_gesture_config) +{ + struct window *win = get_window( req->handle ); + + if (!win) return; + if (!req->count) + { + free( win->gesture_config ); + win->gesture_config = NULL; + win->gesture_count = 0; + return; + } + if (req->count > GESTURECONFIGMAXCOUNT) + { + set_error( STATUS_INVALID_PARAMETER ); + return; + } + if (get_req_data_size() != req->count * sizeof(GESTURECONFIG)) + { + set_error( STATUS_INVALID_PARAMETER ); + return; + } + if (!(win->gesture_config = realloc( win->gesture_config, req->count * sizeof(GESTURECONFIG) ))) return; + memcpy( win->gesture_config, get_req_data(), req->count * sizeof(GESTURECONFIG) ); + win->gesture_count = req->count; +} + + +/* get the gesture configuration of a window */ +DECL_HANDLER(get_gesture_config) +{ + struct window *win = get_window( req->handle ); + + if (!win) return; + reply->count = min( req->count, win->gesture_count ); + if (reply->count) set_reply_data( win->gesture_config, reply->count * sizeof(GESTURECONFIG) ); +} + + /* set the parent of a window */ DECL_HANDLER(set_parent) { diff --git a/server/winstation.c b/server/winstation.c index d27adc3ecb4..e0782a54de5 100644 --- a/server/winstation.c +++ b/server/winstation.c @@ -284,6 +284,7 @@ static bool desktop_init( struct object *obj, const void *init_data ) desktop->cursor_win = 0; desktop->alt_pressed = 0; memset( &desktop->key_repeat, 0, sizeof(desktop->key_repeat) ); + memset( &desktop->gesture, 0, sizeof(desktop->gesture) ); list_init( &desktop->threads ); list_init( &desktop->hotkeys ); list_init( &desktop->pointers ); -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/11663