> 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
IoGetDeviceObjectPointer works on Vista but not on XP
最新推荐文章于 2021-08-25 11:25:43 发布