如何以编程方式确定哪个Mac驱动器是启动驱动器?

时间:2014-11-07 21:52:08

标签: macos cocoa boot iokit

有关通过this question中的IOKit查询已安装驱动器的详细信息。但有没有办法确定IOIteratorNext()返回的哪些设备是启动驱动器?或者更好的是,是否有办法在IOServiceGetMatchingServices()返回的迭代器中获取启动驱动器?

2 个答案:

答案 0 :(得分:4)

启动是从媒体完成的,而不是设备本身。设备有媒体,媒体有卷。我不相信在IOKit中表示了卷。

使用磁盘仲裁可能最容易。对DADiskCreateFromVolumePath() CFURL使用/。然后调用DADiskCopyDescription()以获取描述字典。这将包括卷,媒体,设备甚至总线的属性,包括IOKit路径(如果需要)。但是,您正在寻找的信息很可能直接在描述词典中。

Mark Setchell引用的NVRAM信息也可以从路径IOService:/AppleACPIPlatformExpert/AppleEFIRuntime/AppleEFINVRAM的IOKit获得。有一个属性efi-boot-device。它的值是包含服务匹配字典的属性列表。如您所见,它查找提供程序类为IOMedia的条目,其UUID属性是某个UUID。

答案 1 :(得分:0)

您可以使用:

nvram efi-boot-device

efi-boot-device <array><dict><key>IOMatch</key><dict><key>IOProviderClass</key><string>IOMedia</string><key>IOPropertyMatch</key><dict><key>UUID</key><string>78025031-4C42-4FDE-8DD1-A515A2BF6032</string></dict></dict><key>BLLastBSDName</key><string>disk0s3</string></dict></array>%00