Condividi tramite


Metodo IAdapterPowerManagement::P owerChangeState (portcls.h)

Il PowerChangeState metodo richiede che il dispositivo cambi in un nuovo stato di alimentazione.

Sintassi

void PowerChangeState(
  [in] POWER_STATE NewState
);

Parametri

[in] NewState

Specifica il nuovo stato di alimentazione richiesto per il dispositivo. Questo parametro è un'unione di tipo POWER_STATE. Nuovo stato di alimentazione (NewState.DeviceState) può essere uno dei valori di enumerazione DEVICE_POWER_STATE illustrati nella tabella seguente.

Stato di alimentazione Significato
PowerDeviceD0 Stato di alimentazione completa (D0). Questo codice può essere una funzione dello stato di alimentazione corrente. Salvare il nuovo stato. Questo valore locale viene usato per determinare quando memorizzare nella cache gli accessi alle proprietà e quando consentire al driver di accedere all'hardware.
PowerDeviceD1 Lo stato di sospensione con la latenza più bassa rispetto al tempo di latenza necessario per tornare a D0
PowerDeviceD2 Stato di sospensione a bassa latenza. In questo stato, il driver di dispositivo non può presupporre che possa toccare l'hardware, quindi tutti gli accessi devono essere memorizzati nella cache e l'hardware ripristinato all'ingresso di D0.
PowerDeviceD3 Uno stato di ibernazione completo ed è lo stato di sospensione della latenza più lungo. Il driver non può accedere all'hardware in questo stato e deve memorizzare nella cache gli accessi hardware e ripristinare l'hardware al ritorno a D0 o D1

Valore restituito

nessuno

Osservazioni

PortCls chiama il PowerChangeState metodo in risposta a un IRP di alimentazione IRP_MN_SET_POWER . Questa chiamata non deve avere esito negativo. PortCls e il sistema usano la PowerChangeState chiamata per inserire il dispositivo nello stato di alimentazione desiderato. Quando il sistema tenta di sospendere o riprendere un flusso audio attivo, il driver deve essere in grado di salvare o ripristinare il contesto di dispositivo in modo appropriato.

Per assistere il driver, PortCls sospende tutti i flussi audio attivi prima di chiamare questo metodo per posizionare il dispositivo in stato di sospensione. Dopo aver chiamato questo metodo, PortCls rimuoverà i flussi audio attivi per riattivare il dispositivo. I miniport possono scegliere una notifica aggiuntiva usando l'interfaccia IPowerNotify .

Il driver miniport deve eseguire la modifica richiesta allo stato di alimentazione del dispositivo prima di tornare dalla PowerChangeState chiamata. Se il driver miniport deve salvare o ripristinare qualsiasi stato del dispositivo prima di una modifica dello stato di alimentazione, il driver miniport deve supportare l'interfaccia IPowerNotify , che consente di ricevere un avviso anticipato di tale modifica. Prima di tornare da una PowerChangeState chiamata riuscita, il driver miniport deve memorizzare nella cache il nuovo stato di alimentazione.

Mentre il driver miniport è in uno degli stati di sospensione (qualsiasi stato diverso da PowerDeviceD0), deve evitare la scrittura nell'hardware. Il driver miniport deve memorizzare nella cache tutti gli accessi hardware che devono essere posticipati fino a quando il dispositivo non viene nuovamente acceso. Se lo stato di alimentazione passa da uno degli stati di sospensione a PowerDeviceD0, il driver miniport deve eseguire qualsiasi accesso hardware posticipato dopo aver acceso il dispositivo. Se lo stato di alimentazione passa da PowerDeviceD0 a uno stato di sospensione, il driver miniport può eseguire tutti gli accessi hardware necessari durante la PowerChangeState chiamata prima di spegnere il dispositivo.

Mentre è spento, un driver miniport non viene mai chiesto di creare un oggetto driver miniport o un oggetto flusso. PortCls inserisce sempre il dispositivo nello stato PowerDeviceD0 prima di chiamare il metodo NewStream del driver miniport.

Il codice per questo metodo deve risiedere nella memoria di paging.

Requisiti

Requisito Valore
Piattaforma di destinazione Universale
Intestazione portcls.h (include Portcls.h)

Vedi anche

IAdapterPowerManagement

IPowerNotify

IRP_MN_SET_POWER