user32: Return result through NtCallbackReturn for the draw text callback.
This commit is contained in:
parent
ee106102c5
commit
a9e42169ca
4 changed files with 22 additions and 14 deletions
|
@ -125,13 +125,15 @@ static NTSTATUS WINAPI User32DrawScrollBar( const struct draw_scroll_bar_params
|
|||
return 0;
|
||||
}
|
||||
|
||||
static NTSTATUS WINAPI User32DrawText( struct draw_text_params *params, ULONG size )
|
||||
static NTSTATUS WINAPI User32DrawText( void *args, ULONG size )
|
||||
{
|
||||
int ret;
|
||||
const struct draw_text_params *params = args;
|
||||
struct draw_text_result result;
|
||||
|
||||
size -= FIELD_OFFSET( struct draw_text_params, str );
|
||||
ret = DrawTextW( params->hdc, params->str, size / sizeof(WCHAR), ¶ms->rect, params->flags );
|
||||
return NtCallbackReturn( ¶ms->rect, sizeof(params->rect), ret );
|
||||
result.rect = params->rect;
|
||||
result.height = DrawTextW( params->hdc, params->str, size / sizeof(WCHAR), &result.rect, params->flags );
|
||||
return NtCallbackReturn( &result, sizeof(result), STATUS_SUCCESS );
|
||||
}
|
||||
|
||||
static NTSTATUS WINAPI User32ImmProcessKey( const struct imm_process_key_params *params, ULONG size )
|
||||
|
|
|
@ -7076,9 +7076,10 @@ BOOL WINAPI NtGdiGetCharWidthInfo( HDC hdc, struct char_width_info *info )
|
|||
INT WINAPI DrawTextW( HDC hdc, const WCHAR *str, INT count, RECT *rect, UINT flags )
|
||||
{
|
||||
struct draw_text_params *params;
|
||||
struct draw_text_result *result;
|
||||
ULONG ret_len, size;
|
||||
void *ret_ptr;
|
||||
int ret;
|
||||
NTSTATUS status;
|
||||
int ret = 0;
|
||||
|
||||
if (count == -1) count = wcslen( str );
|
||||
size = FIELD_OFFSET( struct draw_text_params, str[count] );
|
||||
|
@ -7087,8 +7088,13 @@ INT WINAPI DrawTextW( HDC hdc, const WCHAR *str, INT count, RECT *rect, UINT fla
|
|||
params->rect = *rect;
|
||||
params->flags = flags;
|
||||
if (count) memcpy( params->str, str, count * sizeof(WCHAR) );
|
||||
ret = KeUserModeCallback( NtUserDrawText, params, size, &ret_ptr, &ret_len );
|
||||
if (ret_len == sizeof(*rect)) *rect = *(const RECT *)ret_ptr;
|
||||
|
||||
status = KeUserModeCallback( NtUserDrawText, params, size, (void **)&result, &ret_len );
|
||||
if (!status && ret_len == sizeof(*result))
|
||||
{
|
||||
ret = result->height;
|
||||
*rect = result->rect;
|
||||
}
|
||||
free( params );
|
||||
return ret;
|
||||
}
|
||||
|
|
|
@ -1266,18 +1266,13 @@ static NTSTATUS WINAPI wow64_NtUserDrawText( void *arg, ULONG size )
|
|||
struct draw_text_params *params = arg;
|
||||
struct draw_text_params32 *params32;
|
||||
ULONG offset = offsetof( struct draw_text_params, str ) - offsetof( struct draw_text_params32, str );
|
||||
ULONG ret_len;
|
||||
void *ret_ptr;
|
||||
NTSTATUS ret;
|
||||
|
||||
params32 = (struct draw_text_params32 *)((char *)params + offset);
|
||||
params32->flags = params->flags;
|
||||
params32->rect = params->rect;
|
||||
params32->count = params->count;
|
||||
params32->hdc = HandleToUlong( params->hdc );
|
||||
|
||||
ret = Wow64KiUserCallbackDispatcher( NtUserDrawText, params32, size - offset, &ret_ptr, &ret_len );
|
||||
return NtCallbackReturn( ret_ptr, ret_len, ret );
|
||||
return dispatch_callback( NtUserDrawText, params32, size - offset );
|
||||
}
|
||||
|
||||
static NTSTATUS WINAPI wow64_NtUserFreeCachedClipboardData( void *arg, ULONG size )
|
||||
|
|
|
@ -200,6 +200,11 @@ struct draw_text_params
|
|||
UINT flags;
|
||||
WCHAR str[1];
|
||||
};
|
||||
struct draw_text_result
|
||||
{
|
||||
int height;
|
||||
RECT rect;
|
||||
};
|
||||
|
||||
/* NtUserFreeCachedClipboardData params */
|
||||
struct free_cached_data_params
|
||||
|
|
Loading…
Add table
Reference in a new issue