リムーバブル デバイス機能からコンテナー ID を生成する方法
バス ドライバーが列挙している devnode ノード (devnode) のコンテナー ID を指定できない場合、プラグ アンド プレイ (PnP) マネージャーはリムーバブル デバイス機能を使用して、デバイスに列挙されているすべての devnode のコンテナー ID を生成します。 リムーバブル デバイス機能の詳細については、「リムーバブル デバイス機能の概要」を参照してください。
次のヒューリスティックは、リムーバブル デバイス機能からコンテナー ID を生成する方法を示しています。
devnode のリムーバブル デバイス機能が TRUE に設定されている場合は、devnode の新しいコンテナー ID を生成します。
devnode のリムーバブル デバイス機能が FALSE に設定されている場合、親 devnode からコンテナー ID を継承します。
devnode は初期化され、ドライバー スタックが開始されるまで子 devnode を列挙できません。 初期化中にコンテナー ID が割り当てられるとすぐに、devnode は、そのコンテナー ID を、列挙された非リムーバブルな子のいずれかに伝達する準備が整います。
リムーバブル デバイス機能が TRUE に設定された開発ノードは、デバイスの最上位 (親) 開発ノードと見なされ、この devnode に対してコンテナー ID が生成されます。
この親 devnode のすべての子は、リムーバブル デバイス機能が TRUE に設定されていない限り、同じコンテナー ID を継承します。 この場合、リムーバブルの子 devnode には別のコンテナー ID が割り当てられ、このリムーバブル デバイスの親開発ノードになります。 その devnode のすべての子は、同じコンテナー ID を継承します。
たとえば、単一機能マウスが USB 経由でコンピューターに接続されるとします。 この場合、USB バス ドライバーは新しいデバイスを検出し、それが USB ヒューマン インターフェイス デバイス (HID) であることを検出します。 USB バス ドライバーは、デバイスの USB HID 開発ノードを作成します。 HID devnode は、HID デバイスがマウスであることも検出し、HID 準拠のマウスの子 devnode を作成します。
このヒューリスティックをこの例に適用すると、次のアクションが実行されます。
USB HID 開発ノードが作成されます。 親 USB ハブ devnode が外部に接続された USB ポートに 接続されていることが認識されたため、リムーバブル デバイスの機能は、この開発ノードで TRUE に設定されます。
コンテナー ID は、リムーバブル デバイスの最上位の開発ノードであるため、この devnode 用に作成されます。 その結果、この devnode はリムーバブル デバイスの親 devnode と見なされます。
HID 準拠のマウス 開発ノードが作成されます。 親 USB HID 開発ノードがすべての子を移動不可として報告するため、リムーバブル デバイスの機能は、この開発ノードで FALSE に設定されます。 この場合、HID 準拠のマウス 開発ノードは、親 devnode のコンテナー ID を継承します。
このヒューリスティックにより、マウスに属する各開発ノードに同じコンテナー ID が割り当てられます。 PnP マネージャーは、デバイスの一意の識別子がない場合でも、開発ノードを論理デバイスに正常にグループ化しました。
Note
このヒューリスティックの成功は、列挙する各開発ノードのリムーバブル デバイス機能を正しく報告する特定のバス ドライバーに依存します。 バス ドライバーは、デバイスの親開発ノードをリムーバブルとして設定する必要があり、その子開発ノードをリムーバブルとして設定しないようにする必要があります。