1
0
Fork 0
mirror of synced 2025-03-07 03:53:26 +01:00

user32: Return result through NtCallbackReturn for the load image callback.

This commit is contained in:
Alexandre Julliard 2024-01-18 15:00:24 +01:00
parent a60747c755
commit 33793446c4
3 changed files with 17 additions and 4 deletions

View file

@ -145,11 +145,13 @@ static NTSTATUS WINAPI User32ImmTranslateMessage( const struct imm_translate_mes
return ImmTranslateMessage( params->hwnd, params->msg, params->wparam, params->key_data );
}
static NTSTATUS WINAPI User32LoadImage( const struct load_image_params *params, ULONG size )
static NTSTATUS WINAPI User32LoadImage( void *args, ULONG size )
{
const struct load_image_params *params = args;
HANDLE ret = LoadImageW( params->hinst, params->name, params->type,
params->dx, params->dy, params->flags );
return HandleToUlong( ret );
if (!ret) return STATUS_NO_MEMORY;
return NtCallbackReturn( &ret, sizeof(ret), STATUS_SUCCESS );
}
static NTSTATUS WINAPI User32LoadSysMenu( const struct load_sys_menu_params *params, ULONG size )

View file

@ -740,5 +740,6 @@ HANDLE WINAPI LoadImageW( HINSTANCE hinst, const WCHAR *name, UINT type,
return 0;
}
ret = KeUserModeCallback( NtUserLoadImage, &params, sizeof(params), &ret_ptr, &ret_len );
return UlongToHandle( ret );
if (!ret && ret_len == sizeof(HANDLE)) return *(HANDLE *)ret_ptr;
return 0;
}

View file

@ -1343,6 +1343,9 @@ static NTSTATUS WINAPI wow64_NtUserLoadDriver( void *arg, ULONG size )
static NTSTATUS WINAPI wow64_NtUserLoadImage( void *arg, ULONG size )
{
struct load_image_params *params = arg;
void *ret_ptr;
ULONG ret_len;
NTSTATUS status;
struct
{
ULONG hinst;
@ -1359,7 +1362,14 @@ static NTSTATUS WINAPI wow64_NtUserLoadImage( void *arg, ULONG size )
params32.dx = params->dx;
params32.dy = params->dy;
params32.flags = params->flags;
return dispatch_callback( NtUserLoadImage, &params32, sizeof(params32) );
status = Wow64KiUserCallbackDispatcher( NtUserLoadImage, &params32, sizeof(params32),
&ret_ptr, &ret_len );
if (!status && ret_len == sizeof(ULONG))
{
HANDLE handle = ULongToHandle( *(ULONG *)ret_ptr );
return NtCallbackReturn( &handle, sizeof(handle), status );
}
return status;
}
static NTSTATUS WINAPI wow64_NtUserLoadSysMenu( void *arg, ULONG size )