共用方式為


DXGKDDI_GETDISPLAYSTATEINTRUSIVE回呼函式 (dispmprt.h)

作系統 (OS) 會呼叫 display miniport 驅動程式的 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 例程可以執行對使用者有明顯副作用的更侵入性作業。 入侵作業的定義如下(非侵入式作業沒有任何這些屬性):

  • 它會導致使用者可以看到的副作用(例如暫時停止掃描和破壞性監視器連線檢查)。

  • 速度很慢,如果經常呼叫,就會影響系統或顯示效能(每秒多次)。

  • 它會直接或間接變更顯示子系統的狀態(或任何其他子系統)。

驅動程式不應該在收集數據時刻意變更系統的狀態。

相較於 呼叫 dxgkDdiGetDisplayStateNonIntrusive,OS 會更不常呼叫此例程。 在大部分的錯誤案例中,OS 會先呼叫 DxgkDdiGetDisplayStateNonIntrusive,然後呼叫 DxgkDdiGetDisplayStateIntrusive,以確保入侵呼叫的任何意外效果不會影響非侵入式數據收集。

DXGKRNL 會呼叫此例程,並將 NumOfTargets 設定為作系統報告有與對應 VidPnTargetId 連線的監視器數目 填入的目標數目。 當驅動程式認為指定的目標上沒有連線的監視器時,它應該設定 ReturnSubStatus,讓該目標DXGK_DIAG_GETDISPLAYSTATE_MONITOR_NOT_CONNECTED。

注意

如果在收集資訊時,驅動程式在指定的 vidpntarget 上遇到失敗,它應該使用 ReturnSubStatus 來設定錯誤狀態,並繼續進行下一個 vidpntarget,除非所有路徑都發生失敗,否則不會讓整體呼叫失敗。 驅動程式應該在一些內部錯誤記錄檔中記錄此呼叫期間發生的錯誤,因此當OS呼叫 DxgkDdiCollectDiagnosticInfo 以收集黑箱資訊時,這些錯誤會擷取為內部記錄收集的一部分,以協助 IHD 偵錯。

OS 將有足夠的逾時時間(大約 5 秒),讓 DxgkDdiGetDisplayStateIntrusive 完成,讓驅動程式有更多時間收集所有相關狀態。 逾時之後,如果驅動程式在此呼叫中停止回應,OS 可能會錯誤地檢查計算機並收集傾印,因此迷你埠應該嘗試在時間範圍內一律完成此呼叫。

此 DDI 的同步處理層級 零層級同步處理

要求

要求 價值
最低支援的用戶端 Windows 10 版本 2004
標頭 dispmprt.h

另請參閱

DXGKARG_GETDISPLAYSTATEINTRUSIVE

DxgkDdiCollectDiagnosticInfo

DxgkDdiGetDisplayStateNonIntrusive

DxgkDdiQueryInterface