在这个问题中,有关通过IOKit询问已安装驱动器的重要信息。但是,有没有一种方法可以确定IOIteratorNext()
返回的设备中哪一个是启动驱动器?更好的方法是,可能有一种方法可以只获取IOServiceGetMatchingServices()
返回的迭代器中的引导驱动器吗?
DADiskCreateFromVolumePath()
和CFURL
(用于/
)进行调用。然后调用DADiskCopyDescription()
以获取描述字典。其中包括卷、介质、设备甚至总线的属性,包括如果需要的IOKit路径。但是,您要查找的信息很可能直接在描述字典中。IOService:/AppleACPIPlatformExpert/AppleEFIRuntime/AppleEFINVRAM
。有一个名为efi-boot-device
的属性。它的值是包含服务匹配字典的属性列表。如您所见,它寻找提供商类别为IOMedia
且其UUID
属性为特定UUID的条目。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
system()
的用途。而且无需安装任何东西,在所有 Mac 上,Apple 都提供了 nvram
,因此它不是外部软件包的依赖项。 - Mark Setchellstat("/")
,但如果有一种方法可以在不调用system()
或stat
文件系统的情况下在注册表中查找它,那么这将更加安全,因为我怀疑替代方案在沙盒中的工作效果不佳。 - theory