Présentation de l’émission des programmes d’intégration de suppression
La figure suivante montre la séquence classique de runtimes d’intégration impliqués dans la suppression des pilotes d’un appareil.
Les notes suivantes correspondent aux nombres cerclé dans la figure précédente :
Suppression de requête
Le gestionnaire PnP émet un IRP_MN_QUERY_REMOVE_DEVICE pour demander si un appareil peut être supprimé sans perturber l’ordinateur. Il envoie également cette IRP lorsqu’un utilisateur demande à mettre à jour le ou les pilotes pour l’appareil et (sur Windows 2000 et versions ultérieures) quand Gestionnaire de périphériques désactive l’appareil. (Sur Windows 98/Me, le gestionnaire PnP envoie les runtimes d’intégration d’arrêt dans cette situation ; pour plus d’informations, voir Arrêt d’un appareil .)
Si tous les pilotes de la pile de périphériques retournent STATUS_SUCCESS, les pilotes ont placé le périphérique dans l’état de suppression en attente. Dans cet état, les pilotes ne doivent pas démarrer d’opérations qui empêchent la suppression de l’appareil.
Dans ce cas de suppression « propre », le gestionnaire PnP envoie un IRP de suppression de requête avant d’envoyer un IRP de suppression. Consultez l’étape 5 pour obtenir une description de la suppression « surprise ».
Bien qu’il ne soit pas indiqué dans le diagramme ci-dessus, un pilote de bus peut recevoir une IRP_MN_QUERY_REMOVE_DEVICE pour un appareil qui n’est pas démarré. Cela peut se produire si un utilisateur demande à supprimer dynamiquement un appareil physiquement présent sur l’ordinateur, mais désactivé.
Supprimer après la réussite de la requête
Le gestionnaire PnP émet une IRP_MN_REMOVE_DEVICE pour supprimer les pilotes d’un appareil.
Les pilotes doivent réussir cette demande. Les pilotes de l’appareil effectuent toutes les propre nécessaires, se détachent de la pile de périphériques et suppriment le FDO et les DO de filtre. Le pilote de bus parent conserve l’AOP jusqu’à ce que l’utilisateur supprime physiquement l’appareil de l’ordinateur.
Notez que les pilotes peuvent recevoir un IRP_MN_STOP_DEVICE avant un IRP de suppression, mais ce n’est pas obligatoire. Sur Windows 2000 et versions ultérieures, IRP_MN_STOP_DEVICE est utilisé uniquement pour suspendre un appareil pour le rééquilibrage des ressources ; il ne s’agit pas d’un pas vers la suppression. Si un utilisateur supprime le matériel de l’appareil pendant l’arrêt de l’appareil, le gestionnaire PnP envoie un IRP de suppression à un moment donné après l’arrêt de l’IRP, mais un arrêt n’est pas un prérequis pour une suppression.
Ré-énumérer l’appareil
Si l’appareil est réinumé après que les pilotes ont supprimé leurs objets de périphérique, le gestionnaire PnP appelle les routines AddDevice des pilotes et émet une IRP_MN_START_DEVICE pour rétablir l’appareil. (Voir également la figure État de l’appareil à partir de la perspective PnP .)
Annuler la suppression d’une requête
Le gestionnaire PnP émet un IRP_MN_CANCEL_REMOVE_DEVICE pour annuler une demande de suppression de requête.
En réponse à une IRP_MN_CANCEL_REMOVE_DEVICE, les pilotes retournent l’appareil à son état de démarrage.
Suppression surprise (Windows 2000 et versions ultérieures de Windows)
Sur les systèmes Windows 2000 et ultérieurs, si un utilisateur débranche un appareil de l’ordinateur sans utiliser le programme Débrancher ou éjecter le matériel, le gestionnaire PnP envoie un IRP IRP_MN_SURPRISE_REMOVAL .
Ce cas est appelé retrait « surprise » car les conducteurs ne reçoivent aucun avertissement préalable.
En réponse à une IRP IRP_MN_SURPRISE_REMOVAL , les pilotes de l’appareil échouent toutes les E/S en attente et libèrent les ressources matérielles utilisées par l’appareil. Les pilotes doivent s’assurer qu’aucun composant ne tente d’accéder au périphérique, car il n’est plus présent.
Tous les pilotes doivent gérer une IRP IRP_MN_SURPRISE_REMOVAL et doivent définir status sur STATUS_SUCCESS.
Impossible d’annuler une IRP_MN_SURPRISE_REMOVAL .
Supprimer après suppression surprise (Windows 2000 et versions ultérieures de Windows)
Lorsque tous les handles ouverts sur l’appareil sont fermés, le gestionnaire PnP envoie une requête IRP_MN_REMOVE_DEVICE aux pilotes de l’appareil. Chaque pilote se détache de la pile de périphériques et supprime son objet de périphérique.
Suppression surprise (Windows 98/Me)
Sur Windows 98/Me, un pilote ne reçoit pas de IRP_MN_SURPRISE_REMOVAL lorsqu’un appareil est supprimé sans avertissement. Le gestionnaire PnP envoie uniquement une IRP_MN_REMOVE_DEVICE. Les pilotes WDM doivent disposer d’un code pour gérer à la fois un IRP_MN_SURPRISE_REMOVAL suivi d’un IRP_MN_REMOVE_DEVICE (le comportement windows 2000 et ultérieur pour la suppression surprise) et d’un IRP_MN_REMOVE_DEVICE sans IRP de suppression surprise (comportement Windows 98/Me).
Supprimer après un échec de démarrage (Windows 2000 et versions ultérieures)
Si l’un des pilotes d’un appareil échoue à une IRP_MN_START_DEVICE, le gestionnaire PnP envoie une demande de IRP_MN_REMOVE_DEVICE à la pile de périphériques. Une telle IRP de suppression garantit que tous les pilotes de l’appareil sont avertis que le périphérique n’a pas été correctement démarré. En réponse à l’IRP IRP_MN_REMOVE_DEVICE , les pilotes de l’appareil annulent leurs opérations de démarrage (s’ils ont réussi l’IRP de démarrage) et annulent leurs opérations AddDevice . Le gestionnaire PnP marque un tel appareil comme « échec du démarrage ».
Ce comportement s’applique uniquement aux plateformes Windows 2000 et ultérieures. Sur Windows 98/Me, le gestionnaire PnP envoie un IRP_MN_STOP_DEVICE en réponse à un échec de démarrage.
Un pilote pour un appareil PnP peut recevoir un IRP_MN_SURPRISE_REMOVAL dans plus de situations que celles indiquées dans la figure illustrant les transitions de suppression IRP classiques. Par exemple, un utilisateur peut insérer une carte PC dans l’ordinateur, puis la supprimer avant le démarrage de l’appareil. Dans ce cas, le gestionnaire PnP émet un IRP de suppression surprise après l’appel des routines AddDevice des pilotes, mais avant d’émettre la demande de IRP_MN_START_DEVICE . Un pilote pour un périphérique PnP doit être prêt à gérer les irps de suppression à tout moment après l’appel de la routine AddDevice du pilote.