Routine getDescriptor del driver di classe di archiviazione
Per le operazioni di trasferimento dei dati, i driver della classe di archiviazione richiedono 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 richieste di proprietà query (IRP_MJ_DEVICE_CONTROL con IOCTL_STORAGE_QUERY_PROPERTY) per il driver della porta per recuperare i descrittori del dispositivo e dell'adattatore archiviati dal driver di classe nell'estensione del dispositivo. Il driver di classe può 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 restituiti STORAGE_DEVICE_DESCRIPTOR 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 noncontiguo (in altre parole, se supporta la dispersione/raccolta), il numero di pagine fisiche noncontiguo per buffer che può gestire, per operazione di trasferimento (MaximumPhysicalPages).
I requisiti di allineamento di HBA per i trasferimenti in modo che il driver di classe possa impostare correttamente il campo AlignmentRequirement nei relativi oggetti dispositivo (AlignmentMask).
Le applicazioni che inviano richieste di IOCTL_SCSI_PASS_THROUGH possono usare anche questo campo.
Per altre informazioni sulla configurazione di AlignmentRequirement negli oggetti del dispositivo, vedere Inizializzazione di un oggetto Device.
Se l'HBA supporta accodamento con tag SCSI e/o code interne per unità logica (CommandQueueing).
Se l'HBA supporta i trasferimenti sincroni (AcceleratedTransfer).
Se l'HBA memorizza nella cache i dati internamente (CachesData).
Il driver di classe deve archiviare queste informazioni nell'estensione del dispositivo fdO in modo che le routine di invio 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 altre informazioni sulle routine di invio dei driver di classe, vedere Routine di invio della classe di archiviazione. Per altre informazioni sulla configurazione delle estensioni del dispositivo, vedere Configurazione di un'estensione del dispositivo del driver di classe di archiviazione.