Routine RemoveDevice du pilote de classe de stockage
Lorsqu’un appareil est sur le point d’être supprimé, le gestionnaire PnP appelle d’abord la routine DispatchPnP du pilote de classe avec une demande de suppression de requête PnP (IRP_MJ_PNP avec IRP_MN_QUERY_REMOVE_DEVICE. Le pilote de classe de stockage doit échouer dans l’un des cas suivants :
L’appareil contient le fichier de pagination système ou le fichier de mise en veille prolongée.
Le pilote exécute une opération longue qui ne doit pas être annulée (par exemple, rembobinage ou mise en forme d’une bande).
Il existe des poignées en suspens pour l’appareil (CREATEs).
Le pilote de classe de stockage peut également échouer une demande de suppression de requête si l’appareil est réclamé pour le vidage sur incident, car la suppression d’un tel appareil désactive le vidage sur incident.
Si le pilote de classe de stockage retourne STATUS_SUCCESS en réponse à une demande de suppression de requête, le gestionnaire PnP appelle la routine DispatchPnP du pilote de classe avec une demande de suppression PnP (IRP_MJ_PNP avec IRP_MN_REMOVE_DEVICE). La routine DispatchPnP du pilote de classe de stockage appelle une routine RemoveDevice interne ou implémente les mêmes fonctionnalités en ligne.
La routine RemoveDevice d’un pilote de classe de stockage doit effectuer les opérations suivantes :
Libérez toutes les ressources en suspens, telles que la mémoire ou les événements, allouées par le pilote.
Supprimez les liens symboliques, le cas échéant, créés par le pilote.
Supprimez l’objet d’appareil (FDO).
Transférez la demande au pilote inférieur suivant.
Si le pilote de classe de stockage a créé des PDO au démarrage (par exemple, pour représenter des partitions sur un périphérique multimédia partitionné), ces PDO ont déjà été supprimés lorsque le gestionnaire PnP envoie la demande de suppression au pilote de classe de stockage.
Même après la suppression d’un objet d’appareil, s’il a un nombre de références différent de zéro, l’objet d’appareil persiste dans le système jusqu’à ce que son nombre de références atteigne zéro, puis disparaît en mode silencieux. Un pilote de classe de stockage ne doit pas tenter d’utiliser le pointeur d’objet de périphérique une fois l’objet d’appareil supprimé.
Pour plus d’informations sur la gestion d’une demande de suppression, consultez Suppression d’un appareil.