PO_FX_COMPONENT_IDLE_STATE_CALLBACK funzione di callback (wdm.h)
La routine di callback ComponentIdleStateCallback invia una notifica al driver di una modifica in sospeso allo stato di alimentazione Fx del componente specificato.
Sintassi
PO_FX_COMPONENT_IDLE_STATE_CALLBACK PoFxComponentIdleStateCallback;
void PoFxComponentIdleStateCallback(
[in] PVOID Context,
[in] ULONG Component,
[in] ULONG State
)
{...}
Parametri
[in] Context
Puntatore al contesto di dispositivo. Il driver di dispositivo usa questo contesto per archiviare informazioni sullo stato di alimentazione corrente del dispositivo. Il driver di dispositivo ha specificato questo puntatore nel membro DeviceContext della struttura PO_FX_DEVICE usata dal driver per registrare il dispositivo con il framework di risparmio energia (PoFx). Questo contesto è opaco a PoFx.
[in] Component
Specifica il numero del componente. Questo parametro è un indice nella matrice Components nella struttura PO_FX_DEVICE usata dal driver di dispositivo per registrare il dispositivo con PoFx. Se la matrice Components contiene N elementi, gli indici dei componenti sono compresi tra 0 e N-1.
[in] State
Specifica il nuovo stato di alimentazione Fx in cui verrà modificato il componente. Se questo parametro è zero, il nuovo stato è F0; se questo parametro è uno, il nuovo stato è F1; E così via.
Valore restituito
nessuno
Osservazioni
Quando PoFx chiama la routine ComponentIdleStateCallback del driver, potrebbe essere necessario preparare il driver per la modifica dello stato Fx in sospeso. Al termine delle operazioni di preparazione necessarie, il driver deve chiamare la routine PoFxCompleteIdleState per notificare a PoFx che il driver ha completato la risposta al callback ComponentIdleStateCallback . La chiamata PoFxCompleteIdleState può verificarsi prima o dopo la restituzione della routine ComponentIdleStateCallback .
Se il componente deve passare da F0 a uno stato Fx a basso consumo in cui il dispositivo perderà lo stato hardware del componente, il driver deve salvare lo stato hardware del componente prima che si verifichi la transizione al nuovo stato Fx. Se il componente deve passare da uno stato Fx a basso consumo a F0 e lo stato hardware è stato salvato in precedenza, il driver deve ripristinare lo stato hardware dopo il ripristino dell'alimentazione nel componente.
Per alcuni dispositivi, lo stato di alimentazione di un componente potrebbe essere controllato nell'hardware del dispositivo. Per questi dispositivi, il driver è in genere responsabile della modifica dello stato di alimentazione del componente. Per altri dispositivi, lo stato di alimentazione di un componente potrebbe essere controllato dall'hardware esterno al dispositivo e il driver in genere deve basarsi su PoFx per configurare lo stato di alimentazione del componente.
Se il driver è responsabile della configurazione dello stato di alimentazione del componente, il driver deve modificare lo stato di alimentazione in risposta al callback ComponentIdleStateCallback . Per una transizione da F0 a uno stato Fx a basso consumo, il componente si trova in F0 all'ingresso della routine ComponentIdleStateCallback e il driver deve cambiare il nuovo stato Fx prima di chiamare PoFxCompleteIdleState. Per una transizione da uno stato Fx a basso consumo a F0, il componente si trova nello stato Fx a basso consumo all'ingresso della routine ComponentIdleStateCallback e il driver deve passare a F0 prima di chiamare PoFxCompleteIdleState.
Se il driver non è responsabile della configurazione dello stato di alimentazione del componente, il driver deve presupporre che il componente sia sempre nello stato F0 all'ingresso della routine ComponentIdleStateCallback . Per una transizione in sospeso da F0 a uno stato Fx a basso consumo, la transizione al nuovo stato Fx non viene eseguita fino a quando il driver chiama PoFxCompleteIdleState. Per una transizione da uno stato Fx a basso consumo a F0, la transizione a F0 avviene prima della chiamata della routine ComponentIdleStateCallback .
PoFx non chiama mai la routine ComponentIdleStateCallback per passare direttamente da uno stato Fx a basso consumo a un altro stato Fx a basso consumo. Ad esempio, PoFx potrebbe dover spostare un componente da uno stato Fx a basso consumo a un altro in risposta a una chiamata alla routine PoFxSetComponentLatency, PoFxSetComponentResidency o PoFxSetComponentWake . In questo caso, PoFx chiama innanzitutto la routine ComponentIdleStateCallback per passare dallo stato Fx precedente a F0 e quindi chiama la routine ComponentIdleStateCallback una seconda volta per passare da F0 al nuovo stato Fx.
Esempio
Per definire una routine di callback ComponentIdleStateCallback , è innanzitutto necessario fornire una dichiarazione di funzione che identifica il tipo di routine di callback che si sta definendo. Windows fornisce un set di tipi di funzione di callback per i driver. La dichiarazione di una funzione tramite i tipi di funzione di callback consente di analizzare il codice per i driver, l'SDV ( Static Driver Verifier ) e altri strumenti di verifica di trovare errori ed è un requisito per la scrittura di driver per il sistema operativo Windows.
Ad esempio, per definire una routine di callback ComponentIdleStateCallback denominata MyComponentIdleStateCallback
, usare il tipo PO_FX_COMPONENT_IDLE_STATE_CALLBACK come illustrato nell'esempio di codice seguente:
PO_FX_COMPONENT_IDLE_STATE_CALLBACK MyComponentIdleStateCallback;
Implementare quindi la routine di callback come indicato di seguito:
_Use_decl_annotations_
VOID
MyComponentIdleStateCallback(
PVOID Context,
ULONG Component,
ULONG State
)
{
// Function body
}
Il tipo di funzione PO_FX_COMPONENT_IDLE_STATE_CALLBACK è definito nel file di intestazione Wdm.h. Per identificare in modo più accurato gli errori quando si eseguono gli strumenti di analisi del codice, assicurarsi di aggiungere l'annotazione _Use_decl_annotations_
alla definizione della funzione. L'annotazione _Use_decl_annotations_
garantisce che vengano utilizzate le annotazioni applicate al tipo di funzione PO_FX_COMPONENT_IDLE_STATE_CALLBACK nel file di intestazione. Per altre informazioni sui requisiti per le dichiarazioni di funzione, vedere Dichiarazione di funzioni tramite tipi di ruolo di funzione per i driver WDM. Per informazioni su _Use_decl_annotations_
, vedere Annotazione del comportamento della funzione.
Requisiti
Requisito | Valore |
---|---|
Client minimo supportato | Supportato in Windows 8 e versioni successive di Windows. |
Piattaforma di destinazione | Desktop |
Intestazione | wdm.h (include Wudfwdm.h) |
IRQL | Chiamato in IRQL <= DISPATCH_LEVEL. |