DXGKDDI_NOTIFY_SURPRISE_REMOVAL fonction de rappel (dispmprt.h)

DXGKDDI_NOTIFY_SURPRISE_REMOVAL est appelé par le système d’exploitation lorsqu’un utilisateur déconnecte un périphérique d’affichage externe sans en informer le système.

Syntaxe

DXGKDDI_NOTIFY_SURPRISE_REMOVAL DxgkddiNotifySurpriseRemoval;

NTSTATUS DxgkddiNotifySurpriseRemoval(
  [in] PVOID MiniportDeviceContext,
  [in] DXGK_SURPRISE_REMOVAL_TYPE RemovalType
)
{...}

Paramètres

[in] MiniportDeviceContext

Handle d’un bloc de contexte associé à un adaptateur d’affichage. La fonction DxgkDdiAddDevice du pilote miniport d’affichage a précédemment fourni ce handle au sous-système du noyau graphique DirectX.

[in] RemovalType

Valeur de type DXGK_SURPRISE_REMOVAL_TYPE qui identifie le type d’événement de suppression surprise.

Valeur retournée

Retourne STATUS_SUCCESS si les ressources logicielles ont été nettoyées pour RemoveType = DxgkRemovalHibernation. Si le pilote retourne à la place un code d’erreur, le système d’exploitation tente de redémarrer le système, comme décrit dans la section Notes suivante.

Remarques

Ce rappel peut éventuellement être implémenté par le modèle de pilote d’affichage Windows (WDDM) 1.2 et les pilotes d’affichage miniport ultérieurs.

Notes

Le système d’exploitation appelle DxgkDdiNotifySurpriseRemoval uniquement si le pilote de miniport d’affichage indique la prise en charge en définissant le membre SupportSurpriseRemovalInHibernation de la structure DXGK_DRIVERCAPS sur 1.

Lorsque le système d’exploitation détecte une suppression surprise, il avertit le pilote aussi rapidement que possible. DxgkDdiNotifySurpriseRemoval est une fonction DDI de niveau zéro , ce qui signifie qu’elle peut être appelée lorsqu’un pilote a une charge de travail GPU en attente et/ou s’exécute dans d’autres fonctions DDI. Étant donné qu’un appel à cette fonction indique que le matériel graphique a été physiquement supprimé ou a disparu du système, toute autre tentative d’accès au matériel peut entraîner des problèmes tels qu’un blocage physique.

Le système d’exploitation classe la suppression surprise comme suit :

  • La suppression surprise se produit lorsque le système et le périphérique graphique sont dans un état de faible consommation, par exemple en veille ou en veille prolongée. Lorsque le système d’exploitation reprend l’état de faible consommation, il détecte cette suppression surprise et appelle immédiatement le rappel DxgkDdiNotifySurpriseRemoval du pilote avec RemovalType = DxgkRemovalHibernation. Il n’y aura probablement pas de travail GPU ou d’appels DDI en attente dans ce cas, il doit donc être relativement sûr et facile à gérer pour le pilote. Les détails de retour status sont les suivants :

    • Le système d’exploitation s’attend à ce que le pilote gère correctement l’appel DxgkDdiNotifySurpriseRemoval et retourne STATUS_SUCCESS.
    • Si le périphérique graphique supprimé est l’appareil d’auto-test de mise sous tension (POST), le système d’exploitation tente de redémarrer le système correctement, quelle que soit la status retournée.
    • Pour un appareil non POST, si le pilote échoue à l’appel et prend uniquement en charge SupportSurpriseRemovalInHibernation dans son DXGK_DRIVERCAPS, le système d’exploitation redémarre normalement. S’il prend en charge SupportSurpriseRemoval dans DXGK_DRIVERCAPS, le système d’exploitation ignore le status de retour et continue d’arrêter le périphérique graphique. Consultez les notes de retour supplémentaires ci-dessous.
  • Le périphérique graphique est supprimé/débranché par surprise lorsqu’il est toujours en cours d’exécution. Lorsque le système d’exploitation détecte ce type de suppression surprise, il appelle immédiatement le rappel DxgkDdiNotifySurpriseRemoval du pilote avec RemovalType = DxgkRemovalPnPNotify. Il peut encore y avoir des travaux GPU ou des appels DDI en attente à terminer dans ce cas. Lorsque le pilote reçoit cette notification et peut gérer cette suppression surprise, il doit immédiatement marquer cet appareil comme suppression surprise dans son propre contexte d’appareil pour éviter tout accès au matériel, puis retourner STATUS_SUCCESS au système d’exploitation. Le système d’exploitation continue d’appeler d’autres fonctions DDI pour propre les ressources et arrêter le périphérique graphique. Comme indiqué ci-dessous, le pilote doit uniquement libérer ou propre les ressources logicielles et ne doit pas toucher ou accéder au matériel dans ces appels DDI. Si le pilote ne peut pas gérer cette suppression surprise, il doit retourner un échec approprié au système d’exploitation. En cas de défaillance, le système d’exploitation vérifie immédiatement les bogues du système afin d’éviter tout autre dommage matériel ou de données.

Si le pilote de miniport d’affichage retourne STATUS_SUCCESS, le sous-système du noyau graphique DirectX continue de supprimer la carte graphique externe de la pile graphique et appelle d’autres fonctions en mode noyau DxgkDdiXxx implémentées par le pilote pour libérer toutes les ressources. Dans ce cas, le pilote doit effectuer son nettoyage des ressources logicielles en réponse aux appels du système d’exploitation, mais ne doit pas toucher ou propre des paramètres matériels. Si aucun autre matériel n’utilise le pilote, le système d’exploitation décharge le pilote.

Si le pilote retourne un code d’erreur, ne définit pas DXGK_DRIVERCAPS. SupportSurpriseRemovalInHibernation, ou n’implémente pas cette fonction, le sous-système du noyau graphique DirectX n’appelle plus de fonctions DxgkDdiXxx implémentées par le pilote et tente de redémarrer le système. Dans ce cas, la ressource qui a été allouée avant la déconnexion du périphérique d’affichage externe ne sera pas libérée.

Configuration requise

Condition requise Valeur
Client minimal pris en charge Windows 8
Serveur minimal pris en charge Windows Server 2012
Plateforme cible Desktop (Expérience utilisateur)
En-tête dispmprt.h
IRQL PASSIVE_LEVEL

Voir aussi

D3DKMT_WDDM_1_2_CAPS

DXGK_DRIVERCAPS

DXGK_SURPRISE_REMOVAL_TYPE

DxgkDdiAddDevice