Module: wine Branch: master Commit: d50112b4b6e82782d3924a8dbd443f82f64e510d URL: https://gitlab.winehq.org/wine/wine/-/commit/d50112b4b6e82782d3924a8dbd443f8...
Author: Jacek Caban jacek@codeweavers.com Date: Thu Jul 21 18:49:53 2022 +0200
win32u: Use syscall interface for NtUserCreateWindowEx and NtUserDestroyWindow.
---
dlls/win32u/gdiobj.c | 2 -- dlls/win32u/syscall.c | 2 ++ dlls/win32u/win32u.spec | 4 ++-- dlls/win32u/win32u_private.h | 6 ------ dlls/win32u/wrappers.c | 18 ------------------ dlls/wow64win/syscall.h | 2 ++ dlls/wow64win/user.c | 39 +++++++++++++++++++++++++++++++++++++++ 7 files changed, 45 insertions(+), 28 deletions(-)
diff --git a/dlls/win32u/gdiobj.c b/dlls/win32u/gdiobj.c index d4c9a1a3861..b3db2b11531 100644 --- a/dlls/win32u/gdiobj.c +++ b/dlls/win32u/gdiobj.c @@ -1136,10 +1136,8 @@ static struct unix_funcs unix_funcs = NtGdiUnrealizeObject, NtGdiUpdateColors, NtGdiWidenPath, - NtUserCreateWindowEx, NtUserDeferWindowPosAndBand, NtUserDestroyMenu, - NtUserDestroyWindow, NtUserDrawCaptionTemp, NtUserDrawMenuBarTemp, NtUserEnableMenuItem, diff --git a/dlls/win32u/syscall.c b/dlls/win32u/syscall.c index d04e4dc2cf3..02a845f1a48 100644 --- a/dlls/win32u/syscall.c +++ b/dlls/win32u/syscall.c @@ -127,11 +127,13 @@ static void * const syscalls[] = NtUserCreateCaret, NtUserCreateDesktopEx, NtUserCreateInputContext, + NtUserCreateWindowEx, NtUserCreateWindowStation, NtUserDeleteMenu, NtUserDestroyAcceleratorTable, NtUserDestroyCursor, NtUserDestroyInputContext, + NtUserDestroyWindow, NtUserDisableThreadIme, NtUserDispatchMessage, NtUserDragDetect, diff --git a/dlls/win32u/win32u.spec b/dlls/win32u/win32u.spec index 555aaecdfb5..9d9bec9dfb8 100644 --- a/dlls/win32u/win32u.spec +++ b/dlls/win32u/win32u.spec @@ -814,7 +814,7 @@ @ stdcall -syscall NtUserCreateInputContext(ptr) @ stub NtUserCreateLocalMemHandle @ stub NtUserCreatePalmRejectionDelayZone -@ stdcall NtUserCreateWindowEx(long ptr ptr ptr long long long long long long long long ptr long long long long) +@ stdcall -syscall NtUserCreateWindowEx(long ptr ptr ptr long long long long long long long long ptr long long long long) @ stub NtUserCreateWindowGroup @ stdcall -syscall NtUserCreateWindowStation(ptr long long long long long long) @ stub NtUserCtxDisplayIOCtl @@ -834,7 +834,7 @@ @ stdcall -syscall NtUserDestroyInputContext(long) @ stdcall NtUserDestroyMenu(long) @ stub NtUserDestroyPalmRejectionDelayZone -@ stdcall NtUserDestroyWindow(long) +@ stdcall -syscall NtUserDestroyWindow(long) @ stub NtUserDisableImmersiveOwner @ stub NtUserDisableProcessWindowFiltering @ stdcall -syscall NtUserDisableThreadIme(long) diff --git a/dlls/win32u/win32u_private.h b/dlls/win32u/win32u_private.h index c7aac2edd75..392c167bf95 100644 --- a/dlls/win32u/win32u_private.h +++ b/dlls/win32u/win32u_private.h @@ -186,16 +186,10 @@ struct unix_funcs BOOL (WINAPI *pNtGdiUnrealizeObject)( HGDIOBJ obj ); BOOL (WINAPI *pNtGdiUpdateColors)( HDC hdc ); BOOL (WINAPI *pNtGdiWidenPath)( HDC hdc ); - HWND (WINAPI *pNtUserCreateWindowEx)( DWORD ex_style, UNICODE_STRING *class_name, - UNICODE_STRING *version, UNICODE_STRING *window_name, - DWORD style, INT x, INT y, INT width, INT height, - HWND parent, HMENU menu, HINSTANCE instance, void *params, - DWORD flags, CBT_CREATEWNDW *cbtc, DWORD unk, BOOL ansi ); HDWP (WINAPI *pNtUserDeferWindowPosAndBand)( HDWP hdwp, HWND hwnd, HWND after, INT x, INT y, INT cx, INT cy, UINT flags, UINT unk1, UINT unk2 ); BOOL (WINAPI *pNtUserDestroyMenu)( HMENU handle ); - BOOL (WINAPI *pNtUserDestroyWindow)( HWND hwnd ); BOOL (WINAPI *pNtUserDrawCaptionTemp)( HWND hwnd, HDC hdc, const RECT *rect, HFONT font, HICON icon, const WCHAR *str, UINT flags ); DWORD (WINAPI *pNtUserDrawMenuBarTemp)( HWND hwnd, HDC hdc, RECT *rect, HMENU handle, HFONT font ); diff --git a/dlls/win32u/wrappers.c b/dlls/win32u/wrappers.c index f4847d06480..a3e617fe75f 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 ); }
-HWND WINAPI NtUserCreateWindowEx( DWORD ex_style, UNICODE_STRING *class_name, - UNICODE_STRING *version, UNICODE_STRING *window_name, - DWORD style, INT x, INT y, INT width, INT height, - HWND parent, HMENU menu, HINSTANCE instance, void *params, - DWORD flags, CBT_CREATEWNDW *cbtc, DWORD unk, BOOL ansi ) -{ - if (!unix_funcs) return 0; - return unix_funcs->pNtUserCreateWindowEx( ex_style, class_name, version, window_name, - style, x, y, width, height, parent, menu, - instance, params, flags, cbtc, unk, ansi ); -} - HDWP WINAPI NtUserDeferWindowPosAndBand( HDWP hdwp, HWND hwnd, HWND after, INT x, INT y, INT cx, INT cy, UINT flags, UINT unk1, UINT unk2 ) @@ -752,12 +740,6 @@ BOOL WINAPI NtUserDestroyMenu( HMENU handle ) return unix_funcs->pNtUserDestroyMenu( handle ); }
-BOOL WINAPI NtUserDestroyWindow( HWND hwnd ) -{ - if (!unix_funcs) return FALSE; - return unix_funcs->pNtUserDestroyWindow( hwnd ); -} - BOOL WINAPI NtUserDrawCaptionTemp( HWND hwnd, HDC hdc, const RECT *rect, HFONT font, HICON icon, const WCHAR *str, UINT flags ) { diff --git a/dlls/wow64win/syscall.h b/dlls/wow64win/syscall.h index 95ceeb9e16d..7125838dd35 100644 --- a/dlls/wow64win/syscall.h +++ b/dlls/wow64win/syscall.h @@ -114,11 +114,13 @@ SYSCALL_ENTRY( NtUserCreateCaret ) \ SYSCALL_ENTRY( NtUserCreateDesktopEx ) \ SYSCALL_ENTRY( NtUserCreateInputContext ) \ + SYSCALL_ENTRY( NtUserCreateWindowEx ) \ SYSCALL_ENTRY( NtUserCreateWindowStation ) \ SYSCALL_ENTRY( NtUserDeleteMenu ) \ SYSCALL_ENTRY( NtUserDestroyAcceleratorTable ) \ SYSCALL_ENTRY( NtUserDestroyCursor ) \ SYSCALL_ENTRY( NtUserDestroyInputContext ) \ + SYSCALL_ENTRY( NtUserDestroyWindow ) \ SYSCALL_ENTRY( NtUserDisableThreadIme ) \ SYSCALL_ENTRY( NtUserDispatchMessage ) \ SYSCALL_ENTRY( NtUserDragDetect ) \ diff --git a/dlls/wow64win/user.c b/dlls/wow64win/user.c index a3e880c46ed..20648a6620f 100644 --- a/dlls/wow64win/user.c +++ b/dlls/wow64win/user.c @@ -411,6 +411,38 @@ NTSTATUS WINAPI wow64_NtUserCreateInputContext( UINT *args ) return HandleToUlong( NtUserCreateInputContext( client_ptr )); }
+NTSTATUS WINAPI wow64_NtUserCreateWindowEx( UINT *args ) +{ + DWORD ex_style = get_ulong( &args ); + UNICODE_STRING32 *class_name32 = get_ptr( &args ); + UNICODE_STRING32 *version32 = get_ptr( &args ); + UNICODE_STRING32 *window_name32 = get_ptr( &args ); + DWORD style = get_ulong( &args ); + int x = get_ulong( &args ); + int y = get_ulong( &args ); + int width = get_ulong( &args ); + int height = get_ulong( &args ); + HWND parent = get_handle( &args ); + HMENU menu = get_handle( &args ); + HINSTANCE instance = get_handle( &args ); + void *params = get_ptr( &args ); + DWORD flags = get_ulong( &args ); + void *cbtc = get_ptr( &args ); + DWORD unk = get_ulong( &args ); + BOOL ansi = get_ulong( &args ); + + UNICODE_STRING class_name, version, window_name; + HWND ret; + + ret = NtUserCreateWindowEx( ex_style, + unicode_str_32to64( &class_name, class_name32), + unicode_str_32to64( &version, version32 ), + unicode_str_32to64( &window_name, window_name32 ), + style, x, y, width, height, parent, menu, + instance, params, flags, cbtc, unk, ansi ); + return HandleToUlong( ret ); +} + NTSTATUS WINAPI wow64_NtUserCreateWindowStation( UINT *args ) { OBJECT_ATTRIBUTES32 *attr32 = get_ptr( &args ); @@ -458,6 +490,13 @@ NTSTATUS WINAPI wow64_NtUserDestroyInputContext( UINT *args ) return NtUserDestroyInputContext( handle ); }
+NTSTATUS WINAPI wow64_NtUserDestroyWindow( UINT *args ) +{ + HWND hwnd = get_handle( &args ); + + return NtUserDestroyWindow( hwnd ); +} + NTSTATUS WINAPI wow64_NtUserDisableThreadIme( UINT *args ) { DWORD thread_id = get_ulong( &args );