Jacek Caban : ntoskrnl.exe: Use ObGetObjectType in kernel_object_from_handle.

Alexandre Julliard julliard at winehq.org
Wed May 1 16:37:06 CDT 2019


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

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Wed May  1 17:54:05 2019 +0200

ntoskrnl.exe: Use ObGetObjectType in kernel_object_from_handle.

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

---

 dlls/ntoskrnl.exe/ntoskrnl.c | 27 +++++++++++----------------
 1 file changed, 11 insertions(+), 16 deletions(-)

diff --git a/dlls/ntoskrnl.exe/ntoskrnl.c b/dlls/ntoskrnl.exe/ntoskrnl.c
index 0bb83cb..1a2a6d1 100644
--- a/dlls/ntoskrnl.exe/ntoskrnl.c
+++ b/dlls/ntoskrnl.exe/ntoskrnl.c
@@ -366,6 +366,15 @@ static void ObReferenceObject( void *obj )
     LeaveCriticalSection( &obref_cs );
 }
 
+/***********************************************************************
+ *           ObGetObjectType (NTOSKRNL.EXE.@)
+ */
+POBJECT_TYPE WINAPI ObGetObjectType( void *object )
+{
+    struct object_header *header = (struct object_header *)object - 1;
+    return header->type;
+}
+
 static const POBJECT_TYPE *known_types[] =
 {
     &ExEventObjectType,
@@ -389,7 +398,6 @@ static CRITICAL_SECTION handle_map_cs = { &handle_map_critsect_debug, -1, 0, 0,
 
 NTSTATUS kernel_object_from_handle( HANDLE handle, POBJECT_TYPE type, void **ret )
 {
-    struct object_header *header;
     void *obj;
     NTSTATUS status;
 
@@ -409,12 +417,7 @@ NTSTATUS kernel_object_from_handle( HANDLE handle, POBJECT_TYPE type, void **ret
         return status;
     }
 
-    if (obj)
-    {
-        header = (struct object_header *)obj - 1;
-        if (type && header->type != type) status = STATUS_OBJECT_TYPE_MISMATCH;
-    }
-    else
+    if (!obj)
     {
         char buf[256];
         OBJECT_TYPE_INFORMATION *type_info = (OBJECT_TYPE_INFORMATION *)buf;
@@ -459,6 +462,7 @@ NTSTATUS kernel_object_from_handle( HANDLE handle, POBJECT_TYPE type, void **ret
         }
         if (!obj) status = STATUS_NO_MEMORY;
     }
+    else if (type && ObGetObjectType( obj ) != type) status = STATUS_OBJECT_TYPE_MISMATCH;
 
     LeaveCriticalSection( &handle_map_cs );
     if (!status) *ret = obj;
@@ -489,15 +493,6 @@ NTSTATUS WINAPI ObReferenceObjectByHandle( HANDLE handle, ACCESS_MASK access,
 }
 
 /***********************************************************************
- *           ObGetObjectType (NTOSKRNL.EXE.@)
- */
-POBJECT_TYPE WINAPI ObGetObjectType( void *object )
-{
-    struct object_header *header = (struct object_header *)object - 1;
-    return header->type;
-}
-
-/***********************************************************************
  *           ObOpenObjectByPointer    (NTOSKRNL.EXE.@)
  */
 NTSTATUS WINAPI ObOpenObjectByPointer( void *obj, ULONG attr, ACCESS_STATE *access_state,




More information about the wine-cvs mailing list