我正在开展一个项目,该项目要求我在 Windows 驱动器上进行低级别操作,并且主要使用 Windows API 调用来执行此操作。但在我可以对驱动器进行操作之前,我需要知道其上存在的分区类型。
这在 MBR 格式化的磁盘上相当简单,因为
DeviceIoControl(...,IOCTL_DISK_GET_DRIVE_LAYOUT_EX,...);
返回格式为的结构DRIVE_LAYOUT_INFORMATION_EX
,其中包含 的数组PARTITION_INFORMATION_EX
。在 MBR 磁盘上,该PARTITION_INFORMATION_EX.Mbr.PartitionType
元素包含分区类型的唯一标识符,例如 for NTFS
it is 0x07
,for Extended
it is 0x05
。
但是,这在 GPT 磁盘上并不是那么简单。我知道我可以从 partition 的开头读取标识符,但我更喜欢使用 API 调用来处理这个问题,例如DeviceIoControl
. 当我DeviceIoControl
在 GPT 磁盘上运行时,它PARTITION_INFORMATION_EX.Mbr.PartitionType
包含的值与通常存在的值完全不同。
请注意,GUID 对我来说毫无用处,因为它只告诉我分区的用途,而不告诉我它是什么类型的分区。我正在尝试确定驱动器是否为 NTFS、FAT 等。