Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/160.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何将卷驱动器号与相应的磁盘分区关联?_C++_C_Winapi_Filesystems_Kernel32 - Fatal编程技术网

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区段似乎支持动态磁盘。推理?逃避我。。。