間接ディスプレイ ドライバーの概要
間接ディスプレイ ドライバー (IDD) モデルは、従来の GPU ディスプレイ出力に接続されていないモニターをサポートするための単純なユーザー モード ドライバー モデルです。 IDD が必要な一般的なシナリオには、次のようなものがあります。
- ディスプレイ出力をネットワーク経由でリモート クライアント (リモート ディスプレイ) にストリームすること。
- 仮想デスクトップ環境 (仮想ディスプレイ) などのアプリケーション用に仮想モニターを作成すること。
- 通常のモニター (VGA、DVI、HDMI、DP など) が接続されている PC に USB を使用してドングルを接続します。
IDD の実装
IDD は、デバイス用のサード パーティ提供 の UMDF ドライバーです。 IddCx (間接ディスプレイ ドライバー クラス eXtension) によって公開される機能を使用して IDD を開発し、次の方法で Windows グラフィックス サブシステムとインターフェイスすることができます。
- 間接ディスプレイ デバイスを表すグラフィックス アダプターを作成します。
- システムに接続されているモニターとシステムから切断されているモニターを報告します。
- 接続されているモニターの説明を入力します。
- 使用可能な表示モードを提供します。
- ハードウェア マウス カーソル、ガンマ、I2C 通信、保護されたコンテンツなど、他の表示機能をサポートします。
- デスクトップ イメージを処理してモニターに表示します。
IDD は UMDF ドライバーであるため、デバイス通信、電源管理、プラグ アンド プレイなど、すべての UMDF 機能の実装も担当します。
IDD は、ユーザー セッションで実行されているコンポーネントなしで セッション 0 で実行されるため、ドライバーの不安定性はシステム全体の安定性に影響しません。
次の図は、アーキテクチャの概要を示しています。
ユーザー モード モデル
IDD は、カーネル モード コンポーネントをサポートしていないユーザー モードのみのモデルです。 そのため、ドライバーはデスクトップ イメージを処理するために DirectX API を使用できます。 実際、IddCx は DirectX サーフェイスでエンコードするデスクトップ イメージを提供します。
ドライバーでは、GDI、ウィンドウ化 API、OpenGL、Vulkan など、ドライバーの使用に適していないユーザーモード API を呼び出さないでください。
IDD は、複数の Windows プラットフォームで使用できるように、 ユニバーサル Windows ドライバー として構築する必要があります。
ビルド時において。
- 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 実装を提供しています。 このサンプルでは、モニターを接続する方法、モード セットに応答する方法、フレームを受信する方法を示します。