IoGetDeviceObjectPointer works on Vista but not on XP


> Subject: RE:[ntdev] IoGetDeviceObjectPointer works on Vista but not on XP
>
> Hello,
>
> Sometimes the function IoGetDeviceObjectPointer fails to get the Device Object (because this function has some restrictions)
>
> With the following code you can bypass this issue.
> (if you know the driver name)
>
> STRING string_driver_name;
> UNICODE_STRING driver_name;
> OBJECT_ATTRIBUTES ObjectAttributes;
> HANDLE hDirectory = NULL;
> POBJECT_DIRECTORY pDirectoryObject = NULL;
> NTSTATUS nt_status = UNKNOWN_STATUS;
>
> // 1. get the unicode name of the driver
> RtlInitString(&string_driver_name, &(name_buffer[0]));
> RtlAnsiStringToUnicodeString(&driver_name, &string_driver_name, TRUE);
>
> // 2. get the handle of the driver
> InitializeObjectAttributes(&ObjectAttributes, &driver_name, OBJ_CASE_INSENSITIVE, NULL, NULL);
> nt_status = ObOpenObjectByName(&ObjectAttributes, NULL, KernelMode, NULL, 0x80000000, NULL, &hDirectory);
>
> if (NT_SUCCESS(nt_status) == TRUE)
> {
> // 3 Get pointer of the driver from the driver handle
> nt_status = ObReferenceObjectByHandle(hDirectory, FILE_ANY_ACCESS, NULL, KernelMode, &pDirectoryObject, NULL);
>
> if (NT_SUCCESS(nt_status) == TRUE)
> {
> // 4 Get driver device object
> PDRIVER_OBJECT driver_object = (PDRIVER_OBJECT)pDirectoryObject;
> PDEVICE_OBJECT device_object_01 = driver_object->DeviceObject;
>
> if (device_object_01 != NULL)
> {
> PDEVICE_OBJECT device_object_02 = device_object_01->NextDevice;
> }
> }
> }
>
>
> michi
>
>
> ---
> NTDEV is sponsored by OSR
>
> For our schedule of WDF, WDM, debugging and other seminars visit:
> http://www.osr.com/seminars
>
> To unsubscribe, visit the List Server section of OSR Online at http://www.osronline.com/page.cfm?name=ListServer

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值