次の方法で共有


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

オペレーティング システムは、ディスプレイ ミニポート ドライバーの DxgkDdiGetDisplayStateNonIntrusive ルーチンを呼び出して、ドライバーから表示状態情報を非intrusive に収集します。

構文

DXGKDDI_GETDISPLAYSTATENONINTRUSIVE DxgkddiGetdisplaystatenonintrusive;

NTSTATUS DxgkddiGetdisplaystatenonintrusive(
  [in]     HANDLE Context,
  [in/out] PDXGKARG_GETDISPLAYSTATENONINTRUSIVE pArgs
)
{...}

パラメーター

[in] Context

DxgkDdiQueryInterfaceによって返されるプライベート コンテキストへのポインター。

[in/out] pArgs

DXGKARG_GETDISPLAYSTATENONINTRUSIVE 構造体へのポインター。

戻り値

DxgkDdiGetDisplayStateNonIntrusive 成功した場合、STATUS_SUCCESSを返します。 それ以外の場合は、次のいずれかのエラー コードが返されます。

エラー コード 意味
STATUS_DRIVER_INTERNAL_ERROR ドライバー内で一般的なソフトウェア エラーが発生しました。
STATUS_ACCESS_DENIED ハードウェアは現在、他のスレッドによって使用されており、この DDI にアクセスできません。
STATUS_DEVICE_HARDWARE_ERROR 一般的な HW エラーが発生しました。
STATUS_DEVICE_POWERED_OFF デバイスの電源がオフになっています。

備考

OS は DxgkDdiGetDisplayStateNonIntrusive 呼び出して、ドライバーから表示状態情報を収集します。 DxgkDdiGetDisplayStateIntrusiveとは異なり、ドライバーの DxgkDdiGetDisplayStateNonIntrusive ルーチンは、ユーザーに目に見える副作用を引き起こす操作を実行しないでください。コレクション プロセスは比較的高速である必要があります (理想的には数ミリ秒以内)。 このルーチンの呼び出し頻度は比較的高くなります。 OS では、不適切なユーザー状態を診断するために呼び出されるのとは別に、デバッグ目的でドライバーから過去の状態情報を記録するためにこのルーチンを使用する場合もあります。

プラットフォーム固有の実装では、ドライバーが DxgkDdiGetDisplayStateNonIntrusive の呼び出しの一環として侵入操作を実行する必要があるまれなケースでは、ドライバーは操作を実行する必要がありますが、それに応じて、DXGK_DIAG_GETDISPLAYSTATE_CAUSED_GLITCHまたはDXGK_DIAG_GETDISPLAYSTATE_CHANGED_DISPLAY_STATEに pArgs->ReturnSubStatus 設定する必要があります。 ReturnSubStatus 値に基づいて、オペレーティング システム (OS) は、特定のシステムでのエラー シナリオでのみこのルーチンを呼び出します。

OS は DxgkDdiGetDisplayStateNonIntrusive を頻繁に呼び出して (定期的または他の一般的に発生するイベント)、デバッグ目的でドライバーの状態データを収集し、履歴タイムラインを確認します。 OS は、DxgkDdiGetDisplayStateIntrusiveを呼び出して、より詳細な情報を収集する前に、特定のエラー シナリオ (黒い画面など) でもこのルーチンを呼び出します。 この呼び出しの頻度が考えられるため、ドライバーはできるだけ早く完了する必要があります。 OS は、指定されたグラフィックス アダプターでサポートされているターゲットの最大数に設定 NumOfTargets を使用してこの DDI を呼び出し、VidPnTargetId 入力します。 ミニポート ドライバーは、実際にモニターが接続されているターゲットの表示状態情報のみを入力する必要があります。 モニターが接続されていない vidpntarget の場合、ミニポートはDXGK_DIAG_DISPLAY_CONNECTIVITYを入力するだけで、OS はそのターゲットの他のすべてのフィールドを無視します。

手記

ドライバーは、エラー状態を報告するために ReturnSubStatus のみを使用し、モニターの接続状態を報告するためにDXGK_DIAG_GETDISPLAYSTATE_MONITOR_NOT_CONNECTEDを使用しないようにする必要があります。 DXGK_DIAG_GETDISPLAYSTATE_MONITOR_NOT_CONNECTEDの主な目的は、OS が監視接続について要求しない侵入的な呼び出しです。

情報の収集中に特定の vidpntarget でエラーが発生した場合は、ReturnSubStatus を使用してエラー状態を設定し、次の vidpntarget に進み、すべてのパスが失敗しない限り、全体的な呼び出しに失敗しないようにする必要があります。 ドライバーは、この呼び出し中に発生したエラーを一部の内部エラー ログに記録するのが理想的です。これにより、OS がブラック ボックス情報を収集するために DxgkDdiCollectDiagnosticInfo を呼び出すと、これらのエラーが内部ログ コレクションの一部としてキャプチャされ、デバッグ中に IHV が役立ちます。

この DDI の同期レベルは、ゼロ レベルの同期です。

必要条件

要件 価値
サポートされる最小クライアント Windows 10 バージョン 2004
ヘッダー dispmprt.h

関連項目

DXGKARG_GETDISPLAYSTATENONINTRUSIVE

DxgkDdiCollectDiagnosticInfo

DxgkDdiGetDisplayStateIntrusive

DxgkDdiQueryInterface