Condividi tramite


Power IRP per singoli dispositivi

Un'IRP di alimentazione del dispositivo specifica il codice IRP principale IRP_MJ_POWER, uno dei codici IRP di alimentazione secondaria elencati di seguito e il valore DevicePowerState nel membro Power.Type.

IRP_MN_QUERY_POWER

IRP_MN_SET_POWER

IRP_MN_WAIT_WAKE

IRP_MN_POWER_SEQUENCE

Tutti i driver in uno stack di dispositivi ricevono tali IRP; normalmente, solo il gestore dei criteri di alimentazione del dispositivo può inviare questi indirizzi IP. Tuttavia, power manager può inviare un'IRP di alimentazione del dispositivo durante l'esecuzione del rilevamento inattivo per conto di un dispositivo, come illustrato in Uso delle routine di Power Manager per il rilevamento inattivo.

Un driver invia un'IRP di alimentazione del dispositivo per uno dei motivi seguenti:

  • Per eseguire query o modificare lo stato di alimentazione del dispositivo in risposta a un'IRP di alimentazione del sistema

  • Per inserire il dispositivo in uno stato di sospensione per risparmiare energia

  • Per restituire il dispositivo allo stato funzionante dopo che è stato addormentato

  • Per consentire al dispositivo di riattivarsi in risposta a un segnale esterno

  • Per ottenere un valore della sequenza di alimentazione durante l'alimentazione di un dispositivo

Nella figura seguente viene illustrata la sequenza di passaggi che si verificano per inviare, inoltrare e completare un'IRP di alimentazione del dispositivo.

diagramma che illustra il percorso di un'irp di alimentazione del dispositivo.

Come illustrato nella figura precedente, viene inviata, inoltrata e completata la procedura seguente:

  1. Il proprietario dei criteri di alimentazione del dispositivo chiama PoRequestPowerIrp per allocare un'IRP di alimentazione del dispositivo, specificando l'oggetto PDO di destinazione dell'IRP e una routine di callback da richiamare al termine dell'IRP.

  2. Il risparmio energia alloca un'IRP di alimentazione del dispositivo e la invia al driver principale nello stack di dispositivi per il PDO di destinazione.

  3. Il driver esegue le azioni seguenti:

    • Imposta una routine IoCompletion se necessario.

    • Chiama PoStartNextPowerIrp (Windows Server 2003, Windows XP e Windows 2000) se non viene usata una routine di completamento. A partire da Windows Vista, questa chiamata non è necessaria e tale chiamata non esegue alcuna operazione di risparmio energia.

    • Chiama IoCallDriver (Windows 7 e Windows Vista) o chiama PoCallDriver (Windows Server 2003, Windows XP e Windows 2000) per passare l'IRP fino al driver inferiore successivo.

    Ogni conducente nello stack esegue questa operazione fino a quando l'IRP raggiunge il driver del bus. Se un driver deve avere esito negativo, deve farlo immediatamente e chiamare IoCompleteRequest.

  4. Il driver del bus, che gestisce l'oggetto PDO del dispositivo, esegue l'azione richiesta e quindi chiama IoCompleteRequest per completare l'IRP . Un driver del bus può avere esito negativo su un'IRP del dispositivo se un dispositivo viene rimosso o nel processo di rimozione.

  5. Il gestore I/O chiama le routine IoCompletion impostate dai driver man mano che hanno passato l'IRP verso il basso dello stack. Dopo aver chiamato tutte le routine IoCompletion , viene eseguita la routine di callback.

Per altre informazioni sugli IRP di alimentazione del dispositivo, vedere Gestione di Power per singoli dispositivi e dispositivi di supporto che dispongono di funzionalità di Wake-Up. Per informazioni dettagliate sull'IRP della sequenza di alimentazione, vedere IRP_MN_POWER_SEQUENCE.