user32: Return result through NtCallbackReturn for the load image callback.
This commit is contained in:
parent
a60747c755
commit
33793446c4
3 changed files with 17 additions and 4 deletions
|
@ -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 )
|
||||
|
|
|
@ -740,5 +740,6 @@ HANDLE WINAPI LoadImageW( HINSTANCE hinst, const WCHAR *name, UINT type,
|
|||
return 0;
|
||||
}
|
||||
ret = KeUserModeCallback( NtUserLoadImage, ¶ms, sizeof(params), &ret_ptr, &ret_len );
|
||||
return UlongToHandle( ret );
|
||||
if (!ret && ret_len == sizeof(HANDLE)) return *(HANDLE *)ret_ptr;
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -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, ¶ms32, sizeof(params32) );
|
||||
status = Wow64KiUserCallbackDispatcher( NtUserLoadImage, ¶ms32, 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 )
|
||||
|
|
Loading…
Add table
Reference in a new issue