IddCx オブジェクト
IddCx (間接ディスプレイ ドライバー クラス eXtension) は、拡張可能な UMDF オブジェクト モデルを使用して間接ディスプレイ デバイスのコンポーネントを表します。 UMDF オブジェクト モデルを使用すると、ドライバー固有のストレージを各 IddCx (そのため UMDF) オブジェクトに関連付けられます。 詳細については、 「UMDF のオブジェクト モデル」 を参照してください。
IDD オブジェクトの作成順序は次のとおりです。
- ドライバーは、最初に IDDCX_ADAPTER オブジェクトを作成します。
- その後、ドライバーによって IDDCX_MONITOR オブジェクトが作成されます。
- IDDCX_ADAPTER と IDDCX_MONITOR オブジェクトが作成されると、OS は IDDCX_SWAPCHAIN と IDDCX_OPMCTX オブジェクトを作成し、それらをドライバーに送信します。
以下のシナリオは、こうしたオブジェクトの詳細を示しています。
IDDCX_ADAPTER
このオブジェクトは、2 段階のプロセスでドライバーによって作成された 1 つの論理表示アダプターを表します。
- ドライバーは、 IddCxAdapterInitAsync コールバック関数を呼び出します。
- OS は、ドライバーの EvtIddCxAdapterInitFinished DDI を呼び出して初期化を完了します。
IDD モデルには、明示的な破棄アダプター コールバックがありません。 アダプターの初期化シーケンスが正常に完了すると、初期化時に渡された UMDF デバイスが停止するまで、アダプターは有効です。 アダプターを作成するときに、ドライバーは、間接ディスプレイ アダプターに関する静的なアダプター情報を提供します。
多機能デバイスの処理
最も単純なケースでは、接続された間接ディスプレイ デバイスのプラグ アンド プレイ サブシステムによって作成された UMDF デバイス オブジェクトと、間接ディスプレイ ドライバー (IDD) が作成する IDDCX_ADAPTER オブジェクトの間に 1 対 1のマッピングがあります。
1 つの間接ディスプレイ ドングルに複数のプラグ アンド プレイ デバイスが含まれている場合、より複雑なシナリオが発生する可能性があります。 たとえば、間接表示ソリューションには、マイク (オーディオ ドライバー) やカメラ (ビデオ ドライバー) などの複数の PnP デバイス機能がある場合があります。 このような状況では、各 PnP デバイス用に作成された複数の UMDF デバイス オブジェクトに対して 1 つの IDDCX_ADAPTER オブジェクトを作成するのは IDD の責任です。 このシナリオでは、ドライバーは次の点を考慮する必要があります。
- IDDCX_ADAPTER は、間接表示ソリューションを構成するすべての PnP デバイスが正常に開始された後にのみ作成する必要があります。
- ドライバーは、アダプターの作成時に 1 つの WDFDEVICE を渡す必要があります。そのため、渡す UMDF デバイスを決定するロジックが必要です。
- 間接ディスプレイ アダプターを構成するデバイスにハードウェア エラーがある場合、ドライバーは、アダプターを構成するすべてのデバイスをエラーとして報告する必要があります。
IDDCX_MONITOR
このオブジェクトは、間接ディスプレイ アダプターのコネクタのいずれかに接続されている特定のモニターを表します。
ドライバーは、次の 2 段階のプロセスでモニター オブジェクトを作成します。
- 最初に IddCxMonitorCreate コールバックを呼び出して、 IDDCX_MONITOR オブジェクトを作成します。
- 次に、 IddCxMonitorArrival コールバックを呼び出して、モニターの到着を完了します。
モニターが取り外されると、ドライバーは IddCxMonitorDeparture コールバックを呼び出して、モニターが取り外されたことを報告します。これにより、 IDDCX_MONITOR オブジェクトが破棄されます。 同じモニターが接続されていない状態で再接続された場合でも、 IddCxMonitorDeparture/IddCxMonitorArrival シーケンスを再度呼び出す必要があります。
IDDCX_MONITOR は、 IDDCX_ADAPTER オブジェクトの子です。
IDDCX_SWAPCHAIN
このオブジェクトは、接続されたモニターに表示するデスクトップ イメージを提供する スワップチェーン を表します。 スワップチェーンには複数のバッファーがあり、IDD が別のバッファーにアクセスしている間に OS が 1 つのバッファー内の次のデスクトップ イメージを構成できるようにします。 IDDCX_SWAPCHAIN は IDDCX_MONITOR の子であるため、特定のモニターに割り当てられるスワップチェーンはいつでも 1 つだけです。
OS は、 IDDCX_SWAPCHAIN オブジェクトを作成して破棄し、 EvtIddCxMonitorAssignSwapChain と EvtIddCxMonitorUnassignSwapChain Ddi 呼び出しを使用して、それらをモニターに割り当てる/割り当て解除します。
IDDCX_OPMCTX
このオブジェクトは、アプリケーションが 1 つのモニターで出力保護を制御するために使用できる、単一のアプリケーション OPM コンテキストからのアクティブな Output Protection Manager (OPM) コンテキストを表します。 複数のOPMコンテキストを特定のモニターで同時にアクティブにすることができます。 OS は、ドライバーの EvtIddCxMonitorOPMCreateProtectedOutput および EvtIddCxMonitorOPMDestroyProtectedOutput DDI 呼び出しを使用して、OPM コンテキストを作成および破棄するためにドライバーを呼び出します。