From 14a39fcfe785cf2a35204912bc399cc309af7cd1 Mon Sep 17 00:00:00 2001 From: Jacek Caban Date: Mon, 5 Jul 2021 13:39:05 +0200 Subject: [PATCH] gdi32: Introduce NtGdiExtGetObjectW. Signed-off-by: Jacek Caban Signed-off-by: Huw Davies Signed-off-by: Alexandre Julliard --- dlls/gdi32/gdiobj.c | 10 ++++------ dlls/gdi32/objects.c | 29 +++++++++++++++++++++++++++++ 2 files changed, 33 insertions(+), 6 deletions(-) diff --git a/dlls/gdi32/gdiobj.c b/dlls/gdi32/gdiobj.c index 2f795a3f12f..67c2ddc19e6 100644 --- a/dlls/gdi32/gdiobj.c +++ b/dlls/gdi32/gdiobj.c @@ -1060,9 +1060,9 @@ INT WINAPI GetObjectA( HGDIOBJ handle, INT count, LPVOID buffer ) } /*********************************************************************** - * GetObjectW (GDI32.@) + * NtGdiExtGetObjectW (win32u.@) */ -INT WINAPI GetObjectW( HGDIOBJ handle, INT count, LPVOID buffer ) +INT WINAPI NtGdiExtGetObjectW( HGDIOBJ handle, INT count, void *buffer ) { GDI_HANDLE_ENTRY *entry; const struct gdi_obj_funcs *funcs = NULL; @@ -1078,11 +1078,9 @@ INT WINAPI GetObjectW( HGDIOBJ handle, INT count, LPVOID buffer ) } LeaveCriticalSection( &gdi_section ); - if (funcs) + if (funcs && funcs->pGetObjectW) { - if (!funcs->pGetObjectW) - SetLastError( ERROR_INVALID_HANDLE ); - else if (buffer && ((ULONG_PTR)buffer >> 16) == 0) /* catch apps getting argument order wrong */ + if (buffer && ((ULONG_PTR)buffer >> 16) == 0) /* catch apps getting argument order wrong */ SetLastError( ERROR_NOACCESS ); else result = funcs->pGetObjectW( handle, count, buffer ); diff --git a/dlls/gdi32/objects.c b/dlls/gdi32/objects.c index 854f4783f5b..af1e2a19f06 100644 --- a/dlls/gdi32/objects.c +++ b/dlls/gdi32/objects.c @@ -111,3 +111,32 @@ HGDIOBJ WINAPI SelectObject( HDC hdc, HGDIOBJ obj ) if (!ret) SetLastError( ERROR_INVALID_HANDLE ); return ret; } + +/*********************************************************************** + * GetObjectW (GDI32.@) + */ +INT WINAPI GetObjectW( HGDIOBJ handle, INT count, void *buffer ) +{ + int result; + + TRACE( "%p %d %p\n", handle, count, buffer ); + + result = NtGdiExtGetObjectW( handle, count, buffer ); + if (!result && count) + { + switch(get_object_type( handle )) + { + case 0: + case OBJ_BITMAP: + case OBJ_BRUSH: + case OBJ_FONT: + case OBJ_PAL: + case OBJ_PEN: + case OBJ_EXTPEN: + break; + default: + SetLastError( ERROR_INVALID_HANDLE ); + } + } + return result; +}