Commit 332035fb authored by Jacek Caban's avatar Jacek Caban Committed by Alexandre Julliard

ntoskrnl.exe: Use ObOpenObjectByPointer to get handle for kernel object.

parent bfe3dfb5
...@@ -366,20 +366,6 @@ static void ObReferenceObject( void *obj ) ...@@ -366,20 +366,6 @@ static void ObReferenceObject( void *obj )
LeaveCriticalSection( &obref_cs ); LeaveCriticalSection( &obref_cs );
} }
HANDLE kernel_object_handle( void *obj, unsigned int access )
{
HANDLE handle = NULL;
SERVER_START_REQ( get_kernel_object_handle )
{
req->manager = wine_server_obj_handle( get_device_manager() );
req->user_ptr = wine_server_client_ptr( obj );
req->access = access;
if (!wine_server_call( req )) handle = wine_server_ptr_handle( reply->handle );
}
SERVER_END_REQ;
return handle;
}
static const POBJECT_TYPE *known_types[] = static const POBJECT_TYPE *known_types[] =
{ {
&ExEventObjectType, &ExEventObjectType,
...@@ -1870,9 +1856,12 @@ NTSTATUS WINAPI IoGetDeviceProperty( DEVICE_OBJECT *device, DEVICE_REGISTRY_PROP ...@@ -1870,9 +1856,12 @@ NTSTATUS WINAPI IoGetDeviceProperty( DEVICE_OBJECT *device, DEVICE_REGISTRY_PROP
OBJECT_NAME_INFORMATION *name = HeapAlloc(GetProcessHeap(), 0, len); OBJECT_NAME_INFORMATION *name = HeapAlloc(GetProcessHeap(), 0, len);
HANDLE handle; HANDLE handle;
handle = kernel_object_handle( device, 0 ); status = ObOpenObjectByPointer( device, OBJ_KERNEL_HANDLE, NULL, 0, NULL, KernelMode, &handle );
if (!status)
{
status = NtQueryObject( handle, ObjectNameInformation, name, len, &used_len ); status = NtQueryObject( handle, ObjectNameInformation, name, len, &used_len );
NtClose( handle ); NtClose( handle );
}
if (status == STATUS_SUCCESS) if (status == STATUS_SUCCESS)
{ {
/* Ensure room for NULL termination */ /* Ensure room for NULL termination */
......
...@@ -47,7 +47,6 @@ struct _ETHREAD ...@@ -47,7 +47,6 @@ struct _ETHREAD
}; };
void *alloc_kernel_object( POBJECT_TYPE type, HANDLE handle, SIZE_T size, LONG ref ) DECLSPEC_HIDDEN; void *alloc_kernel_object( POBJECT_TYPE type, HANDLE handle, SIZE_T size, LONG ref ) DECLSPEC_HIDDEN;
HANDLE kernel_object_handle( void *obj, unsigned int access ) DECLSPEC_HIDDEN;
NTSTATUS kernel_object_from_handle( HANDLE handle, POBJECT_TYPE type, void **ret ) DECLSPEC_HIDDEN; NTSTATUS kernel_object_from_handle( HANDLE handle, POBJECT_TYPE type, void **ret ) DECLSPEC_HIDDEN;
extern POBJECT_TYPE ExEventObjectType; extern POBJECT_TYPE ExEventObjectType;
......
...@@ -29,6 +29,7 @@ ...@@ -29,6 +29,7 @@
#include "winternl.h" #include "winternl.h"
#include "ddk/ntddk.h" #include "ddk/ntddk.h"
#include "ddk/wdm.h" #include "ddk/wdm.h"
#include "ddk/ntifs.h"
#include "wine/debug.h" #include "wine/debug.h"
#include "wine/heap.h" #include "wine/heap.h"
...@@ -80,7 +81,7 @@ NTSTATUS WINAPI KeWaitForMultipleObjects(ULONG count, void *pobjs[], ...@@ -80,7 +81,7 @@ NTSTATUS WINAPI KeWaitForMultipleObjects(ULONG count, void *pobjs[],
{ {
if (objs[i]->WaitListHead.Blink == INVALID_HANDLE_VALUE) if (objs[i]->WaitListHead.Blink == INVALID_HANDLE_VALUE)
{ {
handles[i] = kernel_object_handle( objs[i], SYNCHRONIZE ); ObOpenObjectByPointer( objs[i], OBJ_KERNEL_HANDLE, NULL, SYNCHRONIZE, NULL, KernelMode, &handles[i] );
continue; continue;
} }
...@@ -266,7 +267,7 @@ LONG WINAPI KeSetEvent( PRKEVENT event, KPRIORITY increment, BOOLEAN wait ) ...@@ -266,7 +267,7 @@ LONG WINAPI KeSetEvent( PRKEVENT event, KPRIORITY increment, BOOLEAN wait )
} }
else else
{ {
if ((handle = kernel_object_handle( event, EVENT_MODIFY_STATE ))) if (!ObOpenObjectByPointer( event, OBJ_KERNEL_HANDLE, NULL, EVENT_MODIFY_STATE, NULL, KernelMode, &handle ))
{ {
NtSetEvent( handle, &ret ); NtSetEvent( handle, &ret );
NtClose( handle ); NtClose( handle );
...@@ -297,7 +298,7 @@ LONG WINAPI KeResetEvent( PRKEVENT event ) ...@@ -297,7 +298,7 @@ LONG WINAPI KeResetEvent( PRKEVENT event )
} }
else else
{ {
if ((handle = kernel_object_handle( event, EVENT_MODIFY_STATE ))) if (!ObOpenObjectByPointer( event, OBJ_KERNEL_HANDLE, NULL, EVENT_MODIFY_STATE, NULL, KernelMode, &handle ))
{ {
NtResetEvent( handle, &ret ); NtResetEvent( handle, &ret );
NtClose( handle ); NtClose( handle );
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment