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