获取驱动程序的父级(或祖先)的属性



我有一个用于USB连接的自定义SCSI设备的驱动程序,它实现了一些特定于供应商的命令。每个 USB 设备承载多个 SCSI LUN。这工作得很愉快,但是根据设备对 SCSI LUN 进行分组存在问题,因为从IOSCSILogicalUnitNub级别向下(我的驱动程序继承自),没有将 LUN 链接在一起的识别功能(有 SCSI 逻辑单元号,但这些单元号对于每个新设备都会发生冲突;它们都有一个单元0x0)。

我想做一些事情,比如根据 USB locationID 字段(或任何其他唯一密钥)将它们全部链接起来,但我不知道如何获取父 USB 设备,因为只有匹配的 SCSI 驱动程序io_service_t。这也最好在应用程序端完成,而不是在驱动程序中完成,因为应用程序需要跟踪哪个服务具有哪些 LUN 以及由处理程序的哪个实例打开。

IO 注册表中的层次结构为:

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

如果设备的io_service_t位于变量 _device 中,则代码如下所示:

CFTypeRef _thing_you_want = IORegistryEntrySearchCFProperty(_device, kIOServicePlane, CFSTR("locationID"), NULL, kIORegistryIterateParents);

转到此处获取更多信息:

http://developer.apple.com/library/mac/#documentation/devicedrivers/conceptual/AccessingHardware/AH_IOKitLib_API/AH_IOKitLib_API.html

相关内容

  • 没有找到相关文章

最新更新