Partager via


Décharger l’environnement de routine

Le système d’exploitation décharge un pilote lorsque le pilote est en cours de remplacement ou lorsque tous les périphériques que les services du pilote ont été supprimés. Le gestionnaire PnP appelle la routine de déchargement d’un pilote PnP si le pilote n’a plus d’objets d’appareil après avoir géré une demande de IRP_MN_REMOVE_DEVICE .

Au début de la séquence de déchargement, le gestionnaire d’E/S ou le gestionnaire PnP marque l’objet pilote et ses objets d’appareil comme « Déchargement en attente ». Une fois qu’un pilote a été marqué comme « Décharger en attente », aucun pilote supplémentaire ne peut s’attacher à ce pilote, et aucune référence supplémentaire ne peut être faite aux objets de périphérique du pilote. Le pilote peut effectuer des IRPs en suspens, mais le système n’envoie pas de nouveaux IRPs au pilote.

Le gestionnaire d’E/S appelle la routine de déchargement d’un pilote lorsque toutes les conditions suivantes sont remplies :

  • Il ne reste aucune référence aux objets d’appareil créés par le pilote. En d’autres termes, aucun fichier associé à l’appareil sous-jacent ne peut être ouvert, et aucun IRP ne peut être en suspens pour les objets d’appareil du pilote.

  • Aucun autre pilote ne reste attaché à ce pilote.

  • Le pilote a appelé IoUnregisterPlugPlayNotification pour annuler l’inscription de toutes les notifications PnP pour lesquelles il s’est précédemment inscrit.

Notez que la routine de déchargement n’est pas appelée si la routine DriverEntry d’un pilote retourne une status d’échec. Dans ce cas, le gestionnaire d’E/S libère simplement l’espace mémoire occupé par le pilote.

Ni le gestionnaire PnP ni le gestionnaire d’E/S n’appellent des routines décharger les routines au moment de l’arrêt du système. Un pilote qui doit effectuer un traitement d’arrêt doit inscrire une routine DispatchShutdown .