Freigeben über


SCSI_ADAPTER_BUS_INFO Struktur (ntddscsi.h)

Die SCSI_ADAPTER_BUS_INFO-Struktur wird in Verbindung mit der IOCTL_SCSI_GET_INQUIRY_DATA Anforderung zum Abrufen der SCSI-Untersuchungsdaten für alle Geräte in einem bestimmten SCSI-Bus verwendet.

Hinweis Der SCSI-Porttreiber und die SCSI-Miniporttreibermodelle können in Zukunft geändert oder nicht mehr verfügbar sein. Stattdessen empfehlen wir die Verwendung des Storport-Treibers und Storport Miniport Treibermodelle.
 

Syntax

typedef struct _SCSI_ADAPTER_BUS_INFO {
  UCHAR         NumberOfBuses;
  SCSI_BUS_DATA BusData[1];
} SCSI_ADAPTER_BUS_INFO, *PSCSI_ADAPTER_BUS_INFO;

Angehörige

NumberOfBuses

Enthält die Anzahl der Busse auf dem Adapter, für die Untersuchungsdaten gemeldet werden.

BusData[1]

Enthält ein Array mit variabler Länge von SCSI_BUS_DATA Strukturen, die die Untersuchungsdaten enthalten.

Bemerkungen

SCSI_ADAPTER_BUS_INFO ist eine Headerstruktur, die das Layout des Ausgabepuffers der IOCTL_SCSI_GET_INQUIRY_DATA-Anforderung beschreibt. Diese Anforderung gibt SCSI-Untersuchungsdaten für alle logischen Einheiten aller Busse zurück, die einem bestimmten SCSI-Hostbusadapter (HBA) zugeordnet sind. Das BusData--Element von SCSI_ADAPTER_BUS_INFO enthält ein Array mit variabler Länge von SCSI_BUS_DATA Strukturen. Dieses Array verfügt über ein Element für jeden SCSI-Bus auf dem Adapter, sodass seine Größe der Anzahl der im NumberOfBuses Mitglied von SCSI_ADAPTER_BUS_INFO angegebenen Busse entspricht.

In den meisten Fällen hat NumberOfBuses den Wert 1. Frühe SCSI-Busse waren auf 36 Ziele begrenzt (anstelle der aktuellen Grenze von 128), so dass einige Anbieter HBAs mit mehreren Bussen hergestellt haben, um die maximale Anzahl von Zielen zu erhöhen. Um diese älteren HBAs zu unterstützen, bietet Windows einen Mechanismus zum Abrufen von Untersuchungsdaten von HBAs mit mehreren Bussen. Für Adapter mit einem einzigen Bus ist NumberOfBuses eins, und das BusData- Mitglied von SCSI_ADAPTER_BUS_INFO verfügt nur über ein Element, aber HBAs mit mehreren Bussen generieren Daten für mehrere SCSI_BUS_DATA Strukturen, und NumberOfBuses größer als 1 ist.

Unmittelbar nach dem Array in BusData sind die Untersuchungsdaten für alle Geräte auf allen Bussen, die zur HBA gehören. Der InquiryDataOffset Member jeder SCSI_BUS_DATA Struktur stellt einen Offset für die Untersuchungsdaten für den entsprechenden SCSI-Bus bereit.

Die Untersuchungsdaten für jeden SCSI-Bus enthalten Informationen zu allen logischen Einheiten auf diesem Bus. Die Untersuchungsdaten jeder logischen Einheit werden in einer Struktur vom Typ SCSI_INQUIRY_DATAformatiert, und alle SCSI_INQUIRY_DATA Strukturen für einen bestimmten Bus werden durch das NextInquiryDataOffset Member miteinander verknüpft. Es gibt eine separate Liste für jeden SCSI-Bus, und die NextInquiryDataOffset Element der letzten Struktur in jeder Liste enthält einen Wert von Null.

Im folgenden Pseudocodebeispiel wird veranschaulicht, wie Sie die SCSI-Busse auf einem HBA und die logischen Einheiten für jeden Bus durchlaufen, die Untersuchungsdaten für jede logische Einheit lesen und drucken:

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");
}

Sie müssen NextInquiryDataOffset Mitglied verwenden, um die Untersuchungsdaten für die nächste logische Einheit zu suchen. Versuchen Sie nicht, dies durch Zeigerarithmetik zu tun. Die Positionierung jeder SCSI_INQUIRY_DATA Struktur unterscheidet sich möglicherweise für jeden HBA-Miniporttreiber, da sie von den Anforderungen an die Datenausrichtung abhängt.

Anforderungen

Anforderung Wert
Header- ntddscsi.h (include Ntddscsi.h)

Siehe auch

IOCTL_SCSI_GET_INQUIRY_DATA

SCSI_BUS_DATA

SCSI_INQUIRY_DATA