struttura SCSI_ADAPTER_BUS_INFO (ntddscsi.h)
La struttura SCSI_ADAPTER_BUS_INFO viene usata insieme alla richiesta di IOCTL_SCSI_GET_INQUIRY_DATA di recuperare i dati di richiesta SCSI per tutti i dispositivi in un determinato bus SCSI.
Sintassi
typedef struct _SCSI_ADAPTER_BUS_INFO {
UCHAR NumberOfBuses;
SCSI_BUS_DATA BusData[1];
} SCSI_ADAPTER_BUS_INFO, *PSCSI_ADAPTER_BUS_INFO;
Members
NumberOfBuses
Contiene il numero di bus sull'adattatore per cui vengono segnalati i dati di richiesta.
BusData[1]
Contiene una matrice di lunghezza variabile di strutture SCSI_BUS_DATA che contengono i dati di richiesta.
Commenti
SCSI_ADAPTER_BUS_INFO è una struttura di intestazione che descrive il layout del buffer di output della richiesta di IOCTL_SCSI_GET_INQUIRY_DATA . Questa richiesta restituisce i dati di richiesta SCSI per tutte le unità logiche su tutti i bus associati a una scheda bus host SCSI specifica. Il membro BusData di SCSI_ADAPTER_BUS_INFO contiene una matrice di lunghezza variabile di strutture SCSI_BUS_DATA . Questa matrice ha un elemento per ogni bus SCSI nell'adattatore, pertanto le dimensioni sono uguali al numero di bus indicati nel membro NumberOfBuses di SCSI_ADAPTER_BUS_INFO.
Nella maggior parte dei casi , NumberOfBuses avrà un valore pari a 1. I primi autobus SCSI erano limitati a 36 destinazioni (anziché il limite corrente di 128), quindi alcuni fornitori producevano HBA con diversi autobus, al fine di aumentare il numero massimo di destinazioni. Per supportare queste schede HBA meno recenti, Windows fornisce un meccanismo per il recupero dei dati di richiesta da HBA con più bus. Per gli adattatori con un singolo bus, NumberOfBuses sarà uno e il membro BusData di SCSI_ADAPTER_BUS_INFO avrà un solo elemento, ma gli HBA con più bus genereranno dati per più strutture SCSI_BUS_DATA e NumberOfBuses sarà maggiore di 1.
Subito dopo la matrice in BusData sono i dati di richiesta per tutti i dispositivi su tutti i bus appartenenti all'HBA. Il membro InquiryDataOffset di ogni struttura SCSI_BUS_DATA fornisce un offset ai dati di richiesta per il bus SCSI corrispondente.
I dati di richiesta per ogni bus SCSI includono informazioni su tutte le unità logiche sul bus. I dati di richiesta di ogni unità logica vengono formattati in una struttura di tipo SCSI_INQUIRY_DATA e tutte le strutture SCSI_INQUIRY_DATA per un determinato bus sono collegate dal membro NextI inquiryDataOffset . Sarà presente un elenco separato per ogni bus SCSI e il membro NextInquiryDataOffset dell'ultima struttura in ogni elenco contiene un valore pari a zero.
L'esempio di pseudocodice seguente illustra come esaminare i bus SCSI su un HBA e le unità logiche per ogni bus, leggere e stampare i dati di richiesta per ogni unità logica:
VOID
PrintInquiryData(PCHAR DataBuffer)
{
PSCSI_ADAPTER_BUS_INFO adapterInfo;
PSCSI_INQUIRY_DATA inquiryData;
ULONG i, j;
adapterInfo = (PSCSI_ADAPTER_BUS_INFO) DataBuffer;
for (i = 0; i < adapterInfo->NumberOfBuses; i++) {
inquiryData = (PSCSI_INQUIRY_DATA) (DataBuffer +
adapterInfo->BusData[i].InquiryDataOffset);
while (adapterInfo->BusData[i].InquiryDataOffset) {
printf(" %d %d %3d %s %.28s ",
i,
inquiryData->TargetId,
inquiryData->Lun,
(inquiryData->DeviceClaimed) ? "Y" : "N",
&inquiryData->InquiryData[8]);
for (j = 0; j < 8; j++) {
printf("%02X ", inquiryData->InquiryData[j]);
}
printf("\n");
if (inquiryData->NextInquiryDataOffset == 0) {
break;
}
inquiryData = (PSCSI_INQUIRY_DATA) (DataBuffer +
inquiryData->NextInquiryDataOffset);
}
}
printf("\n\n");
}
È necessario utilizzare il membro NextI inquiryDataOffset per individuare i dati di richiesta per l'unità logica successiva. Non provare a eseguire questa operazione tramite l'aritmetica del puntatore. Il posizionamento di ogni struttura SCSI_INQUIRY_DATA è potenzialmente diverso per ogni driver miniport HBA, perché dipende dai requisiti di allineamento dei dati.
Requisiti
Requisito | Valore |
---|---|
Intestazione | ntddscsi.h (include Ntddscsi.h) |