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;
Membri
NumberOfBuses
Contiene il numero di bus sull'adattatore per cui vengono segnalati i dati delle richieste.
BusData[1]
Contiene una matrice di lunghezza variabile di strutture SCSI_BUS_DATA che contengono i dati della richiesta.
Osservazioni
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 gli autobus associati a una specifica scheda bus host SCSI (HBA). 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 sull'adattatore, pertanto la sua dimensione è uguale al numero di bus indicati nel NumberOf Bus membro di SCSI_ADAPTER_BUS_INFO.
Nella maggior parte dei casi, NumberOf Bus avrà un valore pari a 1. I primi autobus SCSI erano limitati a 36 obiettivi (anziché il limite corrente di 128), quindi alcuni fornitori producevano HBA con diversi autobus, al fine di aumentare il numero massimo di obiettivi. Per supportare queste schede HBA meno recenti, Windows fornisce un meccanismo per il recupero dei dati delle richieste da HBA con più autobus. Per gli adattatori con un singolo bus, NumberOf Bus 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 NumberOf Bus saranno maggiori di 1.
Subito dopo la matrice in BusData sono i dati di richiesta per tutti i dispositivi su tutti gli autobus che appartengono all'HBA. Il InquiryDataOffset membro di ogni struttura SCSI_BUS_DATA fornisce un offset ai dati della 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_DATAe tutte le strutture di SCSI_INQUIRY_DATA per un determinato bus vengono collegate insieme dal membro NextI inquiryDataOffset. Sarà presente un elenco separato per ogni bus SCSI e il NextInquiryDataOffset membro dell'ultima struttura in ogni elenco contiene un valore pari a zero.
Nell'esempio di pseudocodice seguente viene illustrato come eseguire le istruzioni sugli autobus 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 usare NextI inquiryDataOffset membro per individuare i dati della richiesta per l'unità logica successiva. Non provare a eseguire questa operazione con 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.
Fabbisogno
Requisito | Valore |
---|---|
intestazione | ntddscsi.h (include Ntddscsi.h) |