【发布时间】:2015-10-17 01:11:06
【问题描述】:
我们一直在使用OSX: How to get a volume name (or bsd name) from a IOUSBDeviceInterface or location id 中描述的解决方案将 USB 设备从 IOKit 映射到其相应的 BSD 设备位置。代码如下:
CFTypeRef name = IORegistryEntrySearchCFProperty(usbDevice,
kIOServicePlane,
CFSTR(kIOBSDNameKey),
kCFAllocatorDefault,
kIORegistryIterateRecursively);
由于测试版中引入了回归,此解决方案不再适用于 El Capitan。根据https://forums.developer.apple.com/thread/7974 的帖子,Apple 已确认该错误但尚未发布修复程序,因此我需要一个解决方法。到目前为止,我所知道的唯一一个涉及从根目录解析整个 I/O 注册表并查找我的特定设备。
有人知道更简单的解决方法吗?
【问题讨论】:
-
你试过磁盘仲裁方法吗?
-
看起来磁盘仲裁可以让我们识别何时连接了 USB 设备。知道它是否能够找到特定的 IO 服务 USB 设备条目吗?我们需要获取有关 USB 设备的特定属性,因此仅安装点是不够的。
-
当你有一个 DADisk 对象时,你可以通过 DADiskCopyIOMedia 获得对其 IOMedia 对象的引用。从那里,你应该能够找到你需要的东西。