Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Cet IRP interroge un appareil pour déterminer si l’état de l’alimentation du système ou l’état d’alimentation de l’appareil peut être modifié.
Code principal
Lorsqu’il est envoyé
Le gestionnaire d’alimentation ou un propriétaire de stratégie d’alimentation d’appareil envoie cet IRP pour déterminer s’il peut changer l’état d’alimentation du système ou de l’appareil, généralement pour passer en veille. Un pilote doit appeler PoRequestPowerIrp pour allouer et envoyer cet IRP.
Le gestionnaire d’alimentation envoie cet IRP à IRQL = PASSIVE_LEVEL aux piles d’appareils qui définissent l’indicateur de DO_POWER_PAGABLE dans l’application PDO.
Le gestionnaire d’alimentation peut envoyer l’IRP à IRQL = DISPATCH_LEVEL si l’indicateur de DO_POWER_INRUSH est défini. Ces pilotes ne peuvent pas accéder directement ou indirectement à tout code ou données paginés.
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 d’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 tout état d’échec approprié pour indiquer qu’il ne peut pas entrer l’état demandé.
Opération
Les paramètres de IRP_MN_QUERY_POWER sont identiques à ceux de IRP_MN_SET_POWER. Au lieu d’informer les pilotes d’une modification irréversible de l’état d’alimentation, toutefois, IRP_MN_QUERY_POWER interroge si le système ou un appareil peut entrer un état d’alimentation particulier.
Un pilote ne doit pas changer 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 Appel de 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 cet IRP pour s’assurer qu’il peut changer l’état de l’alimentation du système sans interrompre le travail, par exemple la suppression des connexions réseau.
Dans la mesure du possible, le gestionnaire d’alimentation interroge avant d’envoyer IRP_MN_SET_POWER pour demander un état de veille système ou un arrêt normal du système. Toutefois, dans certaines conditions critiques (par exemple, l’utilisateur appuyant sur le bouton Power Off ou une batterie arrivant à expiration), le gestionnaire d’alimentation peut envoyer une demande de IRP_MN_SET_POWER sans envoyer d’abord une demande d’alimentation de requête. Le gestionnaire d’alimentation interroge uniquement les états de veille ; il ne interroge jamais avant de revenir à l’état de travail.
Lorsqu’un pilote reçoit un IRP de requête d’alimentation système, il doit échouer à l’IRP s’il ne peut pas prendre en charge l’un des états d’appareil valides pour l’état du 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 l’IRP.
À compter de Windows Vista, la transition vers un état de veille système est considérée comme une opération critique. Même si un pilote peut échouer à un IRP d’alimentation de requête système, le gestionnaire d’alimentation peut toujours changer l’état de l’alimentation du système en état de veille. Une fois qu’un pilote reçoit un IRP de puissance de requête système, le pilote doit toujours être préparé pour une modification ultérieure de l’état de l’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 le transmettre. Dans la routine IoCompletion , il doit envoyer un IRP_MN_QUERY_POWER pour un état d’appareil valide pour l’état système interrogé. Pour plus d’informations, consultez Gestion d’un IRP de système Query-Power dans un propriétaire de stratégie d’alimentation d’appareil.
Lorsque l’IRP spécifie PowerSystemShutdown (S5), la valeur sur Parameters.Power.ShutdownType fournit une raison de l’arrêt. Le ShutdownType indique au pilote si le système est réinitialisé (PowerActionShutdownReset) ou s’il est désactivé indéfiniment pour redémarrer ultérieurement (PowerActionShutdownOff). Pour les pilotes de la plupart des appareils, la différence est inconsequentiale. Toutefois, pour certains appareils, tels qu’un appareil de streaming vidéo qui exécute DMA, un pilote peut choisir de désactiver son appareil lorsque le système est réinitialisé, ce qui arrête les E/S en cours.
Sur les systèmes Microsoft Windows 2000 et versions ultérieures, la valeur de ShutdownType peut également être PowerActionShutdown. Dans ce cas, le pilote ne peut pas indiquer le type d’arrêt demandé et doit donc continuer comme pour une réinitialisation.
Si un pilote échoue à une demande de 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 confirmera 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 stratégie d’alimentation d’appareil envoie cet 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 l’appareil demandé, il définit IoStatus.Status sur STATUS_SUCCESS et passe 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 état d’échec. 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 IRPs qui nécessitent de telles opérations jusqu’à ce qu’il termine un IRP défini qui retourne l’appareil à un état d’alimentation acceptable.
Sur les systèmes Windows 2000 et versions ultérieures, lorsque l’IRP spécifie PowerDeviceD1, PowerDeviceD2 ou PowerDeviceD3, la valeur de Parameters.Power.ShutdownType fournit des informations sur l’IRP de puissance système actuelle, si un IRP d’alimentation système est actif. Dans ce cas, la valeur à 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 (include Wdm.h, Ntddk.h ou Ntifs.h)