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 avertit un pilote d’une modification de l’état de l’alimentation du système ou définit l’état de l’alimentation de l’appareil pour un appareil.
Code principal
Lorsqu’il est envoyé
Le gestionnaire d’alimentation système ou un propriétaire de stratégie d’alimentation d’appareil peut envoyer cet IRP.
Le gestionnaire d’alimentation envoie cet IRP pour informer les pilotes d’une modification de l’état de l’alimentation du système. Si un pilote inscrit son appareil pour la détection d’inactivité, le gestionnaire d’alimentation envoie cet IRP pour modifier l’état d’alimentation d’un appareil inactif.
Un pilote propriétaire de la stratégie d’alimentation envoie cet IRP pour définir l’état d’alimentation de l’appareil pour son appareil. Un pilote doit appeler PoRequestPowerIrp pour 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. Les pilotes de ces piles peuvent toucher du code paginé ou des données pour terminer la requête.
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 à un code ou à des données paginés.
Paramètres d’entrée
Le membre Parameters.Power.Type spécifie le type d’état d’alimentation défini, SystemPowerState ou DevicePowerState.
Le membre 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 .
Le membre Parameters.Power.ShutdownType spécifie des informations supplémentaires sur la transition demandée. Les valeurs possibles pour ce membre sont POWER_ACTION valeurs d’énumération . Pour plus d’informations, consultez System Power Actions.
Le membre Parameters.Power.SystemPowerStateContext est une structure SYSTEM_POWER_STATE_CONTEXT en lecture seule et partiellement opaque qui contient des informations sur les états d’alimentation système précédents d’un ordinateur. Si Parameters.Power.Type est SystemPowerState et Parameters.Power.State est PowerSystemWorking, deux bits d’indicateur dans cette structure indiquent si un démarrage rapide ou une mise en veille prolongée ont provoqué l’entrée de l’ordinateur dans l’état du système S0 (opérationnel). Pour plus d’informations, consultez distinguer le démarrage rapide de Wake-from-Hibernation.
Contexte de transition de l’alimentation du système pour IRP_MN_SET_POWER
Le tableau suivant présente le contenu de IRP_MN_SET_POWER. Parameters.Power. {État|ShutdownType} et les champs De bits CurrentSystemState, TargetSystemState et EffectiveSystemState dans la structure SYSTEM_POWER_STATE_CONTEXT pour chaque transition d’alimentation du système. Chaque ligne représente une IRP_MN_SET_POWER.
| Transition | État | Type d’arrêt | SystemState actuel | Target SystemState | SystemState effectif | Commentaires |
|---|---|---|---|---|---|---|
| Veillez à... | S3 | Dormir | S0 | S3 | S3 | |
| ... Réveiller | S0 | Dormir | S3 | S0 | S0 | |
| Veille hybride vers... | S4 | Mettre en veille prolongée | S0 | S3 | S4 | Veillez avec le fichier de veille prolongée (S4 rapide) |
| ... Réveiller | S0 | Dormir | S3 | S0 | S0 | |
| ... Wake/PwrLost | S0 | Dormir | S4 | S0 | S0 | |
| Veille prolongée vers... | S4 | Mettre en veille prolongée | S0 | S4 | S4 | |
| ... Réveiller | S0 | Dormir | S4 | S0 | S0 | |
| Arrêt hybride vers... | S4 | Mettre en veille prolongée | S0 | S5 | S4 | Applications fermées, l’utilisateur s’est déconnecté comme s’il était arrêté (démarrage en veille prolongée) |
| ... Démarrage rapide | S0 | Dormir | S4 | S0 | S0 | |
| Arrêt vers... | S5 | Arrêt/Réinitialisation/Désactivation | S0 | S5 | S5 | |
| ... Démarrage système | Pas de S-IRP pour le démarrage |
Paramètres de sortie
Parameters.Power.SystemContext est réservé à l’utilisation du système.
Bloc d’état d’E/S
Un pilote définit Irp-IoStatus.Status> sur STATUS_SUCCESS pour indiquer que l’appareil a entré l’état demandé.
Un pilote ne doit pas échouer une demande pour définir l’état de l’alimentation du système.
Les pilotes de fonction et de filtre situés au-dessus d’un pilote de bus ne doivent pas échouer pour définir un état d’alimentation d’appareil. Le pilote de bus peut échouer une demande d’alimentation d’appareil si l’appareil est supprimé ou en cours de suppression.
Opération
Le gestionnaire d’alimentation ou un pilote peut demander un IRP IRP_MN_SET_POWER . Le gestionnaire d’alimentation envoie cet IRP pour l’une des raisons suivantes :
Pour avertir les pilotes d’une modification de l’état de l’alimentation du système
Pour modifier l’état d’alimentation d’un appareil pour lequel le gestionnaire d’alimentation effectue une détection inactive
Pour confirmer l’état actuel du système après l’échec d’un pilote d’une demande de IRP_MN_QUERY_POWER pour un état d’alimentation du système. Pour plus d’informations, consultez IRP_MN_QUERY_POWER.
Un pilote propriétaire de la stratégie d’alimentation de l’appareil envoie IRP_MN_SET_POWER pour changer l’état d’alimentation de son appareil.
À tout moment, le système n’autorise qu’un seul IRP de ce type à être actif pour chaque objet d’appareil.
Chaque pilote doit passer chaque IRP d’alimentation au pilote inférieur suivant en appelant IoCallDriver (à compter de Windows Vista) ou PoCallDriver (Windows Server 2003, Windows XP et Windows 2000). L’interface PoCallDriver est similaire à celle d’IoCallDriver, sauf que le sous-système de gestion de l’alimentation peut retarder l’IRP avant de le transmettre au pilote suivant. Par exemple, les retards peuvent se produire sur une demande PowerDeviceD0 si l’appareil nécessite un courant inrush et doit donc être alimenté en série avec un autre appareil de ce type.
Une fois qu’un pilote reçoit une demande de IRP_MN_SET_POWER sur Windows Server 2003, Windows XP ou 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_SET_POWER pour les états d’alimentation système
Seul le gestionnaire d’alimentation système peut envoyer un IRP d’alimentation du système.
Un pilote ne doit pas échouer une demande pour définir l’état de l’alimentation du système.
Dans la mesure du possible, le gestionnaire d’alimentation envoie IRP_MN_QUERY_POWER avant d’envoyer IRP_MN_SET_POWER pour demander un état de veille système. Toutefois, dans certaines conditions (par exemple, l’utilisateur appuyant sur le bouton Power Off ou une batterie arrivant à expiration), le gestionnaire d’alimentation peut émettre IRP_MN_SET_POWER sans interroger d’abord. Le gestionnaire d’alimentation interroge uniquement les états de veille ; il ne interroge jamais avant de monter en puissance.
La requête IRP_MN_SET_POWER est envoyée au pilote supérieur dans la pile d’appareils d’un appareil. Le pilote supérieur passe l’IRP jusqu’au pilote inférieur suivant, et ainsi de suite, jusqu’à ce que le pilote d’autobus atteigne le pilote de bus, qui doit terminer l’IRP.
Un pilote de filtre n’a généralement pas besoin d’agir sur un IRP d’alimentation du système, autre que de le transmettre.
Toutefois, le propriétaire de la stratégie d’alimentation de l’appareil définit une routine IoCompletion avant de transmettre l’IRP. Dans la routine IoCompletion , il envoie une demande de IRP_MN_SET_POWER pour un IRP d’alimentation d’appareil. Pour plus d’informations, consultez Gestion d’un IRP de système Set-Power dans un propriétaire de stratégie d’alimentation d’appareil.
Un IRP de l’ensemble système informe les pilotes qu’une modification de l’état de l’alimentation du système est imminente et que les pilotes doivent se préparer pour lui. Toutefois, un pilote ne doit pas changer l’état d’alimentation de son appareil tant qu’il ne reçoit pas de IRP_MN_SET_POWER pour un état d’alimentation de l’appareil .
La valeur de Parameters.Power.ShutdownType fournit des informations supplémentaires sur les actions en attente. Lorsque l’IRP spécifie PowerSystemShutdown (S5), un pilote peut déterminer si le système est réinitialisé (PowerActionShutdownReset) ou la mise hors tension 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 que les appareils de streaming vidéo, un pilote peut désactiver l’appareil afin d’arrêter les E/S lorsque le système est réinitialisé.
La valeur à ShutdownType peut également être PowerActionShutdown. Dans ce cas, le pilote ne peut pas indiquer quel type d’arrêt est demandé et doit donc continuer comme pour une réinitialisation.
États de l’alimentation de l’appareil
Les pilotes de fonction et de filtre situés au-dessus d’un pilote de bus ne doivent pas échouer pour définir un état d’alimentation d’appareil. Le pilote de bus peut échouer une demande d’alimentation d’appareil si l’appareil est supprimé ou en cours de suppression.
Un pilote doit définir l’appareil dans l’état demandé avant de terminer l’IRP.
Lorsque l’IRP demande une transition vers un état d’alimentation inférieur, les pilotes doivent gérer l’IRP lorsqu’il se déplace vers le bas de la pile des appareils, en enregistrant tout contexte dont le pilote a besoin pour restaurer l’appareil à l’état de travail. Une fois qu’un pilote de bus reçoit un IRP, le pilote :
Enregistre tout contexte dont le pilote a besoin pour restaurer l’appareil à l’état de travail.
Définit l’appareil à l’état d’alimentation demandé.
Appelle PoSetPowerState pour notifier le gestionnaire d’alimentation.
Appelle PoStartNextPowerIrp pour démarrer l’IRP d’alimentation suivante (Windows Server 2003, Windows XP et Windows 2000 uniquement).
Termine l’IRP d’alimentation de l’appareil.
Le conducteur doit effectuer cette IRP en temps voulu. En règle générale, les conducteurs doivent éviter tout retard qu’un utilisateur classique trouverait sensiblement lent. Par exemple, un pilote peut retarder une modification de l’état du système pour vider les données réseau ou disque mis en cache, mais ne doit pas conserver une connexion réseau active ou mettre en forme une bande. Pour plus d’informations, consultez Passage d’IRP Power.
Sur Windows 2000 et versions ultérieures du système d’exploitation, si l’IRP spécifie PowerDeviceD1, PowerDeviceD2 ou PowerDeviceD3, et qu’un IRP d’alimentation système est actif, la valeur de Parameters.Power.ShutdownType fournit des informations sur l’IRP système.
Les pilotes d’appareils sur le chemin d’accès en veille prolongée doivent inspecter cette valeur. Si l’IRP demande PowerDeviceD3 et ShutdownType est PowerActionHibernate, un tel pilote doit enregistrer tout contexte requis pour restaurer l’appareil, mais ne doit pas éteindre l’appareil ; l’appareil entre dans l’état D3 lorsque la machine perd de la puissance.
Sur Windows 2000 et les versions ultérieures du système d’exploitation, les pilotes ne doivent pas compter sur la valeur à ShutdownType si l’état de l’alimentation demandé est PowerDeviceD0.
Sur Windows 98/Me, si l’IRP demande un état d’alimentation de l’appareil, le ShutdownType est toujours PowerActionNone.
Le pilote qui détermine quand mettre hors tension un appareil varie en fonction de la classe d’appareil.
Le pilote qui détermine quand alimenter un appareil est presque toujours un pilote qui accède aux registres de l’appareil. Le pilote doit vérifier que l’appareil est dans l’état D0 avant d’accéder aux registres matériels de l’appareil. Si l’appareil n’est pas dans l’état D0, le pilote doit appeler PoRequestPowerIrp pour envoyer un IRP pour alimenter l’appareil. Un pilote ne peut pas accéder à son appareil, sauf si l’appareil est dans l’état D0.
Lorsqu’un pilote reçoit un IRP défini pour l’état de l’appareil D0, il définit une routine IoCompletion et transmet l’IRP au pilote inférieur suivant.
Lorsque l’IRP atteint le pilote de bus, ce pilote applique (ou réinitialise) l’alimentation sur l’appareil, appelle PoStartNextPowerIrp (Windows Server 2003, Windows XP et Windows 2000 uniquement) et appelle PoSetPowerState pour informer le gestionnaire d’alimentation du nouvel état d’alimentation de l’appareil.
Une fois que le pilote de bus a terminé l’IRP de mise sous tension, les pilotes de fonction et de filtre gèrent l’IRP dans leurs routines IoCompletion lorsqu’il effectue la sauvegarde de la pile d’appareils. Dans la routine IoCompletion , chaque pilote restaure ou réinitialise son contexte d’appareil et effectue toutes les autres tâches de démarrage requises.
Pour plus d’informations, consultez Gestion des IRP_MN_SET_POWER pour les états d’alimentation de l’appareil.
Spécifications
En-tête: Wdm.h (include Wdm.h, Ntddk.h ou Ntifs.h)