Routine GetDescriptor del driver della classe di archiviazione

Per le operazioni di trasferimento dei dati, i driver della classe di archiviazione necessitano di informazioni di configurazione su ogni HBA che guida un bus a cui sono collegati i dispositivi. Per ottenere queste informazioni, un driver di classe chiama una routine GetDescriptor interna o implementa la stessa funzionalità nella routine StartDevice . Per informazioni su StartDevice, vedere Gestione dell'avvio PnP in un driver di classe di archiviazione.

Una routine GetDescriptor compila e configura le richieste di proprietà di query (IRP_MJ_DEVICE_CONTROL con IOCTL_STORAGE_QUERY_PROPERTY) per il driver di porta per recuperare i descrittori di dispositivo e adattatore archiviati dal driver di classe nell'estensione del dispositivo. Il driver di classe potrebbe anche impostare flag determinati dal driver-writer nell'estensione del dispositivo in base ai dati del descrittore restituiti.

Il driver di classe controlla i dati STORAGE_DEVICE_DESCRIPTOR restituiti per determinare le funzionalità del dispositivo (dati di richiesta SCSI o l'equivalente non SCSI), ad esempio il tipo di dispositivo SCSI, se il supporto del dispositivo (se presente) è rimovibile (RemovableMedia), se il dispositivo supporta più comandi in sospeso (CommandQueueing) e varie stringhe ID. Il driver di classe controlla i dati STORAGE_ADAPTER_DESCRIPTOR restituiti per determinare le funzionalità dell'adattatore, tra cui:

  • Il numero massimo di byte che un determinato HBA può trasferire in una singola operazione (MaximumTransferLength).

  • Se l'HBA può trasferire dati memorizzati nel buffer supportati da pagine fisiche non contigue (in altre parole, se supporta lo scatter/gather), quanti pagine fisiche non contigue per buffer può gestire in ogni operazione di trasferimento (MaximumPhysicalPages).

  • I requisiti di allineamento dell'HBA per i trasferimenti consentono al driver di classe di impostare correttamente il campo AlignmentRequirement nei suoi oggetti dispositivo (AlignmentMask).

    Anche le applicazioni che inviano richieste di IOCTL_SCSI_PASS_THROUGH potrebbero usare questo campo.

    Per altre informazioni sulla configurazione di AlignmentRequirement negli oggetti dispositivo, vedere Inizializzazione di un oggetto dispositivo.

  • Indica se l'HBA supporta l'accodamento con tag SCSI e/o le code interne per unità logica (CommandQueueing).

  • Indica se l'HBA supporta i trasferimenti sincroni (AcceleratedTransfer).

  • Indica se l'HBA memorizza i dati nella cache internamente (CachesData).

Il driver di classe deve archiviare queste informazioni nell'estensione del dispositivo FDO, in modo che le routine di dispatch possano garantire che tutte le richieste inviate al driver della porta di archiviazione siano conformi alle dimensioni, al numero di interruzioni fisiche e ai requisiti di allineamento dell'HBA sottostante. Per ulteriori informazioni sulle routine di dispacciamento dei driver di classe, vedere Routine di dispacciamento del driver di classe di archiviazione. Per altre informazioni sulla configurazione delle estensioni del dispositivo, vedere Configurazione dell'estensione del dispositivo di un driver di classe di archiviazione.