Module: wine Branch: master Commit: ee106102c571c146e587ef0adfb2e63017fad949 URL: https://gitlab.winehq.org/wine/wine/-/commit/ee106102c571c146e587ef0adfb2e63...
Author: Alexandre Julliard julliard@winehq.org Date: Thu Jan 18 15:02:04 2024 +0100
user32: Return result through NtCallbackReturn for the load sys menu callback.
---
dlls/user32/user_main.c | 6 ++++-- dlls/win32u/menu.c | 8 ++++---- dlls/wow64win/user.c | 12 +++++++++++- 3 files changed, 19 insertions(+), 7 deletions(-)
diff --git a/dlls/user32/user_main.c b/dlls/user32/user_main.c index 79809835b91..045f95b3619 100644 --- a/dlls/user32/user_main.c +++ b/dlls/user32/user_main.c @@ -154,10 +154,12 @@ static NTSTATUS WINAPI User32LoadImage( void *args, ULONG size ) return NtCallbackReturn( &ret, sizeof(ret), STATUS_SUCCESS ); }
-static NTSTATUS WINAPI User32LoadSysMenu( const struct load_sys_menu_params *params, ULONG size ) +static NTSTATUS WINAPI User32LoadSysMenu( void *args, ULONG size ) { + const struct load_sys_menu_params *params = args; HMENU ret = LoadMenuW( user32_module, params->mdi ? L"SYSMENUMDI" : L"SYSMENU" ); - return HandleToUlong( ret ); + if (!ret) return STATUS_NO_MEMORY; + return NtCallbackReturn( &ret, sizeof(ret), STATUS_SUCCESS ); }
static NTSTATUS WINAPI User32FreeCachedClipboardData( const struct free_cached_data_params *params, diff --git a/dlls/win32u/menu.c b/dlls/win32u/menu.c index a6b7ec38003..6a8e8615945 100644 --- a/dlls/win32u/menu.c +++ b/dlls/win32u/menu.c @@ -1436,12 +1436,12 @@ static HMENU copy_sys_popup( BOOL mdi ) struct menu *menu; void *ret_ptr; ULONG ret_len; - HMENU handle; + NTSTATUS status; + HMENU handle = 0;
params.mdi = mdi; - handle = UlongToHandle( KeUserModeCallback( NtUserLoadSysMenu, ¶ms, sizeof(params), - &ret_ptr, &ret_len )); - + status = KeUserModeCallback( NtUserLoadSysMenu, ¶ms, sizeof(params), &ret_ptr, &ret_len ); + if (!status && ret_len == sizeof(HMENU)) handle = *(HMENU *)ret_ptr; if (!handle || !(menu = grab_menu_ptr( handle ))) { ERR("Unable to load default system menu\n" ); diff --git a/dlls/wow64win/user.c b/dlls/wow64win/user.c index d010b826ba1..939155b7d41 100644 --- a/dlls/wow64win/user.c +++ b/dlls/wow64win/user.c @@ -1374,7 +1374,17 @@ static NTSTATUS WINAPI wow64_NtUserLoadImage( void *arg, ULONG size )
static NTSTATUS WINAPI wow64_NtUserLoadSysMenu( void *arg, ULONG size ) { - return dispatch_callback( NtUserLoadSysMenu, arg, size ); + void *ret_ptr; + ULONG ret_len; + NTSTATUS status; + + status = Wow64KiUserCallbackDispatcher( NtUserLoadSysMenu, arg, size, &ret_ptr, &ret_len ); + if (!status && ret_len == sizeof(ULONG)) + { + HMENU menu = ULongToHandle( *(ULONG *)ret_ptr ); + return NtCallbackReturn( &menu, sizeof(menu), status ); + } + return status; }
static NTSTATUS WINAPI wow64_NtUserPostDDEMessage( void *arg, ULONG size )