我正在开发一个项目,要求我在Windows驱动器上以低级别运行,并且主要使用Windows API调用。但在我可以操作驱动器之前,我需要知道它上面存在的分区类型。
这在由MBR格式化的磁盘上相当简单,因为
DeviceIoControl(...,IOCTL_DISK_GET_DRIVE_LAYOUT_EX,...);
返回格式DRIVE_LAYOUT_INFORMATION_EX
的结构,其中包含PARTITION_INFORMATION_EX
数组。在MBR磁盘上,PARTITION_INFORMATION_EX.Mbr.PartitionType
元素包含分区类型的唯一标识符,例如NTFS
为0x07
,Extended
为0x05
。
但是,这在GPT磁盘上并不那么简单。 我知道我可以从分区的开头读取标识符,但我更喜欢使用API调用来处理它,例如DeviceIoControl
。当我在GPT磁盘上运行DeviceIoControl
时,PARTITION_INFORMATION_EX.Mbr.PartitionType
包含的值与通常存在的值完全不同。
请注意,GUID对我来说没用,因为它只告诉我分区的用途,而不是它的分区类型。我想知道驱动器是NTFS,FAT等
答案 0 :(得分:0)
查看Microsoft的PARTITION_INFORMATION_GPT
结构以获取GPT分区。
答案 1 :(得分:0)
我发现查找卷的文件系统的最佳方法是调用GetVolumeInformation,而不是通过PARTITION_INFORMATION_EX。在Vista +上,这似乎只是GetVolumeInformationByHandleW的包装器。如果你已经有一个音量处理,那么后者可能是你最好的。
两者都适用于MBR或GPT磁盘。结果是文件系统名称字符串而不是类型ID,但应该很容易适应。