IRP_MN_QUERY_POWER

Cette IRP interroge un appareil pour déterminer si l’état d’alimentation du système ou l’état d’alimentation de l’appareil peut être modifié.

Code majeur

IRP_MJ_POWER

Date d’envoi

Le gestionnaire d’alimentation ou un propriétaire de la stratégie d’alimentation d’un appareil envoie cette IRP pour déterminer s’il peut modifier l’état d’alimentation du système ou de l’appareil, généralement pour mettre en veille. Un pilote doit appeler PoRequestPowerIrp pour allouer et envoyer ce IRP.

Le gestionnaire d’alimentation envoie cette IRP à IRQL = PASSIVE_LEVEL aux piles d’appareils qui définissent l’indicateur de DO_POWER_PAGABLE dans l’AOP.

Le gestionnaire d’alimentation peut envoyer l’IRP à IRQL = DISPATCH_LEVEL si l’indicateur DO_POWER_INRUSH est défini. Ces pilotes ne peuvent pas accéder directement ou indirectement à un code paginé ou à des données.

Paramètres d’entrée

Parameters.Power.Type spécifie le type d’état d’alimentation défini, SystemPowerState ou DevicePowerState.

Parameters.Power.State spécifie l’état d’alimentation lui-même, comme suit :

  • Si Parameters.Power.Type est SystemPowerState, la valeur est un énumérateur du type SYSTEM_POWER_STATE .

  • Si Parameters.Power.Type est DevicePowerState, la valeur est un énumérateur du type DEVICE_POWER_STATE .

Parameters.Power.ShutdownType spécifie des informations supplémentaires sur la transition demandée. Les valeurs possibles sont des énumérateurs du type POWER_ACTION .

Paramètres de sortie

Aucun.

Bloc d’état E/S

Un pilote définit Irp-IoStatus.Status> sur STATUS_SUCCESS pour indiquer que l’appareil peut entrer dans l’état demandé. Un pilote définit les status d’échec appropriés pour indiquer qu’il ne peut pas entrer dans l’état demandé.

Opération

Les paramètres de IRP_MN_QUERY_POWER sont identiques à ceux de IRP_MN_SET_POWER. Toutefois, au lieu d’informer les pilotes d’une modification irrévocable de l’état d’alimentation, IRP_MN_QUERY_POWER demande si le système ou un appareil peut entrer dans un état d’alimentation particulier.

Un pilote ne doit pas modifier l’état d’alimentation de son appareil en réponse à une demande de IRP_MN_QUERY_POWER .

Une fois qu’un pilote reçoit une demande de IRP_MN_QUERY_POWER sur Windows Server 2003, Windows XP et Windows 2000, un pilote doit appeler PoStartNextPowerIrp, comme décrit dans Calling PoStartNextPowerIrp. À compter de Windows Vista, l’appel de PoStartNextPowerIrp n’est pas obligatoire et un tel appel n’effectue aucune opération de gestion de l’alimentation.

IRP_MN_QUERY_POWER pour un état d’alimentation du système

Le gestionnaire d’alimentation envoie cette IRP pour s’assurer qu’il peut modifier l’état d’alimentation du système sans interrompre le travail, comme la suppression des connexions réseau.

Dans la mesure du possible, le gestionnaire d’alimentation interroge avant d’envoyer des IRP_MN_SET_POWER pour demander un état de veille du système ou un arrêt normal du système. Toutefois, dans certaines conditions critiques (par exemple, l’utilisateur appuyant sur le bouton Mettre hors tension ou une batterie arrivant à expiration), le gestionnaire d’alimentation peut envoyer une demande de IRP_MN_SET_POWER sans envoyer au préalable une demande d’alimentation de requête. Le gestionnaire d’alimentation interroge uniquement les états de veille ; il ne s’interroge jamais avant de revenir à l’état de fonctionnement.

Lorsqu’un pilote reçoit un IRP de requête d’alimentation du système, il doit échouer s’il ne peut prendre en charge aucun des états d’appareil valides pour l’état système interrogé. Pour plus d’informations, consultez DeviceState. Sinon, le pilote doit passer l’IRP au pilote inférieur suivant. Le pilote de bus termine le IRP.

À compter de Windows Vista, la transition vers un état de veille système est considérée comme une opération critique. Bien qu’un pilote puisse échouer à un IRP d’alimentation de requête système, le gestionnaire d’alimentation peut quand même changer l’état d’alimentation du système en état de veille. Une fois qu’un pilote reçoit un IRP d’alimentation de requête du système, le pilote doit toujours être préparé pour une modification ultérieure de l’état d’alimentation du système.

Lorsqu’un propriétaire de stratégie d’alimentation d’appareil reçoit un IRP de requête d’alimentation système, il doit définir une routine IoCompletion dans l’IRP avant de la transmettre. Dans la routine IoCompletion , elle doit envoyer un IRP_MN_QUERY_POWER pour un état d’appareil valide pour l’état du système interrogé. Pour plus d’informations, consultez Gestion d’un Query-Power IRP système dans un propriétaire de stratégie d’alimentation d’appareil.

Lorsque l’IRP spécifie PowerSystemShutdown (S5), la valeur dans Parameters.Power.ShutdownType fournit une raison pour l’arrêt. ShutdownType indique au pilote si le système est en cours de réinitialisation (PowerActionShutdownReset) ou s’il est hors tension indéfiniment pour redémarrer ultérieurement (PowerActionShutdownOff). Pour les pilotes de la plupart des appareils, la différence est sans conséquence. Toutefois, pour certains appareils, tels qu’un appareil de streaming vidéo qui exécute DMA, un pilote peut choisir de mettre hors tension son appareil lorsque le système est en cours de réinitialisation, arrêtant ainsi toute E/S en cours.

Sur Les systèmes Microsoft Windows 2000 et ultérieurs, la valeur dans ShutdownType peut également être PowerActionShutdown. Dans ce cas, le pilote ne peut pas dire quel type d’arrêt est demandé et doit donc procéder comme pour une réinitialisation.

Si un pilote échoue à une demande d’IRP_MN_QUERY_POWER d’état d’alimentation du système, le gestionnaire d’alimentation répond généralement en émettant un IRP IRP_MN_SET_POWER . En règle générale, cette IRP réaffirme l’état actuel du système. Toutefois, il est possible que les pilotes reçoivent une IRP_MN_SET_POWER à l’état interrogé ou à un autre état intermédiaire. Les conducteurs doivent être prêts à gérer ces situations.

IRP_MN_QUERY_POWER pour un état d’alimentation de l’appareil

Un propriétaire de la stratégie d’alimentation d’appareil envoie cette IRP à sa pile en réponse à une demande de IRP_MN_QUERY_POWER système.

Si un pilote peut placer son appareil dans l’état de périphérique demandé, il définit IoStatus.Status sur STATUS_SUCCESS et transmet l’IRP au pilote inférieur suivant, et ainsi de suite jusqu’à ce que l’IRP atteigne le pilote de bus. Si un pilote de la pile doit échouer à l’IRP, ce pilote doit effectuer immédiatement l’IRP en appelant IoCompleteRequest et en retournant un échec status. Les pilotes qui échouent à l’IRP ne le passent pas plus loin dans la pile.

En retournant STATUS_SUCCESS, le pilote garantit qu’il ne démarrera aucune opération qui modifierait sa capacité à définir l’état d’alimentation demandé. Le pilote doit mettre en file d’attente tous les IRP qui nécessitent de telles opérations jusqu’à ce qu’il termine un IRP à alimentation définie qui retourne l’appareil à un état d’alimentation acceptable.

Sur les systèmes Windows 2000 et ultérieurs, lorsque l’IRP spécifie PowerDeviceD1, PowerDeviceD2 ou PowerDeviceD3, la valeur dans Parameters.Power.ShutdownType fournit des informations sur l’IRP d’alimentation du système actuel, si un IRP d’alimentation système est actif. Dans ce cas, la valeur sur ShutdownType indique l’état d’alimentation du système actuellement demandé, ou PowerActionNone si une demande système n’est pas en attente. Sur Windows 98/Me, ce champ contient toujours PowerActionNone lorsque l’IRP demande un état d’alimentation de l’appareil.

Spécifications

En-tête

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

Voir aussi

IRP_MN_QUERY_POWER

IRP_MN_SET_POWER

PoRequestPowerIrp

PoStartNextPowerIrp