間接ディスプレイ ドライバー (IDD) モデルは、従来の GPU ディスプレイ出力に接続されていないモニターをサポートするための単純なユーザー モード ドライバー モデルです。 IDD が必要な一般的なシナリオには、次のようなものがあります。
- ディスプレイ出力をネットワーク経由でリモート クライアント (リモート ディスプレイ) にストリームすること。
- 仮想デスクトップ環境 (仮想ディスプレイ) などのアプリケーション用に仮想モニターを作成すること。
- 通常のモニター (VGA、DVI、HDMI、DP など) が接続されている USB 経由でドングルを PC に接続する。
IDD の実装
IDD は、デバイス用のサード パーティ提供 の UMDF ドライバーです。 IDD は、 IddCx (間接ディスプレイ ドライバー クラス eXtension) によって公開される機能を使用して、次の方法で Windows グラフィックス サブシステムとインターフェイスを作成できます。
- 間接ディスプレイ デバイスを表すグラフィックス アダプターを作成します。
- システムに接続されているモニターとシステムから切断されているモニターを報告します。
- 接続されているモニターの説明を入力します。
- 使用可能な表示モードを提供します。
- ハードウェア マウス カーソル、ガンマ、I2C 通信、保護されたコンテンツなど、他の表示機能をサポートします。
- デスクトップ イメージを処理してモニターに表示します。
IDD は UMDF ドライバーであるため、デバイス通信、電源管理、プラグ アンド プレイなど、すべての UMDF 機能の実装も担当します。
IDD は、ユーザー セッションで実行されているコンポーネントなしで セッション 0 で実行されるため、ドライバーの不安定性はシステム全体の安定性に影響しません。
次の図は、アーキテクチャの概要を示しています。
ユーザー モード モデル
IDD はユーザー モード モデルを使用し、カーネル モード コンポーネントをサポートしていません。 このモデルでは、ドライバーは任意の DirectX API を使用してデスクトップ イメージを処理できます。 IddCx は、DirectX サーフェイスでエンコードするデスクトップ イメージを提供します。
ドライバーでは、GDI、ウィンドウ化 API、OpenGL、Vulkan など、ドライバーの使用に適していないユーザーモード API を呼び出さないでください。
複数の Windows プラットフォームで使用できるように、 ユニバーサル Windows ドライバー として IDD をビルドします。
ビルド時において。
- UMDF IDD は、ビルド対象の IddCx のバージョンを宣言します。
- OS は、ドライバーが読み込まれるときに IddCx の正しいバージョンが読み込まれるようにします。
IddCx コールバックと関数の名前付け規則
| プレフィックス | タイプ | Notes |
|---|---|---|
| EVT_IDD_CX_XXX | IDD コールバック関数 | IDD は、 EVT_IDD_CX_ADAPTER_COMMIT_MODESなどのIddCx 固有のコールバックと、 EVT_WDF_DEVICE_D0_EXITなどの関連する WDF コールバックの両方を実装します。 |
| IddCxXxx | 機能 | IDD が呼び出すことができるシステム提供の IddCx クラス拡張関数。たとえば、 IddCxAdapterInitAsync です。 |
| PFN_IDDCX_XXX | IddCx 関数へのポインター | IDD では、これらのポインターは使用されません。 代わりに、ドライバーは同等の IddCxXxx 関数を使用する必要があります。 |
サンプル コード
Microsoft では、 Windows Driver Samples GitHubでサンプル IDD 実装を提供しています。 このサンプルでは、モニターを接続する方法、モード セットに応答する方法、フレームを受信する方法を示します。