次の方法で共有


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

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

構文

DXGKDDI_GETDISPLAYSTATEINTRUSIVE DxgkddiGetdisplaystateintrusive;

NTSTATUS DxgkddiGetdisplaystateintrusive(
  [in]     HANDLE Context,
  [in/out] PDXGKARG_GETDISPLAYSTATEINTRUSIVE pArgs
)
{...}

パラメーター

[in] Context

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

[in/out] pArgs

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

戻り値

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

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

注釈

OS は DxgkDdiGetDisplayStateIntrusive を呼び出して、ユーザーが既に不適切な状態にある場合にドライバーから表示状態情報を収集します。 DxgkDdiGetDisplayStateNonIntrusive とは異なり、ドライバーの DxgkDdiGetDisplayStateIntrusive ルーチンは、ユーザーに表示される副作用を持つより多くの侵入操作を実行できます。 侵入操作は次のように定義されます (非侵入操作には、これらのプロパティはありません)。

  • これにより、ユーザーに表示される副作用 (グリッチ) が発生します (スキャンアウトの一時的な停止や、破壊的なモニター接続チェックなど)。

  • これは低速であり、頻繁に呼び出される場合 (1 秒に複数回) システムまたはディスプレイのパフォーマンスに影響します。

  • ディスプレイ サブシステム (またはその他のサブシステム) の状態を直接または間接的に変更します。

ドライバーは、データを収集するときに、システムの状態を意図的に変更しないでください。

OS では、 DxgkDdiGetDisplayStateNonIntrusive の呼び出しに対して、このルーチンの呼び出し頻度がはるかに低くなります。 ほとんどのエラー シナリオでは、OS はまず DxgkDdiGetDisplayStateNonIntrusive を呼び出し、 DxgkDdiGetDisplayStateIntrusive を呼び出して、侵入型呼び出しの意図しない影響が非侵入データ収集に影響しないようにします。

DXGKRNL は、 NumOfTargets が対応する VidPnTargetId が入力されたモニターが接続されていることを OS が報告するターゲットの数に設定して、このルーチンを呼び出します。 ドライバーが特定のターゲットに接続されているモニターがないと判断した場合は、そのターゲットの ReturnSubStatus をDXGK_DIAG_GETDISPLAYSTATE_MONITOR_NOT_CONNECTEDに設定する必要があります。

注意

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

OS には 、DxgkDdiGetDisplayStateIntrusive が完了するのに十分なタイムアウト (約 5 秒) があり、ドライバーが関連するすべての状態を収集する時間が長くなります。 タイムアウト後、OS はマシンをバグチェックし、ドライバーがこの呼び出しでハングした場合にダンプを収集する可能性があるため、ミニポートは常に時間枠内でこの呼び出しを完了しようとする必要があります。

この DDI の同期レベルは 0 レベルの同期です

要件

要件
サポートされている最小のクライアント Windows 10 バージョン 2004
Header dispmprt.h

こちらもご覧ください

DXGKARG_GETDISPLAYSTATEINTRUSIVE

DxgkDdiCollectDiagnosticInfo

DxgkDdiGetDisplayStateNonIntrusive

DxgkDdiQueryInterface