Condividi tramite


Configurazione dell'estensione del dispositivo di un driver di classe di archiviazione

Nelle estensioni del dispositivo di ogni oggetto dispositivo creato da un driver di classe di archiviazione, tale driver fornisce archiviazione per i dati determinati dal driver usato per gestire le richieste di I/O per il dispositivo, ad esempio il puntatore al PDO passato a AddDevice, il puntatore all'oggetto dispositivo restituito da IoAttachDeviceToDeviceToDeviceStack, un puntatore indietro al proprio oggetto dispositivo, e così via.

La maggior parte dei driver di classe di archiviazione fornisce anche l'archiviazione per le informazioni seguenti:

  • Valore di timeout specifico del tipo di dispositivo

    Il driver di classe può passare il valore di timeout in SRB che invia al driver di porta, che ora SRB_FUNCTION_EXECUTE_SCSI richieste (vedere SCSI_REQUEST_BLOCK) per conto di ogni driver di classe. Il driver di porta restituisce un SRB con il relativo membro SrbStatus impostato su SRB_STATUS_TIMEOUT se l'intervallo tra quando il driver di porta invia la richiesta al driver sottostante e quando la richiesta completa supera il valore di timeout specificato.

  • Puntatore alla routine di gestione degli errori del driver di classe

    Per altre informazioni sulla gestione degli errori nei driver della classe di archiviazione, vedere Routine IoCompletion del driver della classe di archiviazione.

  • Conteggio che il driver gestisce gli errori del protocollo del bus nel dispositivo

  • Puntatore a un buffer allocato driver per i dati di senso

    Un driver di classe deve allocare memoria per i dati di senso restituiti dal pool allineato alla cache e non a pagine. Per altre informazioni sull'allocazione della memoria per i buffer driver, vedere Allocazione System-Space memoria.

  • Valore predefinito determinato dal driver per SrbFlags impostato dal driver di classe in SRB

  • Puntatore a un'intestazione di elenco lookaside se il driver imposta un elenco lookaside per gli SRB allocati

    Per altre informazioni, vedere Uso degli elenchi lookaside .

  • Puntatori a un'IRP e a una SRB allocata e mantenuta in riserva per le richieste che devono avere esito positivo anche in condizioni di memoria bassa, per operazioni di paging e operazioni di recupero degli errori ( ad esempio quelle eseguite da una routine releaseQueue di un driver di classe di archiviazione)

  • Puntatore al STORAGE_ADAPTER_DESCRIPTOR e STORAGE_DEVICE_DESCRIPTOR dati raccolti dal driver di porta dall'HBA

    Per informazioni sul modo in cui i driver di classe ottengono e usano questi dati, vedere Routine GetDescriptor del driver di classe di archiviazione.

  • Flag che indicano lo stato PnP precedente e corrente, per gestire le transizioni tra stati nel dispositivo

  • Flag che indica lo stato di alimentazione corrente del dispositivo, per evitare un lavoro aggiuntivo nella gestione delle richieste di alimentazione ridondanti

  • Numero di file di paging di sistema, se presenti, nel dispositivo, in base alle richieste di paging-notifica ricevute dal driver (IRP_MJ_PNP con IRP_MN_DEVICE_USAGE_NOTIFICATION)

Un driver della classe di archiviazione non può inviare richieste al dispositivo tramite il driver della porta di archiviazione senza usare il puntatore a oggetti dispositivo restituito da IoAttachDeviceToDeviceStack e archiviato nell'estensione del dispositivo dalla routine AddDevice del driver.