我有一个用于连接 USB 的自定义 SCSI 设备的驱动程序,它实现了一些特定于供应商的命令。每个 USB 设备承载多个 SCSI LUN。这工作非常愉快,但是根据设备对 SCSI LUN 进行分组存在问题,因为从IOSCSILogicalUnitNub
级别向下(我的驱动程序继承自),没有将 LUN 链接在一起的识别功能(有 SCSI 逻辑单元号,但是这些对于每个新设备都会发生冲突;它们都有一个单元 0x0)。
我想做一些事情,比如根据 USBlocationID
字段(或任何其他唯一键)链接它们,但我不知道如何在仅给出io_service_t
匹配的 SCSI 驱动程序的情况下获取父 USB 设备。这也最好在应用程序端完成,而不是在驱动程序中完成,因为应用程序需要跟踪哪个服务具有哪些 LUN 以及由哪个处理程序实例打开。
IO Registry 中的层次结构是:
MyUSB-SCSI Device@fd130000
|-IOUSBCompositeDriver
|-Mass Storage Class Interface@0 (has location ID 0xfd130000)
|-IOUSBMassStorageClass
|-IOSCSILogicalUnitNub@0 (has SCSI LUN number, unique in this device, but not globally)
| |-com_Company_driver_MyDriver (my driver)
| |-IOBlockStorageServices
| |-Manuf Device Media (these are strings from the device firmware)
| |-IOMediaBSDClient
|
|-IOSCSILogicalUnitNub@0
|-com_Company_driver_MyDriver
|-IOBlockStorageServices
|-Manuf Device Media
|-IOMediaBSDClient