Partager via


Échec d’un système Query-Power IRP dans un filtre ou un pilote de fonction

Un filtre ou un pilote de fonction (qui n’est pas le propriétaire de la stratégie d’alimentation d’un appareil) peut échouer une demande de IRP_MN_QUERY_POWER si l’une des conditions suivantes est vraie :

  • L’appareil est activé pour la mise en éveil et l’état d’alimentation du système demandé est moins alimenté que la valeur de SystemWake, qui spécifie l’état le moins alimenté à partir duquel l’appareil peut sortir le système. Par exemple, un appareil qui peut sortir le système de S2, mais pas de S3, échouerait une requête pour S3, mais réussirait une requête pour S2.

  • L’entrée d’un état d’alimentation de l’appareil correspondant à l’état demandé forcerait le pilote à abandonner une opération qui perdrait des données, comme une connexion de modem ouverte. Un pilote échoue rarement une requête pour cette raison ; dans la plupart des cas, l’application gère de tels cas.

Pour faire échouer une demande d’IRP_MN_QUERY_POWER d’état d’alimentation du système, un pilote doit effectuer les étapes suivantes :

  1. Appelez PoStartNextPowerIrp pour indiquer que le pilote est prêt à gérer l’IRP d’alimentation suivant. (Windows Server 2003, Windows XP et Windows 2000 uniquement)

  2. Définissez Irp-IoStatus.Status> sur un status d’échec et appelez IoCompleteRequest, en spécifiant IO_NO_INCREMENT. Ne passez pas l’IRP plus loin dans la pile de l’appareil.

  3. Appelez IoReleaseRemoveLock pour libérer le verrou précédemment acquis.

  4. Retourne une status d’échec à partir de sa routine DispatchPower.