Jacek Caban : gdi32: Introduce NtGdiExtGetObjectW.

Alexandre Julliard julliard at winehq.org
Mon Jul 5 16:24:19 CDT 2021


Module: wine
Branch: master
Commit: 14a39fcfe785cf2a35204912bc399cc309af7cd1
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=14a39fcfe785cf2a35204912bc399cc309af7cd1

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Mon Jul  5 13:39:05 2021 +0200

gdi32: Introduce NtGdiExtGetObjectW.

Signed-off-by: Jacek Caban <jacek at codeweavers.com>
Signed-off-by: Huw Davies <huw at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 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;
+}




More information about the wine-cvs mailing list