我在用着:
DWORD d = GetLogicalDrives();
for (int i = 0; i < 26; i++)
{
if ((1 << i) & d) // drive letter 'A' + i present on computer
{
wstring s = std::wstring(L"\\\\.\\") + wchar_t('A' + i) + L":";
PARTITION_INFORMATION diskInfo;
DWORD dwResult;
HANDLE dev = CreateFile(LPWSTR(s.c_str()), GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_READONLY, NULL);
DeviceIoControl(dev, IOCTL_DISK_GET_PARTITION_INFO, NULL, 0, &diskInfo, sizeof(diskInfo), &dwResult, NULL);
CloseHandle(dev);
if (diskInfo.PartitionType == PARTITION_IFS)
{
...
}
}
}
枚举计算机的所有 NTFS 分区。
它适用于我的 Windows 7、我尝试过的 Windows 8.1 以及 Windows 10 计算机。
但它在另一台 Windows 10 计算机上失败:在这台计算机上,卷C:
的diskInfo.PartitionType
值等于0x00
,而不是0x07
( PARTITION_IFS
)。
该值是(请参阅此处的文档):
PARTITION_ENTRY_UNUSED:0x00:未使用的条目分区。
这很奇怪,因为我可以确认,分区确实是 NTFS。
问题:
众所周知,
IOCTL_DISK_GET_PARTITION_INFO
获取分区类型不是 100% 可靠吗?枚举所有 NTFS 卷的更可靠方法是什么?
注意:我还查看了 usingIOCTL_DISK_GET_PARTITION_INFO_EX
而不是,IOCTL_DISK_GET_PARTITION_INFO
但是结构PARTITION_INFORMATION_EX
似乎没有提供有关的信息PartitionType
,而结构PARTITION_INFORMATION
确实提供了对PartitionType
.