コンテナー ID の実装のトラブルシューティング
デバイスとプリンターのユーザー インターフェイス (UI) で 1 つしかないのデバイスのインスタンスが 複数表示される場合、デバイスはコンテナー ID の要件を正しく実装していません。 この不適切な実装により、プラグ アンド プレイ (PnP) マネージャーは、1 つ以上のデバイス ノード (devnode) をグループ化して、そのデバイスの追加のデバイス コンテナーを作成します。
このような場合は、次の内容を確認する必要があります。
リムーバブル デバイスの機能は、デバイスに列挙されている各 devnode に対して正しく設定されていますか?
これは、[デバイスとプリンター] UI の複数のデバイス インスタンスが表示される最も一般的な原因です。 デバイスの各 devnode に、リムーバブル デバイス機能が適切に設定されていることを確認します。 デバイスの最上位 (あるいは、 親) devnode はリムーバブルとして報告する必要があり、そのすべての子はリムーバブルではないとして報告する必要があります。 カスタム バス ドライバーの実装では、列挙する devnode のリムーバブル 関係を正しく割り当てる必要があります。
デバイス マネージャーは、これらの問題を診断するための貴重なツールです。 次の手順に従って、完全な devnode 階層を調べることができます。
- [アイコン]を右クリックし、 [管理]をクリックします。 そして、結果の表示に一覧表示されている [システム ツール] から [デバイス マネージャー] を選択します。
- ドロップダウン メニューから [接続で表示] をクリックします。
- デバイスを構成する devnode を見つけます。 devnode ごとに、ノードを右クリックし、[プロパティ] をクリックします 。
- [詳細] タブの [プロパティ] ドロップダウン リストで、[機能] をクリックします。
devnode の機能値の一覧に CM_DEVCAP_REMOVABLE フラグが含まれている場合、devnode はリムーバブルとしてマークされます。 その後、プラグ アンド プレイ (PnP) マネージャーは、devnode とその子ノード用に削除できない新しいデバイス コンテナーを作成します。
リムーバブル デバイス機能の詳細については、「リムーバブル デバイス機能から生成されたコンテナー ID」を参照してください。
デバイス マネージャー の使用の詳細については、「デバイスマネージャーの使用」を参照してください。
デバイスには、コンテナー ID またはその他の一意識別子がハードウェアに含まれていますか?
ハードウェア内のコンテナー ID または一意識別子の形式が、指定されたバスの形式要件に準拠していることを確認します。 詳細については、「バス固有の一意の ID から生成されたコンテナー ID」を参照してください。
デバイスの devnode がカスタム バス ドライバーによって列挙されている場合は、バス ドライバーが BusQueryContainerID の IRP_MN_QUERY_ID 要求に正しく応答することをチェックします。
デバイスは複数のバスで同時にコンピューターに接続されていますか?
デバイスが 2 つ以上のバスによってコンピューターに同時に接続されている場合、デバイスの 2 つ以上のインスタンスが [デバイスとプリンター] UI に表示されることがあります。 これらのインスタンスには、デバイスが接続されているバスごとに 1 つ以上のデバイス インスタンスを持つことができます。 この問題を解決するには、デバイスがコンテナー ID またはデバイス固有の一意識別子を報告し、各バスで同じ値を報告していることを確認します。