【问题标题】:How to identify USB device is a mass storage device on Mac OSX?如何识别 USB 设备是 Mac OSX 上的大容量存储设备?
【发布时间】:2015-02-09 09:34:04
【问题描述】:

如何借助 Mac OSX IO Kit 库识别 USB 端口上连接的设备是否为大容量存储设备?让我们在 Mac OSX 系统上连接一个示例 USB 键盘和 USB 闪存驱动器。如何仅区分大容量 USB 设备?

【问题讨论】:

  • IOKit 编程指南会告诉你。 IOKit 是一个非常典型的集合和获取键值游戏。 IOKit 中有多种类型的设备。开始阅读并开始查看标题。这将非常容易。

标签: macos usb-drive iokit


【解决方案1】:

您可以使用磁盘仲裁框架的DADiskCopyIOMedia function 访问与特定磁盘对应的 IOService 节点(IOMedia 对象)。您可以从那里向上走 IOService 树到您的 IOUSBInterface/IOUSBDevice。

或者,您可以使用 I/O 套件匹配来通过其 IOKit 类查找系统中的所有 USB 大容量存储或 USB 连接的 SCSI (UAS) 节点。键盘也是如此(它们是 I/O Kit 的 HID 系列的一部分)。

我建议在 IORegistryExplorer 中查看系统的 IOService 树。

【讨论】:

  • 能够检测到系统上连接的所有 USB 与 I/O 套件匹配,即matchingDict = IOServiceMatching(kIOUSBDeviceClassName)。但不完全确定如何过滤掉才找到大容量存储 USB 类型。我尝试添加子设备类以匹配 dict 作为 kUSBMassStorageRBCSubClass 但没有得到预期的输出。
    long usbSubDeviceClass = kUSBMassStorageRBCSubClass;<br> numberRef = CFNumberCreate(kCFAllocatorDefault, kCFNumberSInt32Type, &amp;usbSubDeviceClass); CFDictionarySetValue(matchingDict, CFSTR(kUSBDeviceSubClass), numberRef);
  • IOUSBMassStorageClass 是 USB 大容量存储接口和设备的驱动类名称,IOUSBAttachedSCSI 是 UAS 的驱动类名称。据我所知,它们都充当 IOUSBInterface 和 IOUSBDevice nubs 的客户端。它们还在它们下面生成一个 SCSI 设备树。
猜你喜欢
  • 1970-01-01
  • 2011-01-30
  • 2015-09-12
  • 1970-01-01
  • 2013-09-20
  • 1970-01-01
  • 1970-01-01
  • 2012-09-01
  • 2018-08-14
相关资源
最近更新 更多