Arrêt d’un appareil pour rééquilibrer les ressources
La figure suivante montre la séquence des IRP impliqués dans l’arrêt et le redémarrage d’un appareil pour rééquilibrer les ressources.
Les notes suivantes correspondent aux nombres cerclé dans la figure précédente :
Le gestionnaire PnP émet un IRP_MN_QUERY_STOP_DEVICE pour demander si les pilotes d’un appareil peuvent arrêter l’appareil et libérer ses ressources matérielles.
Si tous les pilotes de la pile de périphériques retournent STATUS_SUCCESS, les pilotes ont placé l’appareil dans un état (arrêt en attente) à partir duquel l’appareil peut être rapidement arrêté.
Si une pile d’appareils retourne autre chose que STATUS_SUCCESS, elle ne participe pas au processus de rééquilibrage. Étant donné que le rééquilibrage des ressources est une opération de meilleur effort, dans ce cas, le système tente toujours une opération de rééquilibrage pour répondre aux besoins en ressources des appareils du système. Toutefois, si les appareils échouent à l’arrêt de la requête, il peut ne pas être possible d’obtenir les résultats souhaités (par exemple, si un nouvel appareil est énuméré et déclenche un rééquilibrage, il risque de ne pas recevoir les ressources requises, ce qui peut échouer à démarrer).
Un appareil qui échoue à une opération d’arrêt de requête continue d’être dans un état opérationnel, même en cas d’échec de l’arrêt de la requête.
Le gestionnaire PnP interroge autant de piles d’appareils que nécessaire pour rééquilibrer les ressources requises.
Le gestionnaire PnP émet un IRP_MN_STOP_DEVICE pour arrêter l’appareil.
Sur Windows 2000 et versions ultérieures de Windows, le gestionnaire PnP envoie un IRP d’arrêt uniquement si un IRP d’arrêt de requête précédent pour l’appareil s’est terminé avec succès. En réponse à une IRP d’arrêt, les pilotes libèrent les ressources matérielles de l’appareil (tels que ses ports d’E/S) et conservent tous les IRP qui nécessitent l’accès à l’appareil.
Après avoir rééquilibré les ressources, le gestionnaire PnP émet IRP_MN_START_DEVICE demandes de redémarrage des appareils qu’il a arrêtés pendant le rééquilibrage.
Sinon, le gestionnaire PnP annule un IRP d’arrêt de requête en envoyant une IRP_MN_CANCEL_STOP_DEVICE.
En réponse à une IRP_MN_CANCEL_STOP_DEVICE, les pilotes d’un appareil retournent l’appareil à l’état démarré et reprennent le traitement des demandes d’E/S pour l’appareil.
Le gestionnaire PnP annule l’arrêt de requête pour une pile de périphériques si un pilote de la pile a échoué ou si l’opération de rééquilibrage global a échoué et qu’il annule toutes ses demandes d’arrêt de requête. Lorsque le gestionnaire PnP annule l’arrêt de requête sur une seule pile d’appareils, il envoie la requête IRP_MN_CANCEL_STOP_DEVICE , car tous les pilotes attachés au-dessus du pilote qui a échoué la requête ont l’appareil dans l’état d’arrêt en attente. Lorsque le IRP_MN_CANCEL_STOP_DEVICE réussit, les pilotes ont retourné l’appareil à l’état démarré.
Si un pilote ne parvient pas à redémarrer l’appareil après le rééquilibrage des ressources, le gestionnaire PnP envoie supprimer les IRP à la pile des appareils (sur Windows 2000 et versions ultérieures de Windows).
Le gestionnaire PnP envoie d’abord une demande IRP_MN_SURPRISE_REMOVAL . Ensuite, il envoie une demande de IRP_MN_REMOVE_DEVICE , mais seulement une fois que tous les handles ouverts sur l’appareil sont fermés.
Le rééquilibrage des ressources matérielles d’un appareil PnP doit être transparent pour les applications et les utilisateurs finaux. Les utilisateurs peuvent rencontrer un délai temporaire de fonctionnement, mais les données ne doivent pas être perdues. Vous devez prendre cela en considération lorsque vous gérez les IRP d’arrêt.