コールバック関数DXGKDDI_SYSTEM_DISPLAY_ENABLE (dispmprt.h)

現在のディスプレイ デバイスを指定した状態にリセットするようにディスプレイ ミニポート ドライバーを要求するために、オペレーティング システムによって呼び出されます。

Windows 8以降、オペレーティング システムは、システム停止エラーの後のバグチェック操作中にこの関数を呼び出します。

構文

DXGKDDI_SYSTEM_DISPLAY_ENABLE DxgkddiSystemDisplayEnable;

NTSTATUS DxgkddiSystemDisplayEnable(
  [in]  PVOID MiniportDeviceContext,
  [in]  D3DDDI_VIDEO_PRESENT_TARGET_ID TargetId,
  [in]  PDXGKARG_SYSTEM_DISPLAY_ENABLE_FLAGS Flags,
  [out] UINT *Width,
  [out] UINT *Height,
  [out] D3DDDIFORMAT *ColorFormat
)
{...}

パラメーター

[in] MiniportDeviceContext

ディスプレイ アダプターに関連付けられているコンテキスト ブロックへのハンドル。 ディスプレイ ミニポート ドライバーの DxgkDdiAddDevice 関数は、以前は Microsoft DirectX グラフィックス カーネル サブシステムにこのハンドルを提供しました。

[in] TargetId

ディスプレイ デバイスが接続されているディスプレイ アダプター上のビデオの現在のターゲットの識別子を指定するD3DDDI_VIDEO_PRESENT_TARGET_ID値。 この識別子は、 DxgkDdiCommitVidPn の前回の呼び出し中に現在のビデオ 現在のネットワーク (VidPn) 状態に残されたターゲットの場合があります。

TargetId パラメーターの使用の詳細については、次の「Video present target initialization」セクションを参照してください。

[in] Flags

フラグのビットごとの OR を含む値へのポインター。 このメンバーは、オペレーティング システムによって予約されています。

[out] Width

指定したデバイスの表示モードの幅をピクセル単位で指定する UINT 値。

[out] Height

指定したデバイスの表示モードの高さをピクセル単位で指定する UINT 値。

[out] ColorFormat

ディスプレイ デバイスの色形式を指定する D3DDDIFORMAT 値へのポインター。

戻り値

DxgkDdiSystemDisplayEnable は、成功した場合STATUS_SUCCESSを返します。 TargetId パラメーターで指定されたターゲットがディスプレイ デバイスに接続されていない場合、関数は STATUS_NOT_SUPPORTEDを返します。 それ以外の場合は、Ntstatus.h で定義されているエラー コードのいずれかを返します。

注釈

ディスプレイ ミニポート ドライバーで必要な手順

ディスプレイ ミニポート ドライバーは、 DxgkDdiSystemDisplayEnable 関数が呼び出されたときに、次の手順に従う必要があります。
  1. ドライバーは、すべてのグラフィックス処理装置 (GPU) 操作を取り消すか、GPU をアイドル状態にリセットする必要があります。
  2. オペレーティング システムは、 TargetId パラメーターを使用して、ビデオがターゲットに存在することを示します。 ドライバーは、このターゲットに関連付けられているディスプレイの電源をオンにし、表示したままにする必要があります。 ドライバーがディスプレイの電源を入れない場合は、この関数の呼び出しに失敗する必要があります。 このようなエラーの場合、オペレーティング システムは DxgkDdiResetDevice 関数を呼び出し、システムのバグチェックが発生する可能性があります。
  3. ドライバーは、このターゲットに関連付けられているディスプレイの接続をチェックする必要があります。 ターゲットにディスプレイが接続されていない場合、ドライバーはこの関数の呼び出しを完了し、 STATUS_NOT_SUPPORTED エラー コードを返す必要があります。
  4. ドライバーは、ディスプレイ アダプターに接続されている他のすべてのディスプレイへの信号を無効にする必要があります。 これが不可能な場合、ドライバーは他のすべてのディスプレイに空のイメージを配置する必要があります。 これが不可能な場合、ドライバーは画面の最後のイメージを変更せずに残す必要があります。
  5. ドライバーは、指定されたターゲットの現在の表示モードを維持し、この関数呼び出しの一部として、オペレーティング システムにこのモードを提供する必要があります。
  6. ドライバーが現在の表示モードを維持できない場合、またはターゲットがアクティブなトポロジの一部でない場合、ドライバーは、1 ピクセルあたり 24 ビットの形式で少なくとも 640 x 480 ピクセルの表示解像度が可能な別のターゲットにフレーム バッファーを設定する必要があります。 それが不可能な場合、ドライバーはこの関数呼び出しを失敗させることができます。これにより、システムのバグチェックと黒い画面が表示されます。

    ドライバーで線形フレーム バッファー モードを使用する必要はありません。 ただし、ドライバーは、D3DDDIFORMAT列挙の D3DDDIFMT_A8R8G8B8 形式を持つソースからこのフレーム バッファーへの書き込み操作 サポートする必要があります。

ソース イメージの制限

ドライバーがオペレーティング システムに表示機能を制御すると、オペレーティング システムは DxgkDdiSystemDisplayWrite 関数を呼び出して画面イメージを更新し、指定したソースから DxgkDdiSystemDisplayEnable 関数によってリセットされた画面にイメージのブロックを書き込むことができます。

DxgkDdiSystemDisplayWrite は、ソース イメージの開始アドレスとストライド、幅、高さをドライバーに提供します。 ソース イメージの色形式は常に D3DDDIFMT_X8R8G8B8。 オペレーティング システムは、ソース イメージが非ページ メモリ内にあることを保証します。

ドライバーは、DxgkDdiSystemDisplayWrite 関数の PositionX パラメーターと PositionY パラメーターで指定された位置から、現在の画面にこのソース イメージを書き込む必要があります。

CPU を使用してソースからフレーム バッファーにイメージを書き込むことをお勧めします。これは、GPU が不明な状態になるタイムアウト 検出および回復 (TDR) インスタンスが繰り返し発生する可能性があるためです。

非ページ メモリを使用する

この関数が呼び出されている間は、Windows カーネル モード関数を使用できない場合があります。

DxgkDdiSystemDisplayEnable は任意の IRQL で呼び出すことができるため、非ページ メモリに存在する必要があります。 DxgkDdiSystemDisplayEnable は、ページング可能メモリ内のコードを呼び出す必要があり、ページング可能メモリ内のデータを操作してはなりません。

要件

要件
サポートされている最小のクライアント Windows 8
サポートされている最小のサーバー Windows Server 2012
対象プラットフォーム デスクトップ
Header dispmprt.h
IRQL 任意のレベル (「解説」セクションを参照)

こちらもご覧ください

D3DDDIFORMAT

DxgkCbAcquirePostDisplayOwnership

DxgkDdiAddDevice

DxgkDdiResetDevice

DxgkDdiStopDeviceAndReleasePostDisplayOwnership

DxgkDdiSystemDisplayWrite