Condividi tramite


Gestione delle richieste di alimentazione alle periferiche di archiviazione

Un driver della classe di archiviazione è responsabile dell'emissione di comandi specifici del dispositivo per gestire le richieste di alimentazione. Più comunemente, un driver di classe di archiviazione:

  • Blocca l'I/O al dispositivo in risposta a una richiesta di alimentazione di query (IRP_MJ_POWER con IRP_MN_QUERY_POWER) se la gestione di tali I/O potrebbe impedire al driver di eseguire una richiesta di alimentazione impostata in un intervallo di tempo ragionevole

  • Imposta lo stato di alimentazione del dispositivo in risposta a una richiesta di alimentazione impostata (IRP_MJ_POWER con IRP_MN_SET_POWER)

  • Riavvia L'I/O nel dispositivo in risposta a una richiesta di alimentazione impostata per attivare il dispositivo

  • Inoltra le richieste di alimentazione al driver inferiore successivo.

Si noti che un driver deve chiamare PoStartNextPowerIrp e PoCallDriver, non IoCallDriver, per inviare richieste di alimentazione.

A meno che il driver della classe di archiviazione disponga di una routine StartIo , deve bloccare la coda specifica del driver della porta di archiviazione (IRP_MJ_SCSI con SRB_FUNCTION_LOCK_QUEUE) prima di impostare lo stato di alimentazione del dispositivo, per bloccare le operazioni non sincronizzate fino al completamento dell'operazione di alimentazione (che può richiedere diversi passaggi). Tutti gli SRB emessi per gestire l'operazione di alimentazione devono impostare SRB_FLAGS_BYPASS_LOCKED_QUEUE per assicurarsi di raggiungere il driver della porta. Al termine dell'impostazione dello stato di alimentazione, il driver dovrebbe sbloccare la coda (IRP_MJ_SCSI con SRB_FUNCTION_UNLOCK_QUEUE e SRB_FLAGS_BYPASS_LOCKED_QUEUE) in modo che il driver della porta possa riprendere l'invio di IRP in coda al dispositivo dopo aver eseguito l'alimentazione.

Se un driver della classe di archiviazione ha una routine StartIo , questa routine gestisce la sincronizzazione in modo che il driver di classe non debba bloccare in modo esplicito e sbloccare la coda specifica del driver della porta.

Un driver di classe non deve tentare di ignorare una coda bloccata da un altro driver.