次の方法で共有


間接ディスプレイ ドライバーの概要

間接ディスプレイ ドライバー (IDD) モデルは、従来の GPU ディスプレイ出力に接続されていないモニターをサポートするための単純なユーザー モード ドライバー モデルです。 IDD が必要な一般的なシナリオには、次のようなものがあります。

  • ディスプレイ出力をネットワーク経由でリモート クライアント (リモート ディスプレイ) にストリームすること。
  • 仮想デスクトップ環境 (仮想ディスプレイ) などのアプリケーション用に仮想モニターを作成すること。
  • 通常のモニター (VGA、DVI、HDMI、DP など) が接続されている PC に USB を使用してドングルを接続します。

IDD の実装

IDD は、デバイス用のサード パーティ提供 の UMDF ドライバーです。 IddCx (間接ディスプレイ ドライバー クラス eXtension) によって公開される機能を使用して IDD を開発し、次の方法で Windows グラフィックス サブシステムとインターフェイスすることができます。

  • 間接ディスプレイ デバイスを表すグラフィックス アダプターを作成します。
  • システムに接続されているモニターとシステムから切断されているモニターを報告します。
  • 接続されているモニターの説明を入力します。
  • 使用可能な表示モードを提供します。
  • ハードウェア マウス カーソル、ガンマ、I2C 通信、保護されたコンテンツなど、他の表示機能をサポートします。
  • デスクトップ イメージを処理してモニターに表示します。

IDD は UMDF ドライバーであるため、デバイス通信、電源管理、プラグ アンド プレイなど、すべての UMDF 機能の実装も担当します。

IDD は、ユーザー セッションで実行されているコンポーネントなしで セッション 0 で実行されるため、ドライバーの不安定性はシステム全体の安定性に影響しません。

次の図は、アーキテクチャの概要を示しています。

UMDF アーキテクチャ内の間接ディスプレイ ドライバーを示す図。

ユーザー モード モデル

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 実装を提供しています。 このサンプルでは、モニターを接続する方法、モード セットに応答する方法、フレームを受信する方法を示します。