Macos 获取驱动程序的属性';父母(或祖先)
我有一个USB连接的自定义SCSI设备的驱动程序,它实现了一些特定于供应商的命令。每个USB设备承载多个SCSI LUN。这可以很好地工作,但根据设备对SCSI LUN进行分组存在问题,从Macos 获取驱动程序的属性';父母(或祖先),macos,usb,device-driver,scsi,kernel-extension,Macos,Usb,Device Driver,Scsi,Kernel Extension,我有一个USB连接的自定义SCSI设备的驱动程序,它实现了一些特定于供应商的命令。每个USB设备承载多个SCSI LUN。这可以很好地工作,但根据设备对SCSI LUN进行分组存在问题,从IOSCSILogicalUnitNub级别开始(我的驱动程序继承自该级别),没有将LUN链接在一起的标识功能(有SCSI逻辑单元号,但每个新设备都会发生冲突;它们都有一个单元0x0) 我想根据USBlocationID字段(或任何其他唯一密钥)将它们链接起来,但我不知道如何获取父USB设备,因为只有匹配SCS
IOSCSILogicalUnitNub
级别开始(我的驱动程序继承自该级别),没有将LUN链接在一起的标识功能(有SCSI逻辑单元号,但每个新设备都会发生冲突;它们都有一个单元0x0)
我想根据USBlocationID
字段(或任何其他唯一密钥)将它们链接起来,但我不知道如何获取父USB设备,因为只有匹配SCSI驱动程序的io_服务\u 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_服务在变量_device中,则代码如下所示:
CFTypeRef _thing_you_want = IORegistryEntrySearchCFProperty(_device, kIOServicePlane, CFSTR("locationID"), NULL, kIORegistryIterateParents);
点击此处了解更多信息:
这似乎正是我想要的,但在父母身上找不到任何东西(
\u thing\u you\u want=NULL
),虽然它会很高兴地找到驱动程序本身的属性,例如IOClass
,kioregistryiteraterrursely
,但函数还需要在最后一个参数中添加OR'd标志,以查找高于父级的驱动程序。