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