ReactOS 根据名称获取对象指针ObReferenceObjectByName
2021-07-13
270
0
ObReferenceObjectByName在Windows中是一个未文档化的函数,其功能是通过名称获取对象指针。
其函数原型为:
NTKERNELAPI
NTSTATUS
NTAPI
ObReferenceObjectByName (
_In_ PUNICODE_STRING ObjectName,
_In_ ULONG Attributes,
_In_opt_ PACCESS_STATE PassedAccessState,
_In_opt_ ACCESS_MASK DesiredAccess,
_In_ POBJECT_TYPE ObjectType,
_In_ KPROCESSOR_MODE AccessMode,
_Inout_opt_ PVOID ParseContext,
_Out_ PVOID *Object
);
在Windows内核中,我们可以根据此函数获取如驱动DRIVER_OBJECT,设备DEVICE_OBJECT对象指针。
如我们这里根据驱动名称设备驱动对象
Status = ObReferenceObjectByName(
&DriverName,
OBJ_OPENIF | OBJ_KERNEL_HANDLE | OBJ_CASE_INSENSITIVE, /* Attributes */
NULL, /* PassedAccessState */
0, /* DesiredAccess */
IoDriverObjectType,
KernelMode,
NULL, /* ParseContext */
(PVOID*)&Object);
系统中已经加载的驱动我们可以通过WINOBJ工具查看,如:
执行流程
在ReactOS源代码中:
- 其首先使用ObpCaptureObjectName函数校验对象名称,并复制一份。
- 使用ObpLookupObjectName函数进行对象查找。
相关函数
ObReferenceObjectByName毕竟是一个通用的函数,内核对其进行封装。如IopGetDriverObject用于获取驱动。
- IopGetDriverObject