共用方式為


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 例程可以執行對使用者具有可見副作用的更多干擾作業。 干擾作業的定義如下, (非干擾作業沒有任何這些屬性) :

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

  • 如果呼叫經常 (第二次) ,則會影響系統或顯示效能。

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

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

相較於 對 DxgkDdiGetDisplayStateNonIntrusive 的呼叫,OS 會比較不常呼叫此例程。 在大部分的錯誤案例中,OS 會先呼叫 DxgkDdiGetDisplayStateNonIntrusive ,然後呼叫 DxgkDdiGetDisplayStateIntrusive ,以確保干擾式呼叫的任何非預期效果不會影響非干擾的數據收集。

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

注意

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

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

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

規格需求

需求
最低支援的用戶端 Windows 10 (版本 2004)
標頭 dispmprt.h

另請參閱

DXGKARG_GETDISPLAYSTATEINTRUSIVE

DxgkDdiCollectDiagnosticInfo

DxgkDdiGetDisplayStateNonIntrusive

DxgkDdiQueryInterface