Share via


IRP_MN_POWER_SEQUENCE

Questo IRP restituisce i valori della sequenza di alimentazione per un dispositivo.

Codice principale

IRP_MJ_POWER

Data di invio

Un driver invia l'IRP come ottimizzazione per determinare se il dispositivo ha effettivamente immesso uno stato di alimentazione specifico. Il supporto per questa IRP è facoltativo.

Per inviare questa IRP, un driver deve chiamare IoAllocateIrp per allocare l'IRP, specificando il codice IRP principale IRP_MJ_POWER e il codice IRP secondario IRP_MN_POWER_SEQUENCE. Il driver deve quindi chiamare IoCallDriver (Windows Vista) o PoCallDriver (Windows Server 2003, Windows XP e Windows 2000) per passare l'IRP al driver inferiore successivo. Il power manager non può inviare questa istanza di IRP.

I mittenti di questo IRP devono essere in esecuzione in IRQL <= DISPATCH_LEVEL.

Parametri di input

Nessuno.

Parametri di output

Parameters.PowerSequence punta a una struttura POWER_SEQUENCE con i membri seguenti:

SequenceD1
Numero di volte in cui il dispositivo è in stato di alimentazione D1 o inferiore.

SequenceD2
Numero di volte in cui il dispositivo è in stato di alimentazione D2 o inferiore.

SequenceD3
Numero di volte in cui il dispositivo è in stato di alimentazione D3.

I valori della sequenza tengono traccia del numero minimo di volte in cui un dispositivo è stato nello stato di alimentazione corrispondente o in uno stato di alimentazione inferiore.

Il driver del bus incrementa i valori in SequenceD1, SequenceD2 e SequenceD3 almeno ogni volta che il dispositivo entra nello stato di alimentazione corrispondente o in uno stato di alimentazione inferiore.

Blocco dello stato I/O

Un driver imposta Irp-IoStatus.Status> su STATUS_SUCCESS per indicare che ha restituito le informazioni richieste oppure STATUS_NOT_IMPLEMENTED per indicare che non supporta questo IRP.

Operazione

Questo IRP restituisce i valori della sequenza di alimentazione per un dispositivo. I driver del bus possono gestire facoltativamente; i driver di funzione e filtro possono inviare facoltativamente.

Per un dispositivo che richiede molto tempo per modificare lo stato, questo IRP offre un'ottimizzazione utile. Ogni volta che il dispositivo modifica lo stato di alimentazione, il driver del bus incrementa il valore della sequenza per tale stato di alimentazione. Il driver del bus inizializza i valori della sequenza in fase di avvio e li incrementa continuamente in seguito; non devono essere reimpostati su zero.

Un proprietario di criteri del dispositivo può inviare questo IRP una volta per ottenere i valori della sequenza prima di arrestare il dispositivo e ancora una volta per ottenere nuovi valori durante il ripristino dell'alimentazione nel dispositivo. Confrontando i due set di valori, il driver può determinare se il dispositivo ha effettivamente immesso lo stato con alimentazione inferiore. Se il dispositivo non ha perso energia, il driver può evitare una reinizializzazione che richiede tempo quando il dispositivo torna allo stato D0.

Ad esempio, se il dispositivo richiede molto tempo per ripristinare l'alimentazione al raggiungimento dello stato D2, il driver può archiviare il valore SequenceD2 prima di impostare lo stato del dispositivo su D2 o inferiore. Successivamente, quando l'alimentazione viene ripristinata nel dispositivo, il driver può confrontare il nuovo valore SequenceD2 con il relativo valore archiviato per determinare se lo stato del dispositivo è effettivamente eliminato sotto D2. Se i valori corrispondono, il dispositivo non ha effettivamente immesso lo stato di alimentazione D2 o uno stato inferiore e il driver può evitare la reinizializzazione del dispositivo.

Requisiti

Intestazione

Wdm.h (include Wdm.h, Ntddk.h o Ntifs.h)