IRP_MN_POWER_SEQUENCE

Cette IRP retourne les valeurs de séquence d’alimentation d’un appareil.

Code majeur

IRP_MJ_POWER

Date d’envoi

Un pilote envoie cette IRP en tant qu’optimisation pour déterminer si son appareil est réellement entré dans un état d’alimentation spécifique. La prise en charge de cette IRP est facultative.

Pour envoyer cette IRP, un pilote doit appeler IoAllocateIrp pour allouer l’IRP, en spécifiant le code IRP principal IRP_MJ_POWER et le code IRP mineur IRP_MN_POWER_SEQUENCE. Le pilote doit ensuite appeler IoCallDriver (Windows Vista) ou PoCallDriver (Windows Server 2003, Windows XP et Windows 2000) pour passer l’IRP au pilote inférieur suivant. Le gestionnaire d’alimentation ne peut pas envoyer cette IRP.

Les expéditeurs de cette IRP doivent s’exécuter à IRQL <= DISPATCH_LEVEL.

Paramètres d’entrée

Aucun.

Paramètres de sortie

Parameters.PowerSequence pointe vers une structure POWER_SEQUENCE avec les membres suivants :

SequenceD1
Nombre de fois où l’appareil a été à l’état d’alimentation D1 ou inférieur.

SequenceD2
Nombre de fois où l’appareil a été à l’état d’alimentation D2 ou inférieur.

SequenceD3
Nombre de fois où l’appareil a été à l’état d’alimentation D3.

Les valeurs de séquence suivent le nombre minimal de fois qu’un appareil a été dans l’état d’alimentation correspondant ou dans un état d’alimentation inférieur.

Le pilote de bus incrémente les valeurs dans SequenceD1, SequenceD2 et SequenceD3 au moins chaque fois que l’appareil entre dans l’état d’alimentation correspondant ou dans un état d’alimentation inférieur.

Bloc d’état E/S

Un pilote définit Irp-IoStatus.Status> sur STATUS_SUCCESS pour indiquer qu’il a retourné les informations demandées ou pour STATUS_NOT_IMPLEMENTED pour indiquer qu’il ne prend pas en charge cette IRP.

Opération

Cette IRP retourne les valeurs de séquence d’alimentation d’un appareil. Les pilotes de bus peuvent éventuellement le gérer ; les pilotes de fonction et de filtre peuvent éventuellement les envoyer.

Pour un appareil qui prend beaucoup de temps à changer d’état, cet IRP fournit une optimisation utile. Chaque fois que l’appareil change son état d’alimentation, son pilote de bus incrémente la valeur de séquence pour cet état d’alimentation. Le pilote de bus initialise les valeurs de séquence au démarrage et les incrémente continuellement par la suite ; ils n’ont pas besoin d’être réinitialisés à zéro.

Un propriétaire de stratégie d’appareil peut envoyer cette IRP une fois pour obtenir les valeurs de séquence avant d’arrêter l’appareil et une fois de plus pour obtenir de nouvelles valeurs lors de la restauration de l’alimentation de l’appareil. En comparant les deux jeux de valeurs, le pilote peut déterminer si l’appareil est réellement entré dans l’état de puissance inférieure. Si l’appareil n’a pas perdu l’alimentation, le pilote peut éviter une réinitialisation fastidieuse lorsque l’appareil revient à l’état D0.

Par exemple, si l’appareil met beaucoup de temps à rétablir l’alimentation lorsqu’il atteint l’état D2, le pilote peut stocker la valeur SequenceD2 avant de définir l’état de l’appareil sur D2 ou inférieur. Plus tard, lorsque l’alimentation est rétablie sur l’appareil, le pilote peut comparer la nouvelle valeur SequenceD2 à sa valeur stockée pour déterminer si l’état de l’appareil est effectivement tombé sous D2. Si les valeurs correspondent, l’appareil n’a pas réellement entré l’état d’alimentation D2 ou un état inférieur, et le pilote peut éviter de réinitialiser l’appareil.

Spécifications

En-tête

Wdm.h (inclure Wdm.h, Ntddk.h ou Ntifs.h)