GET_IDLE_WAKE_INFO fonction de rappel (wdm.h)
La routine GetIdleWakeInfo permet au pilote d’un appareil de découvrir les états d’alimentation de l’appareil à partir desquels l’appareil peut signaler un événement de sortie de veille.
Syntaxe
GET_IDLE_WAKE_INFO GetIdleWakeInfo;
NTSTATUS GetIdleWakeInfo(
[in, optional] PVOID Context,
[in] SYSTEM_POWER_STATE SystemPowerState,
[out] PDEVICE_WAKE_DEPTH DeepestWakeableDstate
)
{...}
Paramètres
[in, optional] Context
Pointeur vers des informations de contexte spécifiques à l’interface. L’appelant définit ce paramètre sur la valeur du membre Context de la structure D3COLD_SUPPORT_INTERFACE pour l’interface.
[in] SystemPowerState
État de l’alimentation du système. Définissez ce paramètre sur l’une des valeurs d’énumération SYSTEM_POWER_STATE suivantes :
- PowerSystemWorking
- PowerSystemSleeping1
- PowerSystemSleeping2
- PowerSystemSleeping3
- PowerSystemHibernate
[out] DeepestWakeableDstate
État Dx réactivable le plus profond. Ce paramètre est un pointeur vers une variable DEVICE_WAKE_DEPTH . Si l’appel réussit, la routine écrit l’une des valeurs d’énumération suivantes dans cette variable :
- DeviceWakeDepthNotWakeable
- DeviceWakeDepthD0
- DeviceWakeDepthD1
- DeviceWakeDepthD2
- DeviceWakeDepthD3hot
- DeviceWakeDepthD3cold
Si la routine ne peut pas déterminer l’état le plus profond de l’appareil en éveil (peut-être parce que le microprogramme de la plateforme ne contient pas ces informations), l’appel échoue et la routine retourne une erreur status code. Si un appel GetIdleWakeInfo échoue pour une valeur de paramètre SystemPowerState dans la plage PowerSystemWorking à PowerSystemHibernate, il échoue pour toutes ces valeurs.
Valeur retournée
La routine GetIdleWakeInfo retourne STATUS_SUCCESS si elle récupère correctement l’état d’éveil le plus profond de l’appareil. Sinon, elle retourne une erreur appropriée status code.
Remarques
Pour l’état d’alimentation du système spécifié par l’appelant, cette routine tente de déterminer l’état d’alimentation de l’appareil le plus faible à partir duquel l’appareil peut signaler un événement de sortie de veille au processeur. Si elle réussit, la routine écrit l’état d’alimentation de l’appareil à l’emplacement désigné par le paramètre DeepestWakeableDstate et retourne STATUS_SUCCESS. Ou, si la routine détermine que l’appareil ne peut pas signaler un événement de sortie de veille à partir d’un état d’alimentation de l’appareil, la routine écrit la valeur DeviceWakeDepthNotWakeable à cet emplacement et retourne STATUS_SUCCESS.
Le pilote d’un appareil utilise les informations fournies par la routine GetIdleWakeInfo pour déterminer les conditions dans lesquelles l’appareil peut signaler un événement de veille. Un appareil qui doit être en mesure de signaler certains événements de sortie de veille ne doit pas entrer dans un état d’alimentation de l’appareil à partir duquel il ne peut pas signaler ces événements. Pour certains types d’appareils, les signaux de veille que l’appareil doit envoyer lorsque l’ordinateur est dans l’état d’alimentation du système S0 (fonctionnement) diffèrent de ceux que l’appareil doit envoyer lorsque l’ordinateur semble éteint.
Par exemple, lorsqu’un carte est inséré dans un emplacement PCI Express carte et que le périphérique de contrôleur pci Express pour l’emplacement est dans l’état d’alimentation de l’appareil D0, ce périphérique signale une interruption au processeur. Toutefois, si l’appareil du contrôleur est dans un état Dx à faible consommation lors de l’insertion de l’carte, l’état d’alimentation du système de l’ordinateur peut déterminer si cet appareil doit signaler un événement de sortie de veille au processeur. Dans l’idéal, l’appareil de contrôleur doit se comporter comme suit :
- Si l’ordinateur est dans l’état d’alimentation du système S0 (fonctionnement), l’appareil doit signaler un événement de sortie de veille au processeur.
- Si l’ordinateur est en veille (dans un état Sx à faible consommation), l’appareil ne doit pas signaler un événement de sortie de veille.
Dans cet exemple, le pilote peut appeler la routine GetIdleWakeInfo pour déterminer si le périphérique de contrôleur à chaud doit quitter l’état D0 lorsque l’ordinateur se trouve dans S0. Pour cet appel, le pilote définit SystemPowerState = PowerSystemWorking. Cet appareil ne doit pas laisser l’état D0 (lorsque l’ordinateur est en S0) dans l’un des cas suivants :
- L’appel GetIdleWakeInfo définit le paramètre de sortie sur DeviceWakeDepthNotWakeable ou DeviceWakeDepthD0 et retourne STATUS_SUCCESS.
- L’appel GetIdleWakeInfo échoue et retourne une erreur status code.
Les pilotes de la plupart des appareils peuvent traiter une valeur de sortie DeviceWakeDepthD0 de la même façon que DeviceWakeDepthNotWakeable. Seuls quelques pilotes peuvent avoir une raison d’armer un signal de veille lorsque leurs appareils sont en D0. Il s’agit de pilotes pour les appareils simples qui surveillent les événements externes qui déclenchent des signaux d’éveil, que les appareils soient dans des états D0 ou Dx de faible consommation. Un exemple de ce type d’appareil est un bouton d’alimentation ou un bouton de veille sur un ordinateur.
La routine GetIdleWakeInfo interroge le pilote de bus sous-jacent et le microprogramme système ACPI pour déterminer l’état d’alimentation le plus faible à partir duquel l’appareil peut signaler un événement de sortie de veille. Si le pilote de bus et le microprogramme ne peuvent pas fournir ces informations, la routine échoue et retourne une erreur status code.
La structure DEVICE_CAPABILITIES inclut un membre DeviceWake qui fournit des informations similaires à celles disponibles dans la routine GetIdleWakeInfo . Toutefois, les informations contenues dans le membre DeviceWake s’appliquent uniquement aux états système de faible puissance S1 à S4. Pour certains appareils, les informations contenues dans le membre DeviceWake peuvent également s’appliquer à l’état d’alimentation du système S0, mais les pilotes ne doivent pas s’appuyer sur ce comportement. Seule la routine GetIdleWakeInfo signale de manière fiable la capacité d’un appareil à signaler un événement de veille si l’ordinateur est en S0.
Une fonction d’assistance inline, MapWakeDepthToDstate, est fournie pour convertir la valeur de sortie DEVICE_WAKE_DEPTH de la routine GetIdleWakeInfo en valeur DEVICE_POWER_STATE qui peut être utilisée comme paramètre d’entrée par la routine PoRequestPowerIrp .
Configuration requise
Condition requise | Valeur |
---|---|
Client minimal pris en charge | Disponible à partir de Windows 8. |
Plateforme cible | Desktop (Expérience utilisateur) |
En-tête | wdm.h (include Wdm.h) |
IRQL | PASSIVE_LEVEL |