Partager via


DXGKDDI_NOTIFY_SURPRISE_REMOVAL fonction de rappel (dispmprt.h)

DXGKDDI_NOTIFY_SURPRISE_REMOVAL est appelée par le système d’exploitation lorsqu’un utilisateur déconnecte un appareil d’affichage externe sans notifier 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 vers 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 de retour

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

Remarques

Ce rappel peut éventuellement être implémenté par les pilotes windows Display Driver Model (WDDM) 1.2 et versions ultérieures.

Note

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

Lorsque le système d’exploitation détecte une suppression surprise, il avertit le pilote le plus rapidement possible. DxgkDdiNotifySurpriseRemoval est un niveau zéro fonction DDI, 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 à l’intérieur 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 tentative supplémentaire d’accès au matériel peut entraîner des problèmes tels qu’un blocage dur.

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

  • La suppression surprise se produit lorsque le système et l’appareil graphique sont dans un état de faible puissance, tel que le veille ou la veille prolongée. Lorsque le système d’exploitation reprend à partir de l’état de faible alimentation, il détecte cette suppression surprise et appelle immédiatement le DxgkDdiNotifySurpriseRemoval rappel avec RemovalType = DxgkRemovalHibernation. Il n’y aura probablement pas de travail GPU en attente ou d’appels DDI dans ce cas. Il doit donc être relativement sûr et facile pour le pilote à gérer. Les détails de l’état de retour 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 (POST), le système d’exploitation tente de redémarrer le système correctement, quel que soit l’état retourné.
    • Pour un périphérique 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 correctement le système. S’il prend en charge SupportSurpriseRemoval dans DXGK_DRIVERCAPS, le système d’exploitation ignore l’état de retour et continue à arrêter l’appareil graphique. Consultez les notes de retour supplémentaires ci-dessous.
  • L’appareil graphique est surpris/déconnecté 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 avec RemovalType = DxgkRemovalPnPNotify. Dans ce cas, il peut y avoir des appels GPU en attente ou DDI. Lorsque le pilote reçoit cette notification et peut gérer cette suppression surprise, le pilote doit immédiatement marquer cet appareil comme suppression surprise dans son propre contexte d’appareil pour éviter tout accès matériel, puis revenir STATUS_SUCCESS au système d’exploitation. Le système d’exploitation continuera d’appeler d’autres fonctions DDI pour nettoyer les ressources et arrêter l’appareil graphique. Comme indiqué ci-dessous, le pilote doit uniquement libérer ou nettoyer les ressources logicielles et ne doit pas toucher ni accéder à du 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. Pour toute défaillance, le système d’exploitation vérifie immédiatement le 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 l’adaptateur d’affichage externe de la pile graphique et appelle d’autres fonctions implémentées par le pilote DxgkDdiXxx fonctions en mode noyau 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 ni nettoyer les 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 pas 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 de l’appareil d’affichage externe n’est pas libérée.

Exigences

Exigence Valeur
client minimum pris en charge Windows 8
serveur minimum pris en charge Windows Server 2012
plateforme cible Bureau
d’en-tête dispmprt.h
IRQL PASSIVE_LEVEL

Voir aussi

D3DKMT_WDDM_1_2_CAPS

DXGK_DRIVERCAPS

DXGK_SURPRISE_REMOVAL_TYPE

DxgkDdiAddDevice