Condividi tramite


Funzione PoFxIdleComponent (wdm.h)

La routine PoFxIdleComponent decrementa il conteggio dei riferimenti di attivazione nel componente specificato.

Sintassi

void PoFxIdleComponent(
  [in] POHANDLE Handle,
  [in] ULONG    Component,
  [in] ULONG    Flags
);

Parametri

[in] Handle

Handle che rappresenta la registrazione del dispositivo con il framework di risparmio energia (PoFx). Il driver di dispositivo ha ricevuto in precedenza questo handle dalla routine PoFxRegisterDevice .

[in] Component

Indice che identifica il componente. Questo parametro è un indice nella matrice Components nella struttura PO_FX_DEVICE utilizzata dal driver del dispositivo per registrare il dispositivo con PoFx. Se la matrice Components contiene elementi N, gli indici dei componenti sono compresi tra 0 e N-1.

[in] Flags

Flag per l'operazione inattiva. Impostare questo membro su zero o su uno dei flag seguenti PO_FX_FLAG_XXX bit:

  • PO_FX_FLAG_BLOCKING
  • PO_FX_FLAG_ASYNC_ONLY
Questi due bit di flag si escludono a vicenda. Per altre informazioni, vedere la sezione Osservazioni.

Valore restituito

nessuno

Osservazioni

Un driver di dispositivo chiama PoFxIdleComponent per rilasciare un riferimento di attivazione a un componente in un dispositivo. Il driver ha ottenuto il riferimento all'attivazione in una chiamata precedente alla routine PoFxActivateComponent . Il driver deve contenere un riferimento di attivazione solo in un componente mentre il driver deve accedere al componente. Per contenere un riferimento di attivazione su un componente che non viene usato impedisce al componente di immettere uno stato fx a bassa potenza.

Se il driver non contiene altri riferimenti di attivazione al componente, PoFxIdleComponent avvia una transizione dalla condizione attiva alla condizione inattiva. Al termine di questa transizione, PoFx chiama la routine ComponentIdleConditionCallback del driver per notificare al driver. Se il driver mantiene uno o più riferimenti di attivazione aggiuntivi nel componente, il componente rimane nella condizione attiva e la routine ComponentIdleConditionCallback non viene chiamata.

PoFx gestisce un numero di riferimenti di attivazione per ogni componente nel dispositivo. La routine PoFxActivateComponent incrementa questo conteggio e PoFxIdleComponent la decrementa. Il componente rimane nella condizione attiva mentre questo conteggio è diverso da zero. Quando il driver rilascia l'ultimo riferimento di attivazione a un componente, il conteggio decrementa su zero e il componente entra nella condizione inattiva. Dopo che il componente entra nella condizione inattiva, PoFx può potenzialmente passare a uno stato fx a bassa potenza. Per altre informazioni, vedere PoFxActivateComponent.

Se Flags = PO_FX_FLAG_BLOCKING, la chiamata PoFxIdleComponent è sincrona. In questo caso, PoFxIdleComponent attende di tornare fino al completamento della transizione alla condizione inattiva. PoFxIdleComponent chiama la routine di callback ComponentIdleConditionCallback del driver per informare il driver che il componente si trova nella condizione di inattività. Questo callback si verifica nello stesso thread della chiamata a PoFxIdleComponent e PoFxIdleComponent restituisce solo dopo il callback ComponentIdleConditionCallback .

Se flag PO_FX_FLAG_ASYNC_ONLY = , la chiamata PoFxIdleComponent è asincrona. In questo caso, PoFxIdleComponent pianifica il callback ComponentIdleConditionCallback da eseguire in un altro thread e quindi restituisce senza attendere che venga eseguito il callback. Il callback può verificarsi prima o dopo la restituzione di PoFxIdleComponent . Il driver deve basarsi sul callback ComponentIdleConditionCallback per determinare quando il componente completa la transizione alla condizione inattiva. Fino a quando non si verifica questo callback, il driver deve presupporre che il componente possa comunque trovarsi nella condizione attiva.

Il driver può impostare Flags = 0 per indicare che non importa se la chiamata PoFxIdleComponent è sincrona o asincrona. In questo caso, PoFx decide se effettuare la chiamata sincrona o asincrona.

Requisiti

Requisito Valore
Client minimo supportato Disponibile a partire da Windows 8.
Piattaforma di destinazione Universale
Intestazione wdm.h
Libreria Ntoskrnl.lib
DLL Ntoskrnl.exe
IRQL <= DISPATCH_LEVEL

Vedi anche

ComponentIdleConditionCallback

PO_FX_DEVICE

PO_FX_FLAG_XXX

PoFxActivateComponent

PoFxRegisterDevice