在GPT磁盘上获取C ++中特定分区的分区类型

时间:2014-08-07 19:18:37

标签: c++ guid drive deviceiocontrol

我正在开发一个项目,要求我在Windows驱动器上以低级别运行,并且主要使用Windows API调用。但在我可以操作驱动器之前,我需要知道它上面存在的分区类型。

这在由MBR格式化的磁盘上相当简单,因为

DeviceIoControl(...,IOCTL_DISK_GET_DRIVE_LAYOUT_EX,...);

返回格式DRIVE_LAYOUT_INFORMATION_EX的结构,其中包含PARTITION_INFORMATION_EX数组。在MBR磁盘上,PARTITION_INFORMATION_EX.Mbr.PartitionType元素包含分区类型的唯一标识符,例如NTFS0x07Extended0x05

但是,这在GPT磁盘上并不那么简单。 我知道我可以从分区的开头读取标识符,但我更喜欢使用API​​调用来处理它,例如DeviceIoControl。当我在GPT磁盘上运行DeviceIoControl时,PARTITION_INFORMATION_EX.Mbr.PartitionType包含的值与通常存在的值完全不同。

请注意,GUID对我来说没用,因为它只告诉我分区的用途,而不是它的分区类型。我想知道驱动器是NTFS,FAT等

2 个答案:

答案 0 :(得分:0)

查看Microsoft的PARTITION_INFORMATION_GPT结构以获取GPT分区。

答案 1 :(得分:0)

我发现查找卷的文件系统的最佳方法是调用GetVolumeInformation,而不是通过PARTITION_INFORMATION_EX。在Vista +上,这似乎只是GetVolumeInformationByHandleW的包装器。如果你已经有一个音量处理,那么后者可能是你最好的。

两者都适用于MBR或GPT磁盘。结果是文件系统名称字符串而不是类型ID,但应该很容易适应。