Partager via


DXGKDDI_GETDISPLAYSTATENONINTRUSIVE fonction de rappel (dispmprt.h)

Le système d’exploitation appelle la routine DxgkDdiGetDisplayStateNonIntrusive d’un pilote miniport d’affichage pour collecter de manière non intrusive 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 retournée

DxgkDdiGetDisplayStateNonIntrusive retourne STATUS_SUCCESS si elle réussit. Sinon, elle 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 hors tension.

Remarques

Le système d’exploitation appelle DxgkDdiGetDisplayStateNonIntrusive pour collecter des informations d’état d’affichage à partir du pilote. Contrairement à DxgkDdiGetDisplayStateIntrusive, la routine DxgkDdiGetDisplayStateNonIntrusive du pilote 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 d’appel de cette routine sera relativement élevée. En plus d’être appelé pour diagnostiquer un état utilisateur incorrect, le système d’exploitation peut également utiliser cette routine pour enregistrer les informations d’état historique à partir du pilote à des fins de débogage.

Dans de rares cas où une implémentation spécifique à la plateforme nécessite 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> sur 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 peut appeler cette routine uniquement 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 l’historique chronologie. 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 aussi rapidement que 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és. Le pilote miniport doit uniquement remplir les informations d’état d’affichage pour les cibles sur lesquelles un moniteur est connecté. Pour un vidpntarget sur lequel aucun moniteur n’est connecté, le miniport doit simplement remplir DXGK_DIAG_DISPLAY_CONNECTIVITY et le système d’exploitation ignore tous les autres champs pour cette cible.

Notes

Les pilotes doivent uniquement utiliser ReturnSubStatus pour signaler les conditions d’erreur et ne pas utiliser DXGK_DIAG_GETDISPLAYSTATE_MONITOR_NOT_CONNECTED pour signaler l’état de connectivité du moniteur. L’objectif main de DXGK_DIAG_GETDISPLAYSTATE_MONITOR_NOT_CONNECTED est d’effectuer des appels intrusifs lorsque le système d’exploitation ne pose pas de questions sur la connectivité du moniteur.

Si le pilote rencontre une défaillance sur un vidpntarget donné lors de la collecte d’informations, il doit utiliser ReturnSubStatus pour définir l’état d’erreur et passer au vidpntarget suivant et ne pas échouer l’appel global, sauf si tous les chemins d’accès rencontrent des échecs. Dans l’idéal, les pilotes doivent enregistrer les erreurs rencontrées pendant cet appel dans un journal d’erreurs interne de sorte que lorsque le système d’exploitation appelle DxgkDdiCollectDiagnosticInfo pour collecter des informations de boîte noire, ces erreurs sont capturées dans le cadre d’une collection de journaux interne pour aider les IHV pendant le débogage.

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

Configuration requise

Condition requise Valeur
Client minimal pris en charge Windows 10, version 2004
En-tête dispmprt.h

Voir aussi

DXGKARG_GETDISPLAYSTATENONINTRUSIVE

DxgkDdiCollectDiagnosticInfo

DxgkDdiGetDisplayStateIntrusive

DxgkDdiQueryInterface