モニターのホット プラグ検出
このページの情報は、WDDM バージョン 2.2 より前のバージョンを使用して実装されているグラフィックス ドライバーに適用されます。
ディスプレイ アダプターのビデオ出力は、ディスプレイ アダプターの子デバイスと見なされます。 出力に接続するモニターまたはその他の外部ディスプレイ デバイスは、子デバイスとは見なされません。 初期化中、ディスプレイ ミニポート ドライバーの DxgkDdiQueryChildRelations 関数により、それぞれの子デバイスに種類と HPD 認識値が割り当てられます。 種類は、以下の DXGK_CHILD_DEVICE_TYPE 列挙子のいずれかが割り当てられます。
TypeVideoOutput
TypeOther
HPD 認識値は、以下の DXGK_CHILD_DEVICE_HPD_AWARENESS 列挙子のいずれかが割り当てられます。
HpdAwarenessAlwaysConnected
HpdAwarenessInterruptible
HpdAwarenessPolled
種類が TypeVideoOutput で、HPD 認識値が HpdAwarenessAlwaysConnected 以外である子デバイスは、ビデオ出力コネクタと呼ばれます。
ディスプレイ ミニポート ドライバー側でモニターがビデオ出力に接続されているかどうかを判断できない場合、ドライバーは、HPD 認識値が HpdAwarenessInterruptible に設定されている割り込み可能デバイスの動作をエミュレートします。 ユーザーがテレビ ビューに切り替えるキーボード ショートカットを入力した場合など、割り込み可能なモニターがビデオ出力に接続されることをディスプレイ ミニポート ドライバー側で示す必要がある場合には、ドライバーは、ChildStatus.HotPlug.Connected が TRUE に設定された DxgkCbIndicateChildStatus 関数を呼び出します。
特定の時点で、オペレーティング システムは、HPD 認識値が HpdAwarenessPolled であるすべてのビデオ出力コネクタの状態を報告するよう、ディスプレイ ミニポート ドライバーに要求します。 決まったポーリング間隔はありませんが、使用可能なディスプレイ デバイスとモードの一覧の更新が特に必要な場合に要求が行われます。 たとえば、ノート PC がドッキングされている場合、オペレーティング システムは、モニターがドッキング ステーション上のビデオ出力に接続されているかどうかを把握しておく必要があります。 オペレーティング システムは、HPD 認識値が HpdAwarenessPolled の、それぞれの子デバイスのディスプレイ ミニポート ドライバーに対して DxgkDdiQueryChildStatus 関数を呼び出すことによって、この要求を行います。
HPD 認識値が HpdAwarenessInterruptible であるビデオ出力コネクタについては、ディスプレイ ミニポート ドライバーは、外部ディスプレイ デバイスがホット プラグされた、または取り外されたときにオペレーティング システムに通知する役割を担います。 外部ディスプレイ デバイスが特定のビデオ出力に接続された、または特定のビデオ出力から取り外されたことを報告するために、ディスプレイ ミニポート ドライバーの割り込み処理コードによって、ディスプレイ ポート ドライバーの DxgkCbIndicateChildStatus 関数が呼び出されます。 ノート PC がドッキングされている場合は、HPD 認識値が HpdAwarenessInterruptible であるドッキング ステーション上のそれぞれのビデオ出力に対して、ディスプレイ ミニポート ドライバーの DxgkDdiNotifyAcpiEvent 関数で、DxgkCbIndicateChildStatus を呼び出す必要があります。
ノート PC がドッキングされているときに、HPD 認識値が HpdAwarenessPolled であるコネクタが使用できなくなった場合 (つまりカバーが閉じられた場合)、コネクタが切断されたことを報告するために、ディスプレイ ミニポート ドライバーの DxgkDdiNotifyAcpiEvent 関数で DxgkCbIndicateChildStatus を呼び出す必要があります。
ポータブル コンピューター上の統合型ディスプレイ パネルに関連付けられているビデオ出力は、特殊なケースです。 オペレーティング システムは、ポータブル コンピューターのカバーが開いているか閉じているかを把握しておく必要があるので、カバーが開いているという意味で接続という概念が、カバーが閉じているという意味で切断という概念が使用されます。 ポータブル コンピューター上の統合型ディスプレイに関連付けられているビデオ出力は、HPD 認識値が HpdAwarenessInterruptible になります。 ただしこれは、カバーの開閉時にディスプレイ アダプターが割り込みを生成するという意味ではありません。 正確には、カバーの開閉時に割り込みを生成するのは ACPI BIOS です。 その割り込みにより呼び出されたディスプレイ ミニポート ドライバーの DxgkDdiNotifyAcpiEvent 関数が、DxgkCbIndicateChildStatus を呼び出して、カバーの状態 (開いているか閉じているか) が報告されます。 ディスプレイ ミニポート ドライバーは、DXGK_CHILD_STATUS 構造体の HotPlug.Connected メンバーを TRUE (開いている) または FALSE (閉じている) に設定し、DXGK_CHILD_STATUS 構造体を DxgkCbIndicateChildStatus に渡すことによって、カバーの状態を報告します。
モニターが HD15 コネクタに接続される場合は、以下の解説のように進みます。コネクタの HPD 認識値は HpdAwarenessPolled であると仮定します。
モニターが、ディスプレイ・アダプター上の HD15 コネクタに接続されます。 ディスプレイ アダプターは、これをホット プラグ イベントとして検出しません。
その後どこかの時点で、ユーザー モード アプリケーションによってディスプレイ デバイスの一覧が要求されます。
HPD 認識値が HpdAwarenessPolled であるディスプレイ アダプター上のそれぞれのビデオ出力コネクタに対して、外部ディスプレイ デバイスが接続されているかどうかを判断するために、VidPN マネージャーによってディスプレイ ミニポート ドライバーの DxgkDdiQueryChildStatus 関数が呼び出されます。 HD15 コネクタに対して DxgkDdiQueryChildStatus が呼び出されると、外部モニターが実際に接続されていることが報告されます。
モニターが DVI コネクタに接続される場合は、以下の解説のように進みます。コネクタの HPD 認識値は HpdAwarenessInterruptible であると仮定します。
フラット パネルが、ディスプレイ アダプター上の DVI コネクタに接続されます。
ディスプレイ アダプターがホット プラグ イベントを検出し、割り込みを生成します。
この割り込みは、ディスプレイ ミニポート ドライバーの DxgkDdiInterruptRoutine 関数によって処理され、遅延プロシージャ呼び出し (DPC) のスケジュールが設定されます。 続けて、ディスプレイ ミニポート ドライバーの DPC コールバック関数が呼び出されます。
DPC コールバック関数によって DXGK_CHILD_STATUS 構造体がディスプレイ ポート ドライバーの の DxgkCbIndicateChildStatus 関数に渡され、DVI コネクタの状態が報告されます。 DXGK_CHILD_STATUS 構造体の ChildUid メンバーによって DVI コネクタが特定され、HotPlug.Connected メンバー (このケースでは TRUE に設定) によって、外部ディスプレイ デバイスが接続されていることが示されます。
DVI コネクタが、DVI、HD15、S ビデオの 3 つの分岐があるドングルをサポートしていると仮定します。 このケースでは、ディスプレイ ミニポート ドライバーには、1 つの物理 DVI コネクタに関連付けられている前述の 3 つの子デバイス、DVI-on-DVI、HD15-on-DVI、S-video-on-DVI があります。 それぞれの子デバイスに、種類 TypeVideoOutput と、HPD 認識値 HpdAwarenessInterruptible が割り当てられます。 モニターがドングルの HD15 ブランチに接続される場合は、以下の解説のように進みます。
ディスプレイ アダプターがホット プラグ イベントを検出し、割り込みを生成します。
この割り込みは、ディスプレイ ミニポート ドライバーの DxgkDdiInterruptRoutine 関数によって処理され、遅延プロシージャ呼び出し (DPC) のスケジュールが設定されます。 続けて、ディスプレイ ミニポート ドライバーの DPC コールバック関数が呼び出されます。
DPC コールバック関数は、ドングルの HD15 ブランチ (HD15-on-DVI) でホット プラグ イベントがあったと判断します。
DPC コールバック関数によって DXGK_CHILD_STATUS 構造体が DxgkCbIndicateChildStatus に渡され、HD15 on-DVI ビデオ出力の状態が報告されます。 DXGK_CHILD_STATUS 構造体の ChildUid メンバーによってビデオ出力が特定され、HotPlug.Connected メンバー (このケースでは TRUE に設定) によって、外部ディスプレイ デバイスが接続されていることが示されます。
ノート PC でカバーが閉じられた場合は、以下の説明のように進みます。
ポータブル コンピューターでカバーが閉じられると、ACPI イベントが生成されます。 続けてディスプレイ ミニポート ドライバーの DxgkDdiNotifyAcpiEvent 関数が呼び出されます。
DxgkDdiNotifyAcpiEvent によって DXGK_CHILD_STATUS 構造体がディスプレイ ポート ドライバーの DxgkCbIndicateChildStatus 関数に渡され、内蔵ディスプレイ パネルに関連付けられている子デバイスの状態が報告されます。 具体的には、DxgkDdiNotifyAcpiEvent によって、DXGK_CHILD_STATUS 構造体の HotPlug.Connected メンバーが FALSE に設定されます。