USB デバイスへのコンテナー ID の割り当て方法

ユニバーサルシリアルバス (USB) を介してコンピューターに接続されているデバイスの場合、次のフローチャートは、コンテナー ID を USB デバイスノード (devnode) に割り当てるために使用されるヒューリスティックを示しています。

usb devnodes のコンテナー id ヒューリスティックを示すフローチャート。

このヒューリスティックでは、いくつかのソースからの情報を使用して、USB devnode に関して次のいずれかが当てはまるかどうかを判断します。

  • Devnode は USB バス上の新しいデバイスを表していますか。 これが true の場合、devnode は新しいコンテナー ID を受け取ります。

  • Devnode は既存のデバイスの子 devnode ですか。 True の場合、devnode は親の devnode のコンテナー ID を継承します。

USB デバイスのコンテナー ID は、いくつかの方法で生成されます。 この決定は、デバイスに格納されている情報に基づいて行います。 この情報は、ACPI 設定、USB バスドライバー、および USB ハブから取得されます。

このヒューリスティックは、プラグアンドプレイ (PnP) マネージャーが USB バス上で列挙する各 devnode に対して、次の手順を実行します。

  1. Usb バスドライバーによって照会された場合、USB デバイスは、Microsoft オペレーティングシステム (OS) の ContainerID 記述子を通じてコンテナー ID を報告できます。

    Windows 7 以降では、オペレーティングシステムは Microsoft OS の ContainerID 記述子をサポートしています。 この記述子により、独立系ハードウェアベンダー (IHV) は、デバイスのコンテナー ID を正確に指定できます。 そのため、デバイスのコンテナー ID は一意であり、デバイスがインストールされているすべてのコンピューターでは変更されません。 また、Microsoft OS の ContainerID 記述子を報告する場合、デバイスは、すべての列挙された devnodes が同じ物理デバイスの一部であることをオペレーティングシステムに示します。

    Microsoft OS の ContainerID 記述子は、複数のシステムバスによるデバイスの同時接続をサポートするデバイスで使用することを目的としています。 たとえば、プリンターはプラグアンドプレイ Extensions (Pnp-x) を使用して、USB および IP ネットワークの同時接続をサポートする場合があります。 1つの Microsoft OS ContainerID 記述子を使用すると、同じコンテナー ID が両方のトランスポートで報告されます。 したがって、PnP マネージャーは、各バスで列挙された devnodes が同じ物理デバイスの一部であると判断します。

    Microsoft OS の ContainerID 記述子の詳細については、「 microsoft os 記述子」を参照してください。

  2. USB デバイスが Microsoft OS の ContainerID 記述子を報告しない場合、usb ハブドライバーは、デバイスが外部に接続されているポートに接続されているかどうかを判断するために、ACPI にクエリを行います。

    オペレーティングシステムは、デバイスが接続されている USB ポートのアドレスと一致する ACPI アドレス (_ADR) オブジェクトを見つけようとします。 一致するアドレスオブジェクトが見つかった場合、オペレーティングシステムは次の手順を実行します。

    • USB ポート機能 (_UPC) オブジェクトが照会され、 PortIsConnectable の値がチェックされます。 PortIsConnectable の値が0以外の場合は、ポートを使用して外部デバイスに接続できます。 このため、このポートに接続されているデバイスはすべて、コンピューターの外部にある必要があります。

    • コンピューターが ACPI 3.0 を実装し、 PortIsConnectable バイトが0以外の場合、オペレーティングシステムはさらに物理的な場所の説明 (_PLD) オブジェクトに対してクエリを行います。 オペレーティングシステムは、 _PLD オブジェクトに uservisible ビット (ビット 64) が設定されているかどうかを確認します。 これは、ポートが接続可能で、ユーザーに外部から参照できることを確認するための追加チェックとして行われます。

    ACPI から収集された情報によってデバイスが外部であることが示された場合は、PnP マネージャーによってデバイスのコンテナー ID が生成されます。 この 値は、デバイス の USB シリアル番号のハッシュか、ランダムに生成された値のいずれかです。 Devnode には、このコンテナー ID が割り当てられます。

    メモ オペレーティングシステムによってデバイスがコンピューターの内部にあると判断された場合、devnode は親の devnode のコンテナー ID を継承します。この場合、この例では、コンピューター自体のコンテナー ID です。

  3. デバイスが接続されている USB ポートアドレスと一致する _ADR オブジェクトが ACPI によって返されない場合、PnP マネージャーは devnode のリムーバブル状態に基づいてコンテナー ID を生成します。

    USB ハブドライバーはハブから USB Removeandpowermask 記述子を照会し、デバイスが接続されているポートに DeviceRemovable ビットが設定されているかどうかを確認します。 DeviceRemovable ビットが設定されている場合、ポートに接続されているデバイスはハブから取り外しられます。 DeviceRemovable ビットが設定されていない場合、ポートに接続されているデバイスはハブから削除できません。

    USB バスドライバーは、次の手順に従って devnode の ContainerId を生成する PnP マネージャーに、リムーバブル/非リムーバブルステータスを報告します。

    • 特定のポートに接続されているデバイスがハブから取り外しられていることがハブに示されている場合、このポートに接続されているデバイスがコンピューターの外部にあることが PnP マネージャーによって判断されます。 Devnode に対して生成されるコンテナー ID は、デバイスの USB シリアル番号のハッシュか、ランダムに生成される値です。

    • 指定したポートに接続されているデバイスがハブから取り外し可能でないことがハブに示されている場合、PnP マネージャーは、このポートに接続されているデバイスが多機能デバイスのサブ機能であると判断します。 この場合、devnode は親の devnode のコンテナー ID を継承します。

ACPI 3.0 インターフェイスの詳細については、「 Advanced Configuration And Power Interface Specification Revision 3.0 b」を参照してください。