Module: wine Branch: master Commit: 73b99d296c5c981e0afe614b72e339b41eb250d2 URL: https://source.winehq.org/git/wine.git/?a=commit;h=73b99d296c5c981e0afe614b7...
Author: Jacek Caban jacek@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@codeweavers.com Signed-off-by: Alexandre Julliard julliard@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,