这是我的代码:
UNICODE_STRING symbol;
WCHAR ntNameBuffer[128];
swprintf(ntNameBuffer, L"\\Device\\Harddisk1\\Partition1");
RtlInitUnicodeString(&symbol, ntNameBuffer);
KdPrint(("OSNVss:symbol is %ws\n",symbol.Buffer));
status = IoGetDeviceObjectPointer(&symbol,
FILE_READ_DATA,
&pDiskFileObject,
&pDiskDeviceObject);
我的驱动程序是\\Device\\Harddisk1\\Partition1
.
当我调用IoGetDeviceObjectPointer
它会失败并且没有状态返回并且它不会继续执行剩余的代码。
当我使用 windbg 调试它时,它会以intelpm.sys
;
如果我将对象名更改为"\\Device\\Harddisk1\\Partition2"
(partition2 确实存在),它将成功调用
如果我将 objectname 更改为"\\Device\\Harddisk1\\Partition3"
, (partition3 不存在),它失败并返回 status = 0xc0000034
,意味着 objectname 不存在。
有谁知道为什么当我使用对象时"\\Device\\Harddisk1\\Partition1"
它失败并且没有返回状态?非常感谢!