Partager via


DXGKDDI_GETDISPLAYSTATENONINTRUSIVE fonction de rappel (dispmprt.h)

Le système d’exploitation appelle la routine d’affichage du pilote miniport DxgkDdiGetDisplayStateNonIntrusive routine pour collecter de manière nontrusive les informations d’état d’affichage du pilote.

Syntaxe

DXGKDDI_GETDISPLAYSTATENONINTRUSIVE DxgkddiGetdisplaystatenonintrusive;

NTSTATUS DxgkddiGetdisplaystatenonintrusive(
  [in]     HANDLE Context,
  [in/out] PDXGKARG_GETDISPLAYSTATENONINTRUSIVE pArgs
)
{...}

Paramètres

[in] Context

Pointeur vers un contexte privé retourné par DxgkDdiQueryInterface.

[in/out] pArgs

Pointeur vers une structure DXGKARG_GETDISPLAYSTATENONINTRUSIVE.

Valeur de retour

DxgkDdiGetDisplayStateNonIntrusive retourne STATUS_SUCCESS si elle réussit. Sinon, il retourne un code d’erreur tel que l’un des éléments suivants.

Code d’erreur Signification
STATUS_DRIVER_INTERNAL_ERROR Une erreur logicielle générique s’est produite à l’intérieur du pilote.
STATUS_ACCESS_DENIED Le matériel est actuellement utilisé par d’autres threads et cette DDI ne peut pas y accéder.
STATUS_DEVICE_HARDWARE_ERROR Une erreur HW générique s’est produite.
STATUS_DEVICE_POWERED_OFF L’appareil est éteint.

Remarques

Le système d’exploitation appelle DxgkDdiGetDisplayStateNonIntrusive pour collecter les informations d’état d’affichage du pilote. Contrairement à DxgkDdiGetDisplayStateIntrusive, le du pilote DxgkDdiGetDisplayStateNonIntrusive routine ne doit pas effectuer d’opérations qui provoquent des effets secondaires visibles pour l’utilisateur, et le processus de collecte doit être relativement rapide (idéalement en quelques millisecondes). La fréquence des appels de cette routine sera relativement élevée. En plus d’être appelé pour diagnostiquer l’état utilisateur incorrect, le système d’exploitation peut également utiliser cette routine pour enregistrer les informations d’état historique du pilote à des fins de débogage.

Dans de rares cas où une implémentation spécifique à la plateforme exige que le pilote effectue des opérations intrusives dans le cadre d’un appel à DxgkDdiGetDisplayStateNonIntrusive, le pilote doit effectuer les opérations, mais doit définir pArgs->ReturnSubStatus pour DXGK_DIAG_GETDISPLAYSTATE_CAUSED_GLITCH ou DXGK_DIAG_GETDISPLAYSTATE_CHANGED_DISPLAY_STATE en conséquence. En fonction de la valeur ReturnSubStatus, le système d’exploitation n’appelle cette routine que pour les scénarios d’erreur sur un système donné.

Le système d’exploitation appelle DxgkDdiGetDisplayStateNonIntrusive fréquemment (périodiquement ou sur d’autres événements courants) pour collecter les données d’état du pilote à des fins de débogage et examiner la chronologie historique. Le système d’exploitation appelle également cette routine dans des scénarios d’erreur particuliers (tels que les écrans noirs) avant de recueillir des informations plus détaillées en appelant DxgkDdiGetDisplayStateIntrusive. Compte tenu de la fréquence possible de cet appel, les pilotes doivent le terminer le plus rapidement possible. Le système d’exploitation appelle cette DDI avec NumOfTargets défini sur le nombre maximal de cibles prises en charge par la carte graphique donnée et VidPnTargetId renseigné. Le pilote miniport doit uniquement remplir les informations d’état d’affichage des cibles sur lesquelles il existe réellement un moniteur connecté. Pour une vidpntarget sur laquelle il n’existe aucun moniteur connecté, le miniport doit simplement remplir DXGK_DIAG_DISPLAY_CONNECTIVITY et le système d’exploitation ignore tous les autres champs de cette cible.

Note

Les pilotes doivent uniquement utiliser ReturnSubStatus pour signaler des conditions d’erreur et ne pas utiliser DXGK_DIAG_GETDISPLAYSTATE_MONITOR_NOT_CONNECTED pour signaler l’état de connectivité du moniteur. L’objectif principal de DXGK_DIAG_GETDISPLAYSTATE_MONITOR_NOT_CONNECTED est d’effectuer des appels intrusifs où le système d’exploitation ne demande pas de connectivité de surveillance.

Si le pilote atteint un échec sur un vidpntarget donné lors de la collecte des informations, il doit utiliser ReturnSubStatus pour définir l’état d’erreur et passer à la vidpntarget suivante et ne pas échouer l’appel global, sauf si tous les chemins ont atteint des défaillances. Dans l’idéal, les pilotes doivent enregistrer des erreurs lors de cet appel dans un journal d’erreurs interne afin que lorsque le système d’exploitation appelle DxgkDdiCollectDiagnosticInfo pour collecter des informations sur les boîtes noires, ces erreurs sont capturées dans le cadre d’une collection de journaux interne pour aider les IHD pendant le débogage.

Le niveau de synchronisation de cette DDI est de synchronisation de niveau zéro.

Exigences

Exigence Valeur
client minimum pris en charge Windows 10, version 2004
d’en-tête dispmprt.h

Voir aussi

DXGKARG_GETDISPLAYSTATENONINTRUSIVE

DxgkDdiCollectDiagnosticInfo

DxgkDdiGetDisplayStateIntrusive

DxgkDdiQueryInterface