SCSI_ADAPTER_BUS_INFO 結構 (ntddscsi.h)
SCSI_ADAPTER_BUS_INFO結構會與 IOCTL_SCSI_GET_INQUIRY_DATA 要求搭配使用,以擷取指定 SCSI 總線上所有裝置的 SCSI 查詢數據。
語法
typedef struct _SCSI_ADAPTER_BUS_INFO {
UCHAR NumberOfBuses;
SCSI_BUS_DATA BusData[1];
} SCSI_ADAPTER_BUS_INFO, *PSCSI_ADAPTER_BUS_INFO;
成員
NumberOfBuses
包含正在報告查詢數據之適配卡上的總線數目。
BusData[1]
包含保存查詢數據的 SCSI_BUS_DATA 結構的可變長度陣列。
備註
SCSI_ADAPTER_BUS_INFO是一種標頭結構,描述 IOCTL_SCSI_GET_INQUIRY_DATA 要求的輸出緩衝區配置。 此要求會針對與特定 SCSI 主機總線適配卡相關聯的所有總線上所有邏輯單元傳回 SCSI 查詢數據, (HBA) 。 SCSI_ADAPTER_BUS_INFO的 BusData 成員包含 SCSI_BUS_DATA 結構的可變長度陣列。 此陣列具有適配卡上每個SCSI總線的一個元素,因此其大小等於 SCSI_ADAPTER_BUS_INFO NumberOfBuses 成員中所指出的總線數目。
在大部分情況下, NumberOfBuses 的值會是 1。 早期 SCSI 總線限制為 36 個目標 (,而不是目前的限制 128) ,因此有些廠商製造了具有數個總線的 HBA,以增加目標數目上限。 為了支持這些較舊的 HBA,Windows 提供從具有多個總線的 HBA 擷取查詢數據的機制。 對於具有單一總線的配接器, NumberOfBuses 將會是一個,而 SCSI_ADAPTER_BUS_INFO 的 BusData 成員只有一個元素,但具有多個總線的 HBA 會產生多個SCSI_BUS_DATA結構的數據, 而 NumberOfBuses 將會大於 1。
在 BusData 中緊接數位之後,就是所有屬於 HBA 之公交車上所有裝置的查詢數據。 每個SCSI_BUS_DATA結構的 In查詢DataOffset 成員會針對對應的 SCSI 總線提供查詢數據的位移。
每個 SCSI 總線的查詢數據都包含該總線上所有邏輯單元的相關信息。 每個邏輯單元的查詢數據都會格式化為類型 為 SCSI_INQUIRY_DATA,而特定總線的所有SCSI_INQUIRY_DATA結構都會由 NextIn 查詢DataOffset 成員連結在一起。 每個 SCSI 總線會有個別的清單,而每個清單中最後一個結構的 NextIn 查詢DataOffset 成員會包含零的值。
下列虛擬程式代碼範例說明如何逐步執行 HBA 上的 SCSI 總線,以及每個總線的邏輯單元、讀取和列印每個邏輯單元的查詢數據:
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");
}
您必須使用 NextIn查詢DataOffset 成員來尋找下一個邏輯單元的查詢數據。 請勿嘗試透過指標算術來執行此動作。 每個 HBA 迷你埠驅動程式的每個SCSI_INQUIRY_DATA結構位置可能不同,因為它取決於數據對齊需求。
規格需求
需求 | 值 |
---|---|
標頭 | ntddscsi.h (包含 Ntddscsi.h) |