Condividi tramite


DXGKDDI_GETDISPLAYSTATEINTRUSIVE funzione di callback (dispmprt.h)

Il sistema operativo chiama una routine DxgkDdiGetDisplayStateNonIntrusive per visualizzare le informazioni sullo stato dal driver.

Sintassi

DXGKDDI_GETDISPLAYSTATEINTRUSIVE DxgkddiGetdisplaystateintrusive;

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

Parametri

[in] Context

Puntatore a un contesto privato restituito da DxgkDdiQueryInterface.

[in/out] pArgs

Puntatore a una struttura DXGKARG_GETDISPLAYSTATEINTRUSIVE .

Valore restituito

DxgkDdiGetDisplayStateIntrusive restituisce STATUS_SUCCESS se ha esito positivo. In caso contrario, restituisce un codice di errore, ad esempio uno dei seguenti.

Codice di errore Significato
STATUS_DRIVER_INTERNAL_ERROR Si è verificato un errore software generico all'interno del driver.
STATUS_ACCESS_DENIED L'hardware è attualmente usato da altri thread e questo DDI non può accedervi.
STATUS_DEVICE_HARDWARE_ERROR Errore HW generico.
STATUS_DEVICE_POWERED_OFF Il dispositivo è disattivato.

Commenti

Il sistema operativo chiama DxgkDdiGetDisplayStateIntrusive per raccogliere informazioni sullo stato visualizzato dal driver quando l'utente è già in uno stato non valido. A differenza di DxgkDdiGetDisplayStateNonIntrusive, la routine DxgkDdiGetDisplayStateIntrusive può eseguire operazioni più intrusive che hanno effetti collaterali visibili all'utente. Un'operazione intrusiva è definita come segue (le operazioni non intrusive non hanno alcuna di queste proprietà):

  • Causa effetti collaterali (glitch) visibili all'utente (ad esempio arresta temporaneamente l'analisi e il controllo della connettività di monitoraggio distruttivo).

  • È lento e influisce sulle prestazioni del sistema o dello schermo se viene chiamato spesso (più volte in un secondo).

  • Modifica lo stato del sottosistema di visualizzazione (o qualsiasi altro sottosistema) direttamente o indirettamente.

Il driver non deve modificare lo stato del sistema intenzionalmente durante la raccolta dei dati.

Il sistema operativo chiamerà questa routine molto meno frequentemente rispetto alle chiamate a DxgkDdiGetDisplayStateNonIntrusive. Nella maggior parte degli scenari di errore, il sistema operativo chiamerà prima DxgkDdiGetDisplayStateNonIntrusive e quindi chiama DxgkDdiGetDisplayStateIntrusive per assicurarsi che qualsiasi effetto non intenzionale della chiamata intrusiva non influisca sulla raccolta di dati non intrusiva.

DXGKRNL chiamerà questa routine con NumOfTargets impostata sul numero di destinazioni in cui il sistema operativo segnala che è presente un monitoraggio connesso con vidPnTargetId corrispondente compilato. Quando il driver ritiene che non ci sia alcun monitoraggio connesso a una determinata destinazione, deve impostare ReturnSubStatus per tale destinazione da DXGK_DIAG_GETDISPLAYSTATE_MONITOR_NOT_CONNECTED.

Nota

Se il driver verifica un errore in un determinato vidpntarget durante la raccolta di informazioni, deve usare ReturnSubStatus per impostare lo stato di errore e procedere al vidpntarget successivo e non eseguire la chiamata complessiva a meno che non si verifichino errori relativi a tutti i percorsi. I driver devono registrare idealmente errori durante questa chiamata in alcuni log errori interni in modo che quando il sistema operativo chiama DxgkDdiCollectDiagnosticInfo per la raccolta di informazioni sulla casella nera, questi errori vengono acquisiti come parte di una raccolta di log interna per consentire il debug di IHV.

Il sistema operativo avrà un timeout sufficiente (circa 5 secondi) per DxgkDdiGetDisplayStateIntrusive per completare, dando al driver più tempo per raccogliere tutti gli stati pertinenti. Dopo un timeout, il sistema operativo potrebbe controllare il computer e raccogliere un dump se il driver si blocca in questa chiamata, quindi il miniport dovrebbe provare a completare sempre questa chiamata entro l'intervallo di tempo.

Il livello di sincronizzazione per questo DDI è la sincronizzazione a livello zero.

Requisiti

Requisito Valore
Client minimo supportato Windows 10, versione 2004
Intestazione dispmprt.h

Vedi anche

DXGKARG_GETDISPLAYSTATEINTRUSIVE

DxgkDdiCollectDiagnosticInfo

DxgkDdiGetDisplayStateNonIntrusive

DxgkDdiQueryInterface