Macos Thunderbolt驱动器在磁盘仲裁/iokit中未标记为可弹出,尽管它们显然是可弹出的

Macos Thunderbolt驱动器在磁盘仲裁/iokit中未标记为可弹出,尽管它们显然是可弹出的,macos,iokit,diskarbitration,Macos,Iokit,Diskarbitration,我正在开发一个应用程序,它使用磁盘仲裁来找出哪些设备连接到一台机器,并对连接/断开连接事件做出反应,并且多年来一直运行良好。就在最近,我发现在使用外部thunderbolt驱动器时,有些东西无法按预期工作,我对此进行了调试,发现卷的可弹出属性(映射到kIOMediaEjectableKey I IOKit的磁盘仲裁中的kDADiskDescriptionMediaEjectableKey)设置为false。但是,驱动器会显示一个弹出按钮 finder使用什么来决定此卷是否可弹出?显然不是明显的k

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

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


非常感谢您的任何提示。

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

我没有找到任何其他方法,而是根据我能找到的尽可能多的设备进行尝试和错误的启发。KDADiskDescriptionMediaEntableKey、kDADiskDescriptionMediaRemovableKey和kDADiskDescriptionDeviceInternalKey属性都不能依赖,例如,插入Macbook集成读卡器的SD卡的kDADiskDescriptionDeviceInternalKey为true。因此,我现在使用的条件是:

MediaEjectable==true | | MediaRemovable==true | | DeviceInternal==false)| | DeviceProtocol==“USB”| | DeviceProtocol==“FireWire”


非常难看,但还没有找到更好的方法。

我不能100%确定这一点,但我怀疑OS X显示了任何外部驱动器的弹出按钮。(即非内部:
kDADiskDescriptionDeviceInternalKey
为false)Thunderbolt驱动器实际上只是外部PCIe驱动器控制器,没有“弹出”的总线概念;单击弹出通常只会卸载卷并将驱动器发送到待机状态。你可以随时重新安装它,如果你没有真正拔下它。与此相比,许多USB驱动器在弹出时似乎会从总线上脱落。好的,非常感谢!这也是我看到的唯一替代方案,但iInternal的文档充其量只是粗略的,但到目前为止,对于所有检查的驱动器,这似乎是正确的,所以我可能会这样做。我会等待更多的答案,然后再关闭此选项,以获得更多的答案,但我可能会接受这个答案。我自己编写了存储设备驱动程序,我可以告诉你,内部/外部的区别完全是基于驱动程序的——因此,驱动程序完全有可能声称外部驱动器是内部的,反之亦然。在某种程度上,你只需要在这个问题上信任司机……无论如何,我会让我的回答成为一个答案,而不是一个评论。你确定你看到的是正确的层次结构吗?您正在处理整个磁盘分区吗?如果您使用
DADiskCopyWholeDisk()
并复制其描述,它是否可弹出?我查看的是单个分区,即如果驱动器格式化为两个分区a和B,我将分别查看a和B。除了thunderbolt的案例外,这已经奏效了,但我会检查它,下次我拿到thunderbolt驱动器时,这将是两天后的事情,并报告回来。作为一个反例,这里我有一个我安装的磁盘映像,其中kDADiskDescriptionDeviceInternalKey是正确的。