ベンダー固有のコマンドを実装するUSB接続のカスタムSCSIデバイス用のドライバーがあります。各USBデバイスは複数のSCSILUNをホストします。これは非常にうまく機能していますが、デバイスごとにSCSI LUNをグループ化する際に問題があります。IOSCSILogicalUnitNub
レベルが下がると(ドライバーが継承します)、LUNをリンクする識別機能がありません(SCSI論理ユニット番号があります。ただし、これらはすべての新しいデバイスで衝突します。すべてのユニットは0x0です)。
USBフィールド(または他の一意のキー)に従ってそれらすべてをリンクするようなことをしたいのですが、一致するSCSIドライバーlocationID
のみを指定して親USBデバイスを取得する方法がわかりません。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