PnpMgr分析
+ -

ReactOS 根据名称获取对象指针ObReferenceObjectByName

2021-07-13 248 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工具查看,如:
WINOBJ

执行流程

在ReactOS源代码中:

  • 其首先使用ObpCaptureObjectName函数校验对象名称,并复制一份。
  • 使用ObpLookupObjectName函数进行对象查找。

相关函数

ObReferenceObjectByName毕竟是一个通用的函数,内核对其进行封装。如IopGetDriverObject用于获取驱动。

  • IopGetDriverObject

0 篇笔记 写笔记

ReactOS 卸载驱动IopUnloadDriver
内核卸载驱动调用的函数是NtUnloadDriver,这个函数只是对IopUnloadDriver的包装。NTSTATUS NTAPINtUnloadDriver(IN PUNICODE_STRING DriverServiceName){ return IopUnloadDriver(......
ReactOS 根据名称获取对象指针ObReferenceObjectByName
ObReferenceObjectByName在Windows中是一个未文档化的函数,其功能是通过名称获取对象指针。其函数原型为:NTKERNELAPINTSTATUSNTAPIObReferenceObjectByName ( _In_ PUNICODE_STRING Object......
作者信息
我爱内核
Windows驱动开发,网站开发
好好学习,天天向上。
取消
感谢您的支持,我会继续努力的!
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

您的支持,是我们前进的动力!