Module: wine Branch: master Commit: da060af24227f0fc295e2057de67cdb073748530 URL: https://source.winehq.org/git/wine.git/?a=commit;h=da060af24227f0fc295e2057d...
Author: Derek Lesho dereklesho52@gmail.com Date: Thu Mar 21 18:51:44 2019 +0100
ntoskrnl.exe: Implement ObGetObjectType.
Signed-off-by: Derek Lesho dereklesho52@Gmail.com Signed-off-by: Jacek Caban jacek@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/ntoskrnl.exe/ntoskrnl.c | 19 +++++++++---------- dlls/ntoskrnl.exe/tests/driver.c | 12 ++++++++++++ 2 files changed, 21 insertions(+), 10 deletions(-)
diff --git a/dlls/ntoskrnl.exe/ntoskrnl.c b/dlls/ntoskrnl.exe/ntoskrnl.c index 2e78e45..27c7d00 100644 --- a/dlls/ntoskrnl.exe/ntoskrnl.c +++ b/dlls/ntoskrnl.exe/ntoskrnl.c @@ -397,6 +397,15 @@ NTSTATUS WINAPI ObReferenceObjectByHandle( HANDLE handle, ACCESS_MASK access, return status; }
+/*********************************************************************** + * ObGetObjectType (NTOSKRNL.EXE.@) + */ +POBJECT_TYPE WINAPI ObGetObjectType( void *object ) +{ + struct object_header *header = (struct object_header *)object - 1; + return header->type; +} +
static void *create_file_object( HANDLE handle );
@@ -2793,16 +2802,6 @@ USHORT WINAPI ObGetFilterVersion(void) }
/*********************************************************************** - * ObGetObjectType (NTOSKRNL.EXE.@) - */ -POBJECT_TYPE WINAPI ObGetObjectType(void *object) -{ - FIXME("stub: %p\n", object); - - return NULL; -} - -/*********************************************************************** * IoGetAttachedDeviceReference (NTOSKRNL.EXE.@) */ DEVICE_OBJECT* WINAPI IoGetAttachedDeviceReference( DEVICE_OBJECT *device ) diff --git a/dlls/ntoskrnl.exe/tests/driver.c b/dlls/ntoskrnl.exe/tests/driver.c index ae15df3..64abca4 100644 --- a/dlls/ntoskrnl.exe/tests/driver.c +++ b/dlls/ntoskrnl.exe/tests/driver.c @@ -662,10 +662,12 @@ static void WINAPI thread_proc(void *arg)
static void test_ob_reference(const WCHAR *test_path) { + POBJECT_TYPE (WINAPI *pObGetObjectType)(void*); OBJECT_ATTRIBUTES attr = { sizeof(attr) }; HANDLE event_handle, file_handle, file_handle2, thread_handle; FILE_OBJECT *file; void *obj1, *obj2; + POBJECT_TYPE obj1_type; UNICODE_STRING pathU; IO_STATUS_BLOCK io; WCHAR *tmp_path; @@ -674,6 +676,10 @@ static void test_ob_reference(const WCHAR *test_path)
static const WCHAR tmpW[] = {'.','t','m','p',0};
+ pObGetObjectType = get_proc_address("ObGetObjectType"); + if (!pObGetObjectType) + win_skip("ObGetObjectType not found\n"); + InitializeObjectAttributes(&attr, NULL, OBJ_KERNEL_HANDLE, NULL, NULL); status = ZwCreateEvent(&event_handle, SYNCHRONIZE, &attr, NotificationEvent, TRUE); ok(!status, "ZwCreateEvent failed: %#x\n", status); @@ -708,6 +714,12 @@ static void test_ob_reference(const WCHAR *test_path) status = ObReferenceObjectByHandle(event_handle, SYNCHRONIZE, NULL, KernelMode, &obj1, NULL); ok(!status, "ObReferenceObjectByHandle failed: %#x\n", status);
+ if (pObGetObjectType) + { + obj1_type = pObGetObjectType(obj1); + ok(obj1_type == *pExEventObjectType, "ObGetObjectType returned %p\n", obj1_type); + } + if (sizeof(void *) != 4) /* avoid dealing with fastcall */ { ObfReferenceObject(obj1);