Partager via


Vue d’ensemble de l’achèvement de l’IRP d’attente/éveil

Une IRP d’attente/de veille se termine lorsqu’un signal de sortie de veille arrive. Le signal de mise en éveil est spécifique à l’appareil, mais il s’agit généralement d’un événement de service normal pour l’appareil. Par exemple, une boucle entrante peut provoquer le réveil d’un modem en veille.

La figure suivante montre les étapes d’exécution d’un IRP d’attente/éveil.

étapes d’exécution d’un irp d’attente/veille.

Lorsque le signal se produit, le contrôle entre de nouveau dans le pilote de bus au point où le bus détecte que l’appareil s’est réveillé. Le pilote de bus traite l’événement en fonction des besoins et appelle IoCompleteRequest pour terminer la IRP_MN_WAIT_WAKE IRP pour son PDO.

Le gestionnaire d’E/S appelle ensuite la routine IoCompletion définie par le pilote supérieur suivant dans la pile des appareils. Dans la routine IoCompletion , ce pilote prend en charge le signal de mise en éveil en fonction des besoins et appelle IoCompleteRequest pour terminer l’IRP. Le gestionnaire d’E/S continue d’appeler des routines IoCompletion qui sauvegardent la pile des appareils jusqu’à ce que tous les pilotes aient terminé l’IRP.

Dans sa routine IoCompletion , tout pilote qui énumère plusieurs appareils enfants (crée plusieurs PDO) et qui a reçu des demandes d’attente/éveil de plusieurs de ces appareils doit s’envoyer un IRP d’attente/veille pour se ré armer pour l’attente/la veille sur un autre enfant. Pour plus d’informations, consultez Understanding the Path of Wait/Wake IRPs through a Device Tree.

Après avoir appelé les routines IoCompletion définies par les pilotes lorsqu’ils ont passé l’IRP dans la pile, le gestionnaire d’E/S appelle la routine de rappel définie par le propriétaire de la stratégie d’alimentation lorsqu’il a demandé l’IRP d’attente/veille. Dans la routine de rappel, le propriétaire de la stratégie doit retourner son appareil à l’état de fonctionnement et effectuer un IRP d’attente/éveil en attente pour le PDO de son enfant, le cas échéant.

L’exécution de l’IRP de l’enfant amène le gestionnaire d’E/S à appeler des routines IoCompletion définies par les pilotes dans la pile des appareils de l’enfant, etc. Finalement, le propriétaire de la stratégie qui a démarré l’IRP d’attente/éveil d’origine sur le devnode détermine que son appareil a déclaré le signal de mise en éveil, et que tous les irps d’attente/éveil en attente seront terminés.