DXGKDDI_GETDISPLAYSTATEINTRUSIVE fonction de rappel (dispmprt.h)

Le système d’exploitation appelle la routine DxgkDdiGetDisplayStateNonIntrusive d’un pilote miniport d’affichage pour collecter des informations d’état d’affichage à partir du pilote.

Syntaxe

DXGKDDI_GETDISPLAYSTATEINTRUSIVE DxgkddiGetdisplaystateintrusive;

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

Paramètres

[in] Context

Pointeur vers un contexte privé retourné par DxgkDdiQueryInterface.

[in/out] pArgs

Pointeur vers une structure DXGKARG_GETDISPLAYSTATEINTRUSIVE .

Valeur retournée

DxgkDdiGetDisplayStateIntrusive 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 ce 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 DxgkDdiGetDisplayStateIntrusive pour collecter des informations d’état d’affichage à partir du pilote lorsque l’utilisateur est déjà dans un état incorrect. Contrairement à DxgkDdiGetDisplayStateNonIntrusive, la routine DxgkDdiGetDisplayStateIntrusive du pilote peut effectuer des opérations plus intrusives qui ont des effets secondaires visibles pour l’utilisateur . Une opération intrusive est définie comme suit (les opérations non intrusives n’ont aucune de ces propriétés) :

  • Il provoque des effets secondaires (problèmes) visibles par l’utilisateur (par exemple, l’arrêt temporaire de l’analyse et l’case activée de connectivité de surveillance destructrice).

  • Il est lent et affecte les performances du système ou de l’affichage s’il est appelé fréquemment (plusieurs fois en une seconde).

  • Il modifie l’état du sous-système d’affichage (ou de tout autre sous-système) directement ou indirectement.

Le pilote ne doit pas modifier intentionnellement l’état du système lors de la collecte de données.

Le système d’exploitation appelle cette routine beaucoup moins fréquemment par rapport aux appels à DxgkDdiGetDisplayStateNonIntrusive. Dans la majorité des scénarios d’erreur, le système d’exploitation appelle d’abord DxgkDdiGetDisplayStateNonIntrusive , puis appelle DxgkDdiGetDisplayStateIntrusive pour s’assurer que tout effet involontaire de l’appel intrusif n’affecte pas la collecte de données non intrusives.

DXGKRNL appelle cette routine avec NumOfTargets défini sur le nombre de cibles sur lesquelles le système d’exploitation signale qu’il existe un moniteur connecté avec VidPnTargetId correspondant renseigné. Lorsque le pilote estime qu’aucun moniteur n’est connecté sur une cible donnée, il doit définir l’objet ReturnSubStatus pour que cette cible soit DXGK_DIAG_GETDISPLAYSTATE_MONITOR_NOT_CONNECTED.

Notes

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 des erreurs interne afin que, lorsque le système d’exploitation appelle DxgkDdiCollectDiagnosticInfo pour la collecte d’informations de boîte noire, ces erreurs sont capturées dans le cadre d’une collection de journaux interne pour aider les IHVs à déboguer.

Le système d’exploitation dispose d’un délai d’attente suffisant (environ 5 secondes) pour que DxgkDdiGetDisplayStateIntrusive se termine, ce qui donne au pilote plus de temps pour collecter tous les états pertinents. Après un délai d’attente, le système d’exploitation peut vérifier la machine et collecter un vidage si le pilote se bloque dans cet appel. Le miniport doit donc essayer de toujours terminer cet appel dans le délai imparti.

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_GETDISPLAYSTATEINTRUSIVE

DxgkDdiCollectDiagnosticInfo

DxgkDdiGetDisplayStateNonIntrusive

DxgkDdiQueryInterface