Partager via


IAdapterPowerManagement ::P owerChangeState, méthode (portcls.h)

La PowerChangeState méthode demande que l’appareil passe à un nouvel état d’alimentation.

Syntaxe

void PowerChangeState(
  [in] POWER_STATE NewState
);

Paramètres

[in] NewState

Spécifie le nouvel état d’alimentation demandé pour l’appareil. Ce paramètre est une union de type POWER_STATE. Nouvel état d’alimentation (NewState.DeviceState) peut être l’une des valeurs d’énumération DEVICE_POWER_STATE indiquées dans le tableau suivant.

État d’alimentation Signification
PowerDeviceD0 État d’alimentation totale (D0). Ce code peut être une fonction de l’état d’alimentation actuel. Enregistrez le nouvel état. Cette valeur locale est utilisée pour déterminer quand mettre en cache les accès aux propriétés et quand autoriser le pilote à accéder au matériel.
PowerDeviceD1 État de veille présentant la latence la plus faible par rapport au temps de latence requis pour revenir à D0
PowerDeviceD2 État de veille à latence moyenne. Dans cet état, le pilote de périphérique ne peut pas supposer qu’il peut toucher le matériel. Par conséquent, tous les accès doivent être mis en cache et le matériel restauré lors de l’entrée de D0.
PowerDeviceD3 Un état de mise en veille prolongée complète et est l’état de veille de latence le plus long. Le pilote ne peut pas accéder au matériel dans cet état et doit mettre en cache tous les accès matériels et restaurer le matériel lors du retour à D0 ou D1

Valeur de retour

None

Remarques

PortCls appelle la PowerChangeState méthode en réponse à un IRP d’alimentation IRP_MN_SET_POWER. Cet appel ne doit pas échouer. PortCls et le système utilisent l’appel PowerChangeState pour placer l’appareil dans l’état d’alimentation souhaité. Lorsque le système tente de suspendre ou de reprendre un flux audio actif, le pilote doit être en mesure d’enregistrer ou de restaurer son contexte de périphérique de manière appropriée.

Pour aider le pilote, PortCls suspend tous les flux audio actifs avant d’appeler cette méthode pour placer l’appareil en état de veille. Après avoir appelé cette méthode, PortCls désactive les flux audio actifs pour réveiller l’appareil. Les miniports peuvent opter pour une notification supplémentaire en utilisant l’interface IPowerNotify .

Le pilote miniport doit effectuer la modification demandée de l’état d’alimentation de l’appareil avant qu’il ne revienne de l’appel PowerChangeState . Si le pilote miniport doit enregistrer ou restaurer un état de périphérique avant un changement d’état d’alimentation, le pilote miniport doit prendre en charge l’interface IPowerNotify , ce qui lui permet de recevoir un avertissement préalable de toute modification de ce type. Avant de revenir d’un appel réussi PowerChangeState , le pilote miniport doit mettre en cache le nouvel état d’alimentation.

Bien que le pilote miniport se trouve dans l’un des états de veille (tout état autre que PowerDeviceD0), il doit éviter d’écrire sur le matériel. Le pilote miniport doit mettre en cache tous les accès matériels qui doivent être différés jusqu’à ce que l’appareil s’allume à nouveau. Si l’état d’alimentation passe de l’un des états de veille à PowerDeviceD0, le pilote miniport doit effectuer tous les accès matériels différés après avoir mis sous tension l’appareil. Si l’état d’alimentation passe de PowerDeviceD0 à un état de veille, le pilote miniport peut effectuer tous les accès matériels nécessaires pendant l’appel PowerChangeState avant de mettre l’appareil sous tension.

Lorsqu’il est hors tension, un pilote miniport n’est jamais invité à créer un objet pilote miniport ou un objet de flux. PortCls place toujours l’appareil dans l’état PowerDeviceD0 avant d’appeler la méthode NewStream du pilote miniport.

Le code de cette méthode doit résider dans la mémoire paginée.

Configuration requise

Condition requise Valeur
Plateforme cible Universal
En-tête portcls.h (include Portcls.h)

Voir aussi

IAdapterPowerManagement

IPowerNotify

IRP_MN_SET_POWER