通过驱动名称得到(T雪工具)驱动对象名_ObReferenceObjectByName_函数的用法
2017-01-26 17:49
555 查看
//全局的一个对象类型 extern POBJECT_TYPE *IoDriverObjectType; 函数原型声明 NTSTATUS ObReferenceObjectByName ( __in PUNICODE_STRING ObjectName, __in ULONG Attributes, __in_opt PACCESS_STATE AccessState, __in_opt ACCESS_MASK DesiredAccess, __in POBJECT_TYPE ObjectType, __in KPROCESSOR_MODE AccessMode, __inout_opt PVOID ParseContext, __out PVOID *Object ); PDRIVER_OBJECT driverObject; UNICODE_STRING driverString; 用法示例代码: status = ObReferenceObjectByName(&driverString, OBJ_CASE_INSENSITIVE,//不区分大小写 驱动名可以写大写或小写 NULL, // 结构比较复杂设计对象特性的东西access state 0, // 访问权限可以写0 写0完全访问不受控制FILE_ALL_ACCESS, *IoDriverObjectType,//对象类型 注意加*号 KernelMode,//内核模式 有三种模式 enum 类型 NULL, //不知道 parse context parse context (PVOID*)&driverObject);//输出对象 我们要得到的驱动对象 说明: driverString驱动名称 如:L“\\Driver\\Disk” driverObject注意前面的&符号 *IoDriverObjectType 定义时有星号,用的时候*IoDriverObjectType也要加星号
一、由于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)
相关文章推荐
- ObReferenceObjectByName通过对象名得到对象指针_例如 设备 事件 互斥体
- IoGetDeviceObjectPointer和ObReferenceObjectByName得到设备对象指针
- ObReferenceObjectByName 函数解析
- ObReferenceObjectByName 函数
- ObReferenceObjectByName 函数解析
- [转载]关于驱动中的ObReferenceObjectByName 和 IoGetDeviceObjectPointer
- ObReferenceObjectByName 函数
- 22.DriverBase-ObReferenceObjectByHandle通过Ring3句柄获得Ring0对象
- [转载]关于驱动中的ObReferenceObjectByName 和 IoGetDeviceObjectPointer
- ObReferenceObjectByName的使用
- 蛋疼的ObReferenceObjectByName调试
- 通过驱动对象得到Hookport.sys的基地址和大小
- 过滤/ObReferenceObjectByName/XT
- 函数......ObReferenceObjectByHandle
- ObReferenceObjectByName vs IoGetDeviceObjectPointer
- ObReferenceObjectByName
- js中不适用工具可以直接通过ID名称找到唯一的对象
- note : ObReferenceObjectByName usage
- ObReferenceObjectByName蓝屏问题
- Object get["属性"]; java反射技术通过对象和属性名得到属性值