Fonction PoFxIdleComponent (wdm.h)
La routine PoFxIdleComponent décrémente le nombre de références d’activation sur le composant spécifié.
Syntaxe
void PoFxIdleComponent(
[in] POHANDLE Handle,
[in] ULONG Component,
[in] ULONG Flags
);
Paramètres
[in] Handle
Handle qui représente l’inscription de l’appareil auprès de l’infrastructure de gestion de l’alimentation (PoFx). Le pilote de périphérique a précédemment reçu ce handle de la routine PoFxRegisterDevice .
[in] Component
Index qui identifie le composant. Ce paramètre est un index dans le tableau Components de la structure PO_FX_DEVICE que le pilote de périphérique a utilisé pour inscrire l’appareil auprès de PoFx. Si le tableau Components contient N éléments, les index de composant vont de 0 à N–1.
[in] Flags
Indicateurs de l’opération inactive. Définissez ce membre sur zéro ou sur l’un des indicateurs PO_FX_FLAG_XXX bits suivants :
- PO_FX_FLAG_BLOCKING
- PO_FX_FLAG_ASYNC_ONLY
Valeur de retour
None
Remarques
Un pilote de périphérique appelle PoFxIdleComponent pour libérer une référence d’activation à un composant d’un appareil. Le pilote a obtenu la référence d’activation dans un appel précédent à la routine PoFxActivateComponent . Le pilote doit contenir une référence d’activation sur un composant uniquement pendant que le pilote doit accéder au composant. La conservation d’une référence d’activation sur un composant qui n’est pas utilisé empêche le composant d’entrer dans un état Fx de faible consommation.
Si le pilote ne contient aucune autre référence d’activation au composant, PoFxIdleComponent initie une transition de la condition active à la condition inactive. Une fois cette transition terminée, PoFx appelle la routine ComponentIdleConditionCallback du pilote pour le notifier. Si le pilote conserve une ou plusieurs références d’activation supplémentaires sur le composant, le composant reste dans la condition active et la routine ComponentIdleConditionCallback n’est pas appelée.
PoFx conserve un nombre de références d’activation pour chaque composant de l’appareil. La routine PoFxActivateComponent incrémente ce nombre et PoFxIdleComponent le décrémente. Le composant reste dans l’état actif alors que ce nombre est différent de zéro. Lorsque le pilote libère sa dernière référence d’activation sur un composant, le nombre décrémente à zéro et le composant entre dans la condition d’inactivité. Une fois que le composant est entré dans la condition d’inactivité, PoFx peut potentiellement basculer le composant vers un état Fx basse consommation. Pour plus d’informations, consultez PoFxActivateComponent.
Si indicateurs = PO_FX_FLAG_BLOCKING, l’appel PoFxIdleComponent est synchrone. Dans ce cas, PoFxIdleComponent attend de retourner jusqu’à ce que le composant termine la transition vers la condition d’inactivité. PoFxIdleComponent appelle la routine de rappel ComponentIdleConditionCallback du pilote pour informer le pilote que le composant est inactif. Ce rappel se produit dans le même thread que l’appel à PoFxIdleComponent, et PoFxIdleComponent retourne uniquement après le retour du rappel ComponentIdleConditionCallback .
Si indicateurs = PO_FX_FLAG_ASYNC_ONLY, l’appel PoFxIdleComponent est asynchrone. Dans ce cas, PoFxIdleComponent planifie le rappel ComponentIdleConditionCallback pour qu’il se produise dans un autre thread, puis retourne sans attendre que le rappel se produise. Le rappel peut se produire avant ou après le retour de PoFxIdleComponent . Le pilote doit s’appuyer sur le rappel ComponentIdleConditionCallback pour déterminer quand le composant termine la transition vers la condition d’inactivité. Jusqu’à ce que ce rappel se produise, le pilote doit supposer que le composant est peut-être toujours dans l’état actif.
Le pilote peut définir Flags = 0 pour indiquer qu’il ne se soucie pas de savoir si l’appel PoFxIdleComponent est synchrone ou asynchrone. Dans ce cas, PoFx décide s’il faut rendre l’appel synchrone ou asynchrone.
Configuration requise
Condition requise | Valeur |
---|---|
Client minimal pris en charge | Disponible à partir de Windows 8. |
Plateforme cible | Universal |
En-tête | wdm.h |
Bibliothèque | Ntoskrnl.lib |
DLL | Ntoskrnl.exe |
IRQL | <= DISPATCH_LEVEL |