4

我正在开发一个应用程序,它使用磁盘仲裁来找出哪些设备连接到机器并对连接/断开事件做出反应,并且多年来一直运行良好。就在最近,我发现在使用外部 Thunderbolt 驱动器时某些东西无法按预期工作,我对此进行了调试,发现卷的可弹出属性(映射到 kIOMediaEjectableKey i IOKit 的磁盘仲裁中的 kDADiskDescriptionMediaEjectableKey)设置为 false。但是,驱动器显示时带有弹出按钮。

finder 使用什么来确定此卷是否可弹出?显然不是明显的 kDADiskDescriptionMediaEjectableKey。

任何提示表示赞赏。

4

2 回答 2

2

我对此不是 100% 确定,但我怀疑 OS X 会显示任何外部驱动器的弹出按钮。(即非内部:kDADiskDescriptionDeviceInternalKey是错误的)Thunderbolt 驱动器实际上只是外部 PCIe 驱动器控制器(SATA 或其他),并且没有“弹出”的总线概念;单击弹出通常只会卸载卷并将驱动器发送到待机状态。如果您实际上没有拔下它,您可以随时重新安装它。与许多 USB 驱动器相比,当您弹出它们时,它们实际上似乎从总线上掉了下来。因此,如果驱动程序支持显式“弹出”操作,当您单击弹出时也会执行该操作,但这不是显示弹出 UI 的要求。

于 2016-07-23T13:13:18.507 回答
2

我没有找到任何其他方法,而是根据我能找到的尽可能多的设备反复试验进行启发式方法。kDADiskDescriptionMediaEjectableKey 或 kDADiskDescriptionMediaRemovableKey 或 kDADiskDescriptionDeviceInternalKey 属性均不可依赖,例如,插入 Macbook 的集成读卡器的 SD 卡的 kDADiskDescriptionDeviceInternalKey 为真。因此我现在使用的条件是:

MediaEjectable == 真 || 媒体可移动 == 真 || 设备内部 == 假)|| DeviceProtocol == "USB" || DeviceProtocol == "火线"

很丑但是还没有找到更好的方法。

于 2016-08-08T07:34:23.137 回答