zoukankan      html  css  js  c++  java
  • ObReferenceObjectByName

    一、由于ObReferenceObjectByName没有文档化,故在使用前先做声明:

    #ifdef __cplusplus
    extern "C"
    {
    #endif
    #include <NTDDK.h>

    NTKERNELAPI
    NTSTATUS
    ObReferenceObjectByName(
        IN PUNICODE_STRING ObjectName,
        IN ULONG Attributes,
        IN PACCESS_STATE PassedAccessState OPTIONAL,
        IN ACCESS_MASK DesiredAccess OPTIONAL,
        IN POBJECT_TYPE ObjectType,
        IN KPROCESSOR_MODE AccessMode,
        IN OUT PVOID ParseContext OPTIONAL,
        OUT PVOID *Object
        );
    extern POBJECT_TYPE IoDeviceObjectType;
    #ifdef __cplusplus
    }
    #endif

    二、使用

    调试ObReferenceObjectByName发现,

    (1)可以根据驱动名称可以得到PDRIVER_OBJECT,进而得到该驱动的PDEVICE_OBJECT。

    (2)根据设备名称取到PDEVICE_OJBECT为0。

    (3)根据符号链接名称取到PDEVICE_OJBECT的地址并不是设备对象地址。

    调试代码如下:

     UNICODE_STRING DeviceName;
    // RtlInitUnicodeString( &DeviceName, L"\\??\\HelloDDKA" );
    // RtlInitUnicodeString( &DeviceName, L"\\??\\DriverA" );
     RtlInitUnicodeString( &DeviceName, L"\\Driver\\DriverA" );

     PDEVICE_OBJECT DeviceObject = NULL;
     PFILE_OBJECT FileObject = NULL;
     PDRIVER_OBJECT pDriver = NULL;
    //  ntStatus = ObReferenceObjectByName(&DeviceName,OBJ_CASE_INSENSITIVE,NULL,FILE_ALL_ACCESS,IoDeviceObjectType,KernelMode,NULL,(PVOID*)&DeviceObject);
     ntStatus = ObReferenceObjectByName(&DeviceName,OBJ_CASE_INSENSITIVE,NULL,FILE_ALL_ACCESS,IoDeviceObjectType,KernelMode,NULL,(PVOID*)&pDriver);
     
     DeviceObject = pDriver->DeviceObject;
     PDEVICE_EXTENSION pdx = (PDEVICE_EXTENSION)DeviceObject->DeviceExtension;

     三、关闭引用

    调用上面的ObReferenceObjectByName对象指针,当得到的对象不再使用后,记得调用ObDereferenceObject关闭引用。

    (1)如果得到的是驱动对象,则关闭驱动对象引用,如ObDereferenceObject(pDriver)

    (2)如果得到是设备对象,则关闭设备对象引用,如ObDereferenceObject(deviceObject)

    (3)如果得到的是文件对象,则关闭文件对象引用,如ObDereferenceObject(fileObject)

  • 相关阅读:
    1.C和C++区别,以及const分析(底层const/顶层const)
    4.移植驱动到3.4内核-移植总结
    3.移植驱动到3.4内核-移植DM9000C驱动
    2.移植3.4内核-支持烧写yaffs2,裁剪内核并制作补丁
    Android Support v4、v7、v13、v14、v17的区别和应用场景
    Android利用canvas画各种图形
    ActionBar 自定义布局定义
    android动画坐标定义
    GitHub上最著名的Android播放器开源项目大全
    CardView 简介和使用
  • 原文地址:https://www.cnblogs.com/guanlaiy/p/2650232.html
Copyright © 2011-2022 走看看