これは私のコードです:
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 debugで使用すると、intelpm.sys
;で壊れます。
objectname を"\\Device\\Harddisk1\\Partition2"
(partition2 は実際に存在する) に変更すると、呼び出しが成功します。
objectname を に変更する"\\Device\\Harddisk1\\Partition3"
と (partition3 が存在しない)、失敗して status = が返されます0xc0000034
。これは、objectname が存在しないことを意味します。
"\\Device\\Harddisk1\\Partition1"
オブジェクトを使用すると失敗し、ステータスが返されない理由を誰かが知っていますか? どうもありがとう!