From b1ffc6ca74e40d9d0f6e258572b5177cb469d249 Mon Sep 17 00:00:00 2001
From: Jacek Caban <jacek@codeweavers.com>
Date: Fri, 22 Jul 2022 13:05:00 +0200
Subject: [PATCH] win32u: Use syscall interface for clipboard functions.

---
 dlls/win32u/gdiobj.c         |  11 ----
 dlls/win32u/syscall.c        |  11 ++++
 dlls/win32u/win32u.spec      |  22 +++----
 dlls/win32u/win32u_private.h |  12 ----
 dlls/win32u/wrappers.c       |  67 ---------------------
 dlls/wow64win/syscall.h      |  11 ++++
 dlls/wow64win/user.c         | 109 +++++++++++++++++++++++++++++++++++
 7 files changed, 142 insertions(+), 101 deletions(-)

diff --git a/dlls/win32u/gdiobj.c b/dlls/win32u/gdiobj.c
index f6e918721a4..aeb043b33d1 100644
--- a/dlls/win32u/gdiobj.c
+++ b/dlls/win32u/gdiobj.c
@@ -1136,11 +1136,8 @@ static struct unix_funcs unix_funcs =
     NtGdiUnrealizeObject,
     NtGdiUpdateColors,
     NtGdiWidenPath,
-    NtUserChangeClipboardChain,
     NtUserChangeDisplaySettings,
     NtUserClipCursor,
-    NtUserCloseClipboard,
-    NtUserCountClipboardFormats,
     NtUserCreateCaret,
     NtUserCreateWindowEx,
     NtUserDeferWindowPosAndBand,
@@ -1152,7 +1149,6 @@ static struct unix_funcs unix_funcs =
     NtUserDrawCaptionTemp,
     NtUserDrawIconEx,
     NtUserDrawMenuBarTemp,
-    NtUserEmptyClipboard,
     NtUserEnableMenuItem,
     NtUserEnableScrollBar,
     NtUserEndDeferWindowPosEx,
@@ -1163,32 +1159,25 @@ static struct unix_funcs unix_funcs =
     NtUserExcludeUpdateRgn,
     NtUserFlashWindowEx,
     NtUserGetClassInfoEx,
-    NtUserGetClipboardData,
     NtUserGetDisplayConfigBufferSizes,
     NtUserGetIconInfo,
     NtUserGetMenuBarInfo,
-    NtUserGetPriorityClipboardFormat,
     NtUserGetScrollBarInfo,
     NtUserGetSystemMenu,
-    NtUserGetUpdatedClipboardFormats,
     NtUserGetWindowPlacement,
     NtUserHideCaret,
     NtUserHiliteMenuItem,
     NtUserInternalGetWindowIcon,
-    NtUserIsClipboardFormatAvailable,
     NtUserMoveWindow,
-    NtUserOpenClipboard,
     NtUserRegisterClassExWOW,
     NtUserReleaseDC,
     NtUserScrollDC,
     NtUserSelectPalette,
     NtUserSetActiveWindow,
     NtUserSetCapture,
-    NtUserSetClipboardData,
     NtUserSetClassLong,
     NtUserSetClassLongPtr,
     NtUserSetClassWord,
-    NtUserSetClipboardViewer,
     NtUserSetCursor,
     NtUserSetCursorIconData,
     NtUserSetFocus,
diff --git a/dlls/win32u/syscall.c b/dlls/win32u/syscall.c
index ffe1703e1e7..3a4fc085ac6 100644
--- a/dlls/win32u/syscall.c
+++ b/dlls/win32u/syscall.c
@@ -113,11 +113,14 @@ static void * const syscalls[] =
     NtUserCallNoParam,
     NtUserCallOneParam,
     NtUserCallTwoParam,
+    NtUserChangeClipboardChain,
     NtUserCheckMenuItem,
     NtUserChildWindowFromPointEx,
+    NtUserCloseClipboard,
     NtUserCloseDesktop,
     NtUserCloseWindowStation,
     NtUserCopyAcceleratorTable,
+    NtUserCountClipboardFormats,
     NtUserCreateAcceleratorTable,
     NtUserCreateDesktopEx,
     NtUserCreateInputContext,
@@ -126,6 +129,7 @@ static void * const syscalls[] =
     NtUserDestroyAcceleratorTable,
     NtUserDestroyInputContext,
     NtUserDispatchMessage,
+    NtUserEmptyClipboard,
     NtUserEndMenu,
     NtUserFindExistingCursorIcon,
     NtUserFindWindowEx,
@@ -135,6 +139,7 @@ static void * const syscalls[] =
     NtUserGetCaretBlinkTime,
     NtUserGetCaretPos,
     NtUserGetClassName,
+    NtUserGetClipboardData,
     NtUserGetClipboardFormatName,
     NtUserGetClipboardOwner,
     NtUserGetClipboardSequenceNumber,
@@ -160,6 +165,7 @@ static void * const syscalls[] =
     NtUserGetMouseMovePointsEx,
     NtUserGetObjectInformation,
     NtUserGetOpenClipboardWindow,
+    NtUserGetPriorityClipboardFormat,
     NtUserGetProcessDpiAwarenessContext,
     NtUserGetProcessWindowStation,
     NtUserGetProp,
@@ -174,11 +180,13 @@ static void * const syscalls[] =
     NtUserGetTitleBarInfo,
     NtUserGetUpdateRect,
     NtUserGetUpdateRgn,
+    NtUserGetUpdatedClipboardFormats,
     NtUserGetWindowRgnEx,
     NtUserInitializeClientPfnArrays,
     NtUserInternalGetWindowText,
     NtUserInvalidateRect,
     NtUserInvalidateRgn,
+    NtUserIsClipboardFormatAvailable,
     NtUserKillTimer,
     NtUserLockWindowUpdate,
     NtUserMapVirtualKeyEx,
@@ -186,6 +194,7 @@ static void * const syscalls[] =
     NtUserMessageCall,
     NtUserMsgWaitForMultipleObjectsEx,
     NtUserNotifyWinEvent,
+    NtUserOpenClipboard,
     NtUserOpenDesktop,
     NtUserOpenInputDesktop,
     NtUserOpenWindowStation,
@@ -201,6 +210,8 @@ static void * const syscalls[] =
     NtUserRemoveProp,
     NtUserScrollWindowEx,
     NtUserSendInput,
+    NtUserSetClipboardData,
+    NtUserSetClipboardViewer,
     NtUserSetCursorPos,
     NtUserSetKeyboardState,
     NtUserSetMenuContextHelpId,
diff --git a/dlls/win32u/win32u.spec b/dlls/win32u/win32u.spec
index d12b904d3bb..3db0092e8a9 100644
--- a/dlls/win32u/win32u.spec
+++ b/dlls/win32u/win32u.spec
@@ -782,7 +782,7 @@
 @ stdcall -syscall NtUserCallOneParam(long long)
 @ stdcall -syscall NtUserCallTwoParam(long long long)
 @ stub NtUserCanBrokerForceForeground
-@ stdcall NtUserChangeClipboardChain(long long)
+@ stdcall -syscall NtUserChangeClipboardChain(long long)
 @ stdcall NtUserChangeDisplaySettings(ptr ptr long long ptr)
 @ stub NtUserChangeWindowMessageFilterEx
 @ stub NtUserCheckAccessForIntegrityLevel
@@ -793,7 +793,7 @@
 @ stdcall -syscall NtUserChildWindowFromPointEx(long long long long)
 @ stub NtUserClearForeground
 @ stdcall NtUserClipCursor(ptr)
-@ stdcall NtUserCloseClipboard()
+@ stdcall -syscall NtUserCloseClipboard()
 @ stdcall -syscall NtUserCloseDesktop(long)
 @ stdcall -syscall NtUserCloseWindowStation(long)
 @ stub NtUserCompositionInputSinkLuidFromPoint
@@ -803,7 +803,7 @@
 @ stub NtUserConsoleControl
 @ stub NtUserConvertMemHandle
 @ stdcall -syscall NtUserCopyAcceleratorTable(long ptr long)
-@ stdcall NtUserCountClipboardFormats()
+@ stdcall -syscall NtUserCountClipboardFormats()
 @ stdcall -syscall NtUserCreateAcceleratorTable(ptr long)
 @ stub NtUserCreateActivationGroup
 @ stub NtUserCreateActivationObject
@@ -857,7 +857,7 @@
 @ stub NtUserDwmKernelShutdown
 @ stub NtUserDwmKernelStartup
 @ stub NtUserDwmValidateWindow
-@ stdcall NtUserEmptyClipboard()
+@ stdcall -syscall NtUserEmptyClipboard()
 @ stub NtUserEnableChildWindowDpiMessage
 @ stub NtUserEnableIAMAccess
 @ stdcall NtUserEnableMenuItem(long long long)
@@ -902,7 +902,7 @@
 @ stdcall -syscall NtUserGetClassName(long long ptr)
 @ stub NtUserGetClipCursor
 @ stub NtUserGetClipboardAccessToken
-@ stdcall NtUserGetClipboardData(long ptr)
+@ stdcall -syscall NtUserGetClipboardData(long ptr)
 @ stdcall -syscall NtUserGetClipboardFormatName(long ptr long)
 @ stdcall -syscall NtUserGetClipboardOwner()
 @ stdcall -syscall NtUserGetClipboardSequenceNumber()
@@ -976,7 +976,7 @@
 @ stub NtUserGetPointerProprietaryId
 @ stub NtUserGetPointerType
 @ stub NtUserGetPrecisionTouchPadConfiguration
-@ stdcall NtUserGetPriorityClipboardFormat(ptr long)
+@ stdcall -syscall NtUserGetPriorityClipboardFormat(ptr long)
 @ stdcall -syscall NtUserGetProcessDpiAwarenessContext(long)
 @ stub NtUserGetProcessUIContextInformation
 @ stdcall -syscall NtUserGetProcessWindowStation()
@@ -1004,7 +1004,7 @@
 @ stub NtUserGetUniformSpaceMapping
 @ stdcall -syscall NtUserGetUpdateRect(long ptr long)
 @ stdcall -syscall NtUserGetUpdateRgn(long long long)
-@ stdcall NtUserGetUpdatedClipboardFormats(ptr long ptr)
+@ stdcall -syscall NtUserGetUpdatedClipboardFormats(ptr long ptr)
 @ stub NtUserGetWOWClass
 @ stub NtUserGetWindowBand
 @ stub NtUserGetWindowCompositionAttribute
@@ -1050,7 +1050,7 @@
 @ stdcall -syscall NtUserInvalidateRect(long ptr long)
 @ stdcall -syscall NtUserInvalidateRgn(long long long)
 @ stub NtUserIsChildWindowDpiMessageEnabled
-@ stdcall NtUserIsClipboardFormatAvailable(long)
+@ stdcall -syscall NtUserIsClipboardFormatAvailable(long)
 @ stub NtUserIsMouseInPointerEnabled
 @ stub NtUserIsMouseInputEnabled
 @ stub NtUserIsNonClientDpiScalingEnabled
@@ -1090,7 +1090,7 @@
 @ stub NtUserNotifyIMEStatus
 @ stub NtUserNotifyProcessCreate
 @ stdcall -syscall NtUserNotifyWinEvent(long long long long)
-@ stdcall NtUserOpenClipboard(long long)
+@ stdcall -syscall NtUserOpenClipboard(long long)
 @ stdcall -syscall NtUserOpenDesktop(ptr long long)
 @ stdcall -syscall NtUserOpenInputDesktop(long long long)
 @ stub NtUserOpenThreadDesktop
@@ -1174,8 +1174,8 @@
 @ stdcall NtUserSetClassLong(long long long long)
 @ stdcall NtUserSetClassLongPtr(long long long long)
 @ stdcall NtUserSetClassWord(long long long)
-@ stdcall NtUserSetClipboardData(long ptr ptr)
-@ stdcall NtUserSetClipboardViewer(long)
+@ stdcall -syscall NtUserSetClipboardData(long ptr ptr)
+@ stdcall -syscall NtUserSetClipboardViewer(long)
 @ stub NtUserSetCoreWindow
 @ stub NtUserSetCoreWindowPartner
 @ stdcall NtUserSetCursor(long)
diff --git a/dlls/win32u/win32u_private.h b/dlls/win32u/win32u_private.h
index 4fa0b0e3493..5351f98022b 100644
--- a/dlls/win32u/win32u_private.h
+++ b/dlls/win32u/win32u_private.h
@@ -186,12 +186,9 @@ struct unix_funcs
     BOOL     (WINAPI *pNtGdiUnrealizeObject)( HGDIOBJ obj );
     BOOL     (WINAPI *pNtGdiUpdateColors)( HDC hdc );
     BOOL     (WINAPI *pNtGdiWidenPath)( HDC hdc );
-    BOOL     (WINAPI *pNtUserChangeClipboardChain)( HWND hwnd, HWND next );
     LONG     (WINAPI *pNtUserChangeDisplaySettings)( UNICODE_STRING *devname, DEVMODEW *devmode, HWND hwnd,
                                                      DWORD flags, void *lparam );
     BOOL     (WINAPI *pNtUserClipCursor)( const RECT *rect );
-    BOOL     (WINAPI *pNtUserCloseClipboard)(void);
-    INT      (WINAPI *pNtUserCountClipboardFormats)(void);
     BOOL     (WINAPI *pNtUserCreateCaret)( HWND hwnd, HBITMAP bitmap, int width, int height );
     HWND     (WINAPI *pNtUserCreateWindowEx)( DWORD ex_style, UNICODE_STRING *class_name,
                                               UNICODE_STRING *version, UNICODE_STRING *window_name,
@@ -211,7 +208,6 @@ struct unix_funcs
     BOOL     (WINAPI *pNtUserDrawIconEx)( HDC hdc, INT x0, INT y0, HICON icon, INT width,
                                           INT height, UINT istep, HBRUSH hbr, UINT flags );
     DWORD    (WINAPI *pNtUserDrawMenuBarTemp)( HWND hwnd, HDC hdc, RECT *rect, HMENU handle, HFONT font );
-    BOOL     (WINAPI *pNtUserEmptyClipboard)(void);
     BOOL     (WINAPI *pNtUserEnableMenuItem)( HMENU handle, UINT id, UINT flags );
     BOOL     (WINAPI *pNtUserEnableScrollBar)( HWND hwnd, UINT bar, UINT flags );
     BOOL     (WINAPI *pNtUserEndDeferWindowPosEx)( HDWP hdwp, BOOL async );
@@ -225,23 +221,18 @@ struct unix_funcs
     BOOL     (WINAPI *pNtUserFlashWindowEx)( FLASHWINFO *info );
     ATOM     (WINAPI *pNtUserGetClassInfoEx)( HINSTANCE instance, UNICODE_STRING *name, WNDCLASSEXW *wc,
                                               struct client_menu_name *menu_name, BOOL ansi );
-    HANDLE   (WINAPI *pNtUserGetClipboardData)( UINT format, struct get_clipboard_params *params );
     LONG     (WINAPI *pNtUserGetDisplayConfigBufferSizes)( UINT32 flags, UINT32 *num_path_info,
                                                            UINT32 *num_mode_info );
     BOOL     (WINAPI *pNtUserGetIconInfo)( HICON icon, ICONINFO *info, UNICODE_STRING *module,
                                            UNICODE_STRING *res_name, DWORD *bpp, LONG unk );
     BOOL     (WINAPI *pNtUserGetMenuBarInfo)( HWND hwnd, LONG id, LONG item, MENUBARINFO *info );
-    INT      (WINAPI *pNtUserGetPriorityClipboardFormat)( UINT *list, INT count );
     BOOL     (WINAPI *pNtUserGetScrollBarInfo)( HWND hwnd, LONG id, SCROLLBARINFO *info );
     HMENU    (WINAPI *pNtUserGetSystemMenu)( HWND hwnd, BOOL revert );
-    BOOL     (WINAPI *pNtUserGetUpdatedClipboardFormats)( UINT *formats, UINT size, UINT *out_size );
     BOOL     (WINAPI *pNtUserGetWindowPlacement)( HWND hwnd, WINDOWPLACEMENT *placement );
     BOOL     (WINAPI *pNtUserHideCaret)( HWND hwnd );
     BOOL     (WINAPI *pNtUserHiliteMenuItem)( HWND hwnd, HMENU handle, UINT item, UINT hilite );
     HICON    (WINAPI *pNtUserInternalGetWindowIcon)( HWND hwnd, UINT type );
-    BOOL     (WINAPI *pNtUserIsClipboardFormatAvailable)( UINT format );
     BOOL     (WINAPI *pNtUserMoveWindow)( HWND hwnd, INT x, INT y, INT cx, INT cy, BOOL repaint );
-    BOOL     (WINAPI *pNtUserOpenClipboard)( HWND hwnd, ULONG unk );
     ATOM     (WINAPI *pNtUserRegisterClassExWOW)( const WNDCLASSEXW *wc, UNICODE_STRING *name,
                                                   UNICODE_STRING *version,
                                                   struct client_menu_name *client_menu_name,
@@ -252,12 +243,9 @@ struct unix_funcs
     HPALETTE (WINAPI *pNtUserSelectPalette)( HDC hdc, HPALETTE hpal, WORD bkg );
     HWND     (WINAPI *pNtUserSetActiveWindow)( HWND hwnd );
     HWND     (WINAPI *pNtUserSetCapture)( HWND hwnd );
-    NTSTATUS (WINAPI *pNtUserSetClipboardData)( UINT format, HANDLE handle,
-                                                struct set_clipboard_params *params );
     DWORD    (WINAPI *pNtUserSetClassLong)( HWND hwnd, INT offset, LONG newval, BOOL ansi );
     ULONG_PTR (WINAPI *pNtUserSetClassLongPtr)( HWND hwnd, INT offset, LONG_PTR newval, BOOL ansi );
     WORD     (WINAPI *pNtUserSetClassWord)( HWND hwnd, INT offset, WORD newval );
-    HWND     (WINAPI *pNtUserSetClipboardViewer)( HWND hwnd );
     HCURSOR  (WINAPI *pNtUserSetCursor)( HCURSOR cursor );
     BOOL     (WINAPI *pNtUserSetCursorIconData)( HCURSOR cursor, UNICODE_STRING *module,
                                                  UNICODE_STRING *res_name, struct cursoricon_desc *desc );
diff --git a/dlls/win32u/wrappers.c b/dlls/win32u/wrappers.c
index c9cf89f5fe7..678cc6af6ef 100644
--- a/dlls/win32u/wrappers.c
+++ b/dlls/win32u/wrappers.c
@@ -725,18 +725,6 @@ NTSTATUS WINAPI NtGdiDdDDISetVidPnSourceOwner( const D3DKMT_SETVIDPNSOURCEOWNER
     return unix_funcs->pNtGdiDdDDISetVidPnSourceOwner( desc );
 }
 
-BOOL WINAPI NtUserCloseClipboard(void)
-{
-    if (!unix_funcs) return FALSE;
-    return unix_funcs->pNtUserCloseClipboard();
-}
-
-BOOL WINAPI NtUserChangeClipboardChain( HWND hwnd, HWND next )
-{
-    if (!unix_funcs) return DISP_CHANGE_FAILED;
-    return unix_funcs->pNtUserChangeClipboardChain( hwnd, next );
-}
-
 LONG WINAPI NtUserChangeDisplaySettings( UNICODE_STRING *devname, DEVMODEW *devmode, HWND hwnd,
                                          DWORD flags, void *lparam )
 {
@@ -750,12 +738,6 @@ BOOL WINAPI NtUserClipCursor( const RECT *rect )
     return unix_funcs->pNtUserClipCursor( rect );
 }
 
-INT WINAPI NtUserCountClipboardFormats(void)
-{
-    if (!unix_funcs) return 0;
-    return unix_funcs->pNtUserCountClipboardFormats();
-}
-
 BOOL WINAPI NtUserCreateCaret( HWND hwnd, HBITMAP bitmap, int width, int height )
 {
     if (!unix_funcs) return 0;
@@ -851,12 +833,6 @@ BOOL WINAPI NtUserEndDeferWindowPosEx( HDWP hdwp, BOOL async )
     return unix_funcs->pNtUserEndDeferWindowPosEx( hdwp, async );
 }
 
-BOOL WINAPI NtUserEmptyClipboard(void)
-{
-    if (!unix_funcs) return FALSE;
-    return unix_funcs->pNtUserEmptyClipboard();
-}
-
 NTSTATUS WINAPI NtUserEnumDisplayDevices( UNICODE_STRING *device, DWORD index,
                                           DISPLAY_DEVICEW *info, DWORD flags )
 {
@@ -896,12 +872,6 @@ ATOM WINAPI NtUserGetClassInfoEx( HINSTANCE instance, UNICODE_STRING *name, WNDC
     return unix_funcs->pNtUserGetClassInfoEx( instance, name, wc, menu_name, ansi );
 }
 
-HANDLE WINAPI NtUserGetClipboardData( UINT format, struct get_clipboard_params *params )
-{
-    if (!unix_funcs) return 0;
-    return unix_funcs->pNtUserGetClipboardData( format, params );
-}
-
 LONG WINAPI NtUserGetDisplayConfigBufferSizes( UINT32 flags, UINT32 *num_path_info,
                                                UINT32 *num_mode_info )
 {
@@ -946,25 +916,12 @@ BOOL WINAPI NtUserMoveWindow( HWND hwnd, INT x, INT y, INT cx, INT cy, BOOL repa
     return unix_funcs->pNtUserMoveWindow( hwnd, x, y, cx, cy, repaint );
 }
 
-INT WINAPI NtUserGetPriorityClipboardFormat( UINT *list, INT count )
-{
-    if (!unix_funcs) return 0;
-    return unix_funcs->pNtUserGetPriorityClipboardFormat( list, count );
-}
-
 BOOL WINAPI NtUserGetScrollBarInfo( HWND hwnd, LONG id, SCROLLBARINFO *info )
 {
     if (!unix_funcs) return FALSE;
     return unix_funcs->pNtUserGetScrollBarInfo( hwnd, id, info );
 }
 
-BOOL WINAPI NtUserGetUpdatedClipboardFormats( UINT *formats, UINT size, UINT *out_size )
-{
-    if (!unix_funcs) return FALSE;
-    return unix_funcs->pNtUserGetUpdatedClipboardFormats( formats, size, out_size );
-}
-
-
 BOOL WINAPI NtUserGetWindowPlacement( HWND hwnd, WINDOWPLACEMENT *placement )
 {
     if (!unix_funcs) return FALSE;
@@ -977,18 +934,6 @@ HICON WINAPI NtUserInternalGetWindowIcon( HWND hwnd, UINT type )
     return unix_funcs->pNtUserInternalGetWindowIcon( hwnd, type );
 }
 
-BOOL WINAPI NtUserIsClipboardFormatAvailable( UINT format )
-{
-    if (!unix_funcs) return FALSE;
-    return unix_funcs->pNtUserIsClipboardFormatAvailable( format );
-}
-
-BOOL WINAPI NtUserOpenClipboard( HWND hwnd, ULONG unk )
-{
-    if (!unix_funcs) return FALSE;
-    return unix_funcs->pNtUserOpenClipboard( hwnd, unk );
-}
-
 ATOM WINAPI NtUserRegisterClassExWOW( const WNDCLASSEXW *wc, UNICODE_STRING *name, UNICODE_STRING *version,
                                       struct client_menu_name *client_menu_name, DWORD fnid, DWORD flags,
                                       DWORD *wow )
@@ -1028,12 +973,6 @@ HWND WINAPI NtUserSetCapture( HWND hwnd )
     return unix_funcs->pNtUserSetCapture( hwnd );
 }
 
-NTSTATUS WINAPI NtUserSetClipboardData( UINT format, HANDLE handle, struct set_clipboard_params *params )
-{
-    if (!unix_funcs) return 0;
-    return unix_funcs->pNtUserSetClipboardData( format, handle, params );
-}
-
 HCURSOR WINAPI NtUserSetCursor( HCURSOR cursor )
 {
     if (!unix_funcs) return 0;
@@ -1058,12 +997,6 @@ WORD WINAPI NtUserSetClassWord( HWND hwnd, INT offset, WORD newval )
     return unix_funcs->pNtUserSetClassWord( hwnd, offset, newval );
 }
 
-HWND WINAPI NtUserSetClipboardViewer( HWND hwnd )
-{
-    if (!unix_funcs) return 0;
-    return unix_funcs->pNtUserSetClipboardViewer( hwnd );
-}
-
 BOOL WINAPI NtUserSetCursorIconData( HCURSOR cursor, UNICODE_STRING *module, UNICODE_STRING *res_name,
                                      struct cursoricon_desc *desc )
 {
diff --git a/dlls/wow64win/syscall.h b/dlls/wow64win/syscall.h
index 8ff061ec7f8..82849ccd466 100644
--- a/dlls/wow64win/syscall.h
+++ b/dlls/wow64win/syscall.h
@@ -100,11 +100,14 @@
     SYSCALL_ENTRY( NtUserCallNoParam ) \
     SYSCALL_ENTRY( NtUserCallOneParam ) \
     SYSCALL_ENTRY( NtUserCallTwoParam ) \
+    SYSCALL_ENTRY( NtUserChangeClipboardChain ) \
     SYSCALL_ENTRY( NtUserCheckMenuItem ) \
     SYSCALL_ENTRY( NtUserChildWindowFromPointEx ) \
+    SYSCALL_ENTRY( NtUserCloseClipboard ) \
     SYSCALL_ENTRY( NtUserCloseDesktop ) \
     SYSCALL_ENTRY( NtUserCloseWindowStation ) \
     SYSCALL_ENTRY( NtUserCopyAcceleratorTable ) \
+    SYSCALL_ENTRY( NtUserCountClipboardFormats ) \
     SYSCALL_ENTRY( NtUserCreateAcceleratorTable ) \
     SYSCALL_ENTRY( NtUserCreateDesktopEx ) \
     SYSCALL_ENTRY( NtUserCreateInputContext ) \
@@ -113,6 +116,7 @@
     SYSCALL_ENTRY( NtUserDestroyAcceleratorTable ) \
     SYSCALL_ENTRY( NtUserDestroyInputContext ) \
     SYSCALL_ENTRY( NtUserDispatchMessage ) \
+    SYSCALL_ENTRY( NtUserEmptyClipboard ) \
     SYSCALL_ENTRY( NtUserEndMenu ) \
     SYSCALL_ENTRY( NtUserFindExistingCursorIcon ) \
     SYSCALL_ENTRY( NtUserFindWindowEx ) \
@@ -122,6 +126,7 @@
     SYSCALL_ENTRY( NtUserGetCaretBlinkTime ) \
     SYSCALL_ENTRY( NtUserGetCaretPos ) \
     SYSCALL_ENTRY( NtUserGetClassName ) \
+    SYSCALL_ENTRY( NtUserGetClipboardData ) \
     SYSCALL_ENTRY( NtUserGetClipboardFormatName ) \
     SYSCALL_ENTRY( NtUserGetClipboardOwner ) \
     SYSCALL_ENTRY( NtUserGetClipboardSequenceNumber ) \
@@ -147,6 +152,7 @@
     SYSCALL_ENTRY( NtUserGetMouseMovePointsEx ) \
     SYSCALL_ENTRY( NtUserGetObjectInformation ) \
     SYSCALL_ENTRY( NtUserGetOpenClipboardWindow ) \
+    SYSCALL_ENTRY( NtUserGetPriorityClipboardFormat ) \
     SYSCALL_ENTRY( NtUserGetProcessDpiAwarenessContext ) \
     SYSCALL_ENTRY( NtUserGetProcessWindowStation ) \
     SYSCALL_ENTRY( NtUserGetProp ) \
@@ -161,11 +167,13 @@
     SYSCALL_ENTRY( NtUserGetTitleBarInfo ) \
     SYSCALL_ENTRY( NtUserGetUpdateRect ) \
     SYSCALL_ENTRY( NtUserGetUpdateRgn ) \
+    SYSCALL_ENTRY( NtUserGetUpdatedClipboardFormats ) \
     SYSCALL_ENTRY( NtUserGetWindowRgnEx ) \
     SYSCALL_ENTRY( NtUserInitializeClientPfnArrays ) \
     SYSCALL_ENTRY( NtUserInternalGetWindowText ) \
     SYSCALL_ENTRY( NtUserInvalidateRect ) \
     SYSCALL_ENTRY( NtUserInvalidateRgn ) \
+    SYSCALL_ENTRY( NtUserIsClipboardFormatAvailable ) \
     SYSCALL_ENTRY( NtUserKillTimer ) \
     SYSCALL_ENTRY( NtUserLockWindowUpdate ) \
     SYSCALL_ENTRY( NtUserMapVirtualKeyEx ) \
@@ -173,6 +181,7 @@
     SYSCALL_ENTRY( NtUserMessageCall ) \
     SYSCALL_ENTRY( NtUserMsgWaitForMultipleObjectsEx ) \
     SYSCALL_ENTRY( NtUserNotifyWinEvent ) \
+    SYSCALL_ENTRY( NtUserOpenClipboard ) \
     SYSCALL_ENTRY( NtUserOpenDesktop ) \
     SYSCALL_ENTRY( NtUserOpenInputDesktop ) \
     SYSCALL_ENTRY( NtUserOpenWindowStation ) \
@@ -188,6 +197,8 @@
     SYSCALL_ENTRY( NtUserRemoveProp ) \
     SYSCALL_ENTRY( NtUserScrollWindowEx ) \
     SYSCALL_ENTRY( NtUserSendInput ) \
+    SYSCALL_ENTRY( NtUserSetClipboardData ) \
+    SYSCALL_ENTRY( NtUserSetClipboardViewer ) \
     SYSCALL_ENTRY( NtUserSetCursorPos ) \
     SYSCALL_ENTRY( NtUserSetKeyboardState ) \
     SYSCALL_ENTRY( NtUserSetMenuContextHelpId ) \
diff --git a/dlls/wow64win/user.c b/dlls/wow64win/user.c
index 68d444a7c83..564f17f720b 100644
--- a/dlls/wow64win/user.c
+++ b/dlls/wow64win/user.c
@@ -286,6 +286,14 @@ NTSTATUS WINAPI wow64_NtUserCallTwoParam( UINT *args )
     return 0;
 }
 
+NTSTATUS WINAPI wow64_NtUserChangeClipboardChain( UINT *args )
+{
+    HWND hwnd = get_handle( &args );
+    HWND next = get_handle( &args );
+
+    return NtUserChangeClipboardChain( hwnd, next );
+}
+
 NTSTATUS WINAPI wow64_NtUserCheckMenuItem( UINT *args )
 {
     HMENU handle = get_handle( &args );
@@ -305,6 +313,11 @@ NTSTATUS WINAPI wow64_NtUserChildWindowFromPointEx( UINT *args )
     return HandleToUlong( NtUserChildWindowFromPointEx( parent, x, y, flags ));
 }
 
+NTSTATUS WINAPI wow64_NtUserCloseClipboard( UINT *args )
+{
+    return NtUserCloseClipboard();
+}
+
 NTSTATUS WINAPI wow64_NtUserCloseDesktop( UINT *args )
 {
     HDESK handle = get_handle( &args );
@@ -328,6 +341,11 @@ NTSTATUS WINAPI wow64_NtUserCopyAcceleratorTable( UINT *args )
     return NtUserCopyAcceleratorTable( src, dst, count );
 }
 
+NTSTATUS WINAPI wow64_NtUserCountClipboardFormats( UINT *args )
+{
+    return NtUserCountClipboardFormats();
+}
+
 NTSTATUS WINAPI wow64_NtUserCreateAcceleratorTable( UINT *args )
 {
     ACCEL *table = get_ptr( &args );
@@ -409,6 +427,11 @@ NTSTATUS WINAPI wow64_NtUserDispatchMessage( UINT *args )
     return NtUserDispatchMessage( msg_32to64( &msg, msg32 ));
 }
 
+NTSTATUS WINAPI wow64_NtUserEmptyClipboard( UINT *args )
+{
+    return NtUserEmptyClipboard();
+}
+
 NTSTATUS WINAPI wow64_NtUserEndMenu( UINT *args )
 {
     return NtUserEndMenu();
@@ -493,6 +516,32 @@ NTSTATUS WINAPI wow64_NtUserGetClassName( UINT *args )
     return NtUserGetClassName( hwnd, real, unicode_str_32to64( &str, str32 ));
 }
 
+NTSTATUS WINAPI wow64_NtUserGetClipboardData( UINT *args )
+{
+    UINT format = get_ulong( &args );
+    struct
+    {
+        UINT32 data;
+        UINT32 size;
+        UINT32 data_size;
+        UINT   seqno;
+        BOOL   data_only;
+    } *params32 = get_ptr( &args );
+
+    struct get_clipboard_params params;
+    HANDLE ret;
+
+    params.data = UlongToPtr( params32->data );
+    params.size = params32->size;
+
+    ret = NtUserGetClipboardData( format, &params );
+
+    params32->data_size = params.data_size;
+    params32->seqno     = params.seqno;
+    params32->data_only = params.data_only;
+    return HandleToUlong( ret );
+}
+
 NTSTATUS WINAPI wow64_NtUserGetClipboardFormatName( UINT *args )
 {
     UINT format = get_ulong( &args );
@@ -740,6 +789,14 @@ NTSTATUS WINAPI wow64_NtUserGetOpenClipboardWindow( UINT *args )
     return HandleToUlong( NtUserGetOpenClipboardWindow() );
 }
 
+NTSTATUS WINAPI wow64_NtUserGetPriorityClipboardFormat( UINT *args )
+{
+    UINT *list = get_ptr( &args );
+    INT count = get_ulong( &args );
+
+    return NtUserGetPriorityClipboardFormat( list, count );
+}
+
 NTSTATUS WINAPI wow64_NtUserGetProcessDpiAwarenessContext( UINT *args )
 {
     HANDLE process = get_handle( &args );
@@ -1006,6 +1063,15 @@ NTSTATUS WINAPI wow64_NtUserGetUpdateRgn( UINT *args )
     return NtUserGetUpdateRgn( hwnd, hrgn, erase );
 }
 
+NTSTATUS WINAPI wow64_NtUserGetUpdatedClipboardFormats( UINT *args )
+{
+    UINT *formats = get_ptr( &args );
+    UINT size = get_ulong( &args );
+    UINT *out_size = get_ptr( &args );
+
+    return NtUserGetUpdatedClipboardFormats( formats, size, out_size );
+}
+
 NTSTATUS WINAPI wow64_NtUserGetWindowRgnEx( UINT *args )
 {
     HWND hwnd = get_handle( &args );
@@ -1048,6 +1114,13 @@ NTSTATUS WINAPI wow64_NtUserInvalidateRgn( UINT *args )
     return NtUserInvalidateRgn( hwnd, hrgn, erase );
 }
 
+NTSTATUS WINAPI wow64_NtUserIsClipboardFormatAvailable( UINT *args )
+{
+    UINT format = get_ulong( &args );
+
+    return NtUserIsClipboardFormatAvailable( format );
+}
+
 NTSTATUS WINAPI wow64_NtUserKillTimer( UINT *args )
 {
     HWND hwnd = get_handle( &args );
@@ -1128,6 +1201,14 @@ NTSTATUS WINAPI wow64_NtUserNotifyWinEvent( UINT *args )
     return 0;
 }
 
+NTSTATUS WINAPI wow64_NtUserOpenClipboard( UINT *args )
+{
+    HWND hwnd = get_handle( &args );
+    ULONG unk = get_ulong( &args );
+
+    return NtUserOpenClipboard( hwnd, unk );
+}
+
 NTSTATUS WINAPI wow64_NtUserOpenDesktop( UINT *args )
 {
     OBJECT_ATTRIBUTES32 *attr32 = get_ptr( &args );
@@ -1339,6 +1420,34 @@ NTSTATUS WINAPI wow64_NtUserSendInput( UINT *args )
     return NtUserSendInput( count, inputs, sizeof(*inputs) );
 }
 
+NTSTATUS WINAPI wow64_NtUserSetClipboardData( UINT *args )
+{
+    UINT format = get_ulong( &args );
+    HANDLE handle = get_handle( &args );
+    struct
+    {
+        UINT32 data;
+        UINT32 size;
+        BOOL   cache_only;
+        UINT   seqno;
+    } *params32 = get_ptr( &args );
+
+    struct set_clipboard_params params;
+    params.data       = UlongToPtr( params32->data );
+    params.size       = params32->size;
+    params.cache_only = params32->cache_only;
+    params.seqno      = params32->seqno;
+
+    return NtUserSetClipboardData( format, handle, &params );
+}
+
+NTSTATUS WINAPI wow64_NtUserSetClipboardViewer( UINT *args )
+{
+    HWND hwnd = get_handle( &args );
+
+    return HandleToUlong( NtUserSetClipboardViewer( hwnd ));
+}
+
 NTSTATUS WINAPI wow64_NtUserSetCursorPos( UINT *args )
 {
     INT x = get_ulong( &args );
-- 
GitLab