<p>所有这些都取决于您使用的NT或WIN32 api。<code>ZwOpenFile</code>还是{<cd2>}?在</p>
<p><code>\Device\Harddisk0\Partition1</code>是NT名称格式,只能在<code>ZwOpenFile</code>或{<cd5>}中使用。在</p>
<p>要在<code>CreateFileW</code>中使用此名称,必须在其前面加上<code>\\?\globalroot</code></p>
<p>所以代码示例-(在单个函数中同时使用NT和win32调用)</p>
<pre><code>void xxx()
{
HANDLE hFile;
IO_STATUS_BLOCK iosb;
UNICODE_STRING ObjectName;
OBJECT_ATTRIBUTES oa = { sizeof(oa), 0, &ObjectName, OBJ_CASE_INSENSITIVE };
RtlInitUnicodeString(&ObjectName, L"\\Device\\Harddisk0\\Partition1");
UCHAR buf[0x200];
if (0 <= ZwOpenFile(&hFile, FILE_GENERIC_READ, &oa, &iosb, FILE_SHARE_VALID_FLAGS, FILE_SYNCHRONOUS_IO_NONALERT))
{
LARGE_INTEGER ByteOffset = {};
ZwReadFile(hFile, 0, 0, 0, &iosb, buf, sizeof(buf), &ByteOffset, 0);
ZwClose(hFile);
}
hFile = CreateFile(L"\\\\?\\globalroot\\Device\\Harddisk0\\Partition1", FILE_GENERIC_READ, FILE_SHARE_VALID_FLAGS,
0, OPEN_EXISTING, 0, 0);
if (hFile != INVALID_HANDLE_VALUE)
{
OVERLAPPED ov = {};
ULONG n;
ReadFile(hFile, buf, sizeof(buf), &n, &ov);
CloseHandle(hFile);
}
}
</code></pre>
<p>您还可以使用下一个符号与<code>CreateFileW</code>:</p>
<ul>
<li><code>\\?\Harddisk<X>Partition<Y></code>-用于硬盘上的分区(1,2,…)
(0,1,…)</li>
<li><code>\\?\PhysicalDrive<X></code>用于硬盘(0,1,…)</li>
</ul>
<p>一切都取决于你是怎么走上这条路的?或者你只是硬编码?在</p>