Partager via


Routines IoCompletion pour les irps d’alimentation des appareils

Une fois que le pilote de bus a terminé l’IRP, le gestionnaire d’E/S appelle les routines IoCompletion inscrites par les pilotes de niveau supérieur lorsqu’ils ont passé l’IRP dans la pile.

Chaque fois qu’un appareil entre dans l’état D0, chacun de ses pilotes doit définir une routine IoCompletion qui effectue la plupart des tâches requises pour le rétablir à l’état de fonctionnement. Les pilotes doivent définir une routine IoCompletion pour toute transition vers l’état D0, que l’appareil retourne d’un état de veille ou entre D0 au démarrage du système. L’illustration suivante montre les tâches qu’une routine IoCompletion doit effectuer.

diagramme illustrant la routine d’iocompletion d’alimentation de l’appareil.

Il s’agit notamment des tâches suivantes :

  • Restauration de l’état d’alimentation de l’appareil ou réinitialisation de l’appareil, selon les besoins, et préparation à la gestion des E/S mises en file d’attente par les pilotes alors que l’appareil n’était pas dans l’état de fonctionnement

  • Appel de PoSetPowerState pour informer le gestionnaire d’alimentation que l’appareil est dans l’état d’alimentation D0.

  • Appel de PoStartNextPowerIrp pour recevoir le IRP d’alimentation suivant, si le pilote n’a pas initialement envoyé l’IRP d’alimentation actuelle. (Windows Server 2003, Windows XP et Windows 2000 uniquement).

  • Libérer la mémoire allouée pour le contexte de l’appareil.

  • Appel de IoReleaseRemoveLock pour libérer le verrou que le pilote a acquis dans sa routine DispatchPower lorsqu’il a reçu l’IRP.

  • Retour de STATUS_SUCCESS.

Le pilote de bus ne met pas sous tension l’appareil tant que celui-ci ou les pilotes supérieurs ne doivent pas communiquer avec l’appareil.

Lorsque son appareil entre en veille, un pilote doit définir une routine IoCompletion qui appelle PoStartNextPowerIrp (Windows Server 2003, Windows XP et Windows 2000 uniquement) et libère le verrou de suppression. N’oubliez pas qu’un pilote ne peut pas accéder à son appareil lorsque celui-ci est en état de veille.