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
DxgkDdiGetDisplayStateIntrusiveの
DxgkDdiQueryInterfaceの