Derek Lesho : ntoskrnl.exe: Implement ObGetObjectType.
Module: wine Branch: master Commit: da060af24227f0fc295e2057de67cdb073748530 URL: https://source.winehq.org/git/wine.git/?a=commit;h=da060af24227f0fc295e2057d... Author: Derek Lesho <dereklesho52(a)gmail.com> Date: Thu Mar 21 18:51:44 2019 +0100 ntoskrnl.exe: Implement ObGetObjectType. Signed-off-by: Derek Lesho <dereklesho52(a)Gmail.com> Signed-off-by: Jacek Caban <jacek(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)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);
participants (1)
-
Alexandre Julliard