C++ 如何将卷驱动器号与相应的磁盘分区关联?
我的目标是将一对“驱动器和分区号”与该卷的逻辑驱动器号相关联。例如,在此配置中: 对于跨卷C++ 如何将卷驱动器号与相应的磁盘分区关联?,c++,c,winapi,filesystems,kernel32,C++,C,Winapi,Filesystems,Kernel32,我的目标是将一对“驱动器和分区号”与该卷的逻辑驱动器号相关联。例如,在此配置中: 对于跨卷F:,我假设得到: Volume F: PhysicalDrive1-Partition1 PhysicalDrive2-Partition1 因此,为了获得卷所跨越的物理驱动器号,我使用DeviceIoControlAPI的控制代码作为(它们没有为DeviceIoControlAPI调用正确分配内存,但这超出了这个问题的范围。) 因此,在卷F:的示例中,我得到了两个结构,可以使用DiskNum
F:
,我假设得到:
Volume F:
PhysicalDrive1-Partition1
PhysicalDrive2-Partition1
因此,为了获得卷所跨越的物理驱动器号,我使用DeviceIoControl
API的控制代码作为(它们没有为DeviceIoControl
API调用正确分配内存,但这超出了这个问题的范围。)
因此,在卷F:
的示例中,我得到了两个结构,可以使用DiskNumber
成员从中获取物理驱动器号
我的问题是如何得到相应的分区号
另外,我需要这些分区号的原因是,我可以在以后调用时使用驱动器句柄将卷驱动器号与磁盘分区关联起来,该句柄是以“\\?\PhysicalDriveX”的形式打开的其中
X
代表驱动器号。您可以读取磁盘的分区表并扫描其条目,以找到与磁盘号的磁盘区段的成员StartingOffset
相对应的分区表。@alk:几乎想发布并说您解决了它,但是在做了一些测试之后,我意识到MS在这个过程中又投入了另一个麻烦——显然,IOCTL\u DISK\u GET\u DRIVE\u LAYOUT\u EX
不适用于动态磁盘。所以这些偏移量不匹配。与屏幕截图中的“磁盘2”类似,在由IOCTL\u Disk\u GET\u DRIVE\u LAYOUT\u EX
返回的结果中,将显示为一个分区。该死您想说在磁盘2的分区表中只找到一个分区条目吗?@alk:是的。阅读此处的备注部分:我不知道他们为什么选择不支持动态磁盘?这使得IOCTL\u DISK\u GET\u DRIVE\u LAYOUT\u EX
完全无用。有趣的是,IOCTL\u VOLUME\u GET\u VOLUME\u DISK\u区段似乎支持动态磁盘。推理?逃避我。。。