HW_INITIALIZATION_DATA-Struktur (srb.h)

Die DriverEntry-Routine jedes SCSI-Miniporttreibers muss mit Nullen initialisiert werden und dann die relevanten HW_INITIALIZATION_DATA (SCSI)-Informationen für den betriebssystemspezifischen Porttreiber eingeben.

Hinweis Der SCSI-Porttreiber und die SCSI-Miniporttreibermodelle sind möglicherweise geändert oder in Zukunft nicht mehr verfügbar. Stattdessen wird empfohlen, die Modelle Storport-Treiber und Storport-Miniporttreiber zu verwenden.
 

Syntax

typedef struct _HW_INITIALIZATION_DATA {
  ULONG               HwInitializationDataSize;
  INTERFACE_TYPE      AdapterInterfaceType;
  PHW_INITIALIZE      HwInitialize;
  PHW_STARTIO         HwStartIo;
  PHW_INTERRUPT       HwInterrupt;
  PHW_FIND_ADAPTER    HwFindAdapter;
  PHW_RESET_BUS       HwResetBus;
  PHW_DMA_STARTED     HwDmaStarted;
  PHW_ADAPTER_STATE   HwAdapterState;
  ULONG               DeviceExtensionSize;
  ULONG               SpecificLuExtensionSize;
  ULONG               SrbExtensionSize;
  ULONG               NumberOfAccessRanges;
  PVOID               Reserved;
  BOOLEAN             MapBuffers;
  BOOLEAN             NeedPhysicalAddresses;
  BOOLEAN             TaggedQueuing;
  BOOLEAN             AutoRequestSense;
  BOOLEAN             MultipleRequestPerLu;
  BOOLEAN             ReceiveEvent;
  USHORT              VendorIdLength;
  PVOID               VendorId;
  union {
    USHORT ReservedUshort;
    USHORT PortVersionFlags;
  };
  USHORT              DeviceIdLength;
  PVOID               DeviceId;
  PHW_ADAPTER_CONTROL HwAdapterControl;
} HW_INITIALIZATION_DATA, *PHW_INITIALIZATION_DATA;

Member

HwInitializationDataSize

Gibt die Größe dieser Struktur in Bytes an, wie von sizeof() zurückgegeben. Tatsächlich gibt dieses Member die Version dieser Struktur an, die vom Miniporttreiber verwendet wird. Die DriverEntry-Routine eines Miniporttreibers sollte den Wert dieses Elements für den Porttreiber festlegen.

AdapterInterfaceType

Gibt den Typ des E/A-Busses an, mit dem der HBA verbunden ist. Dies kann einer der folgenden Sein: Internal, Isa, Eisa, MicroChannel, TurboChannel oder PCIBus. In Zukunft werden jedoch weitere Bustypen unterstützt. Die obere Grenze für die unterstützten Bustypen ist immer MaximumInterfaceType.

Wenn dies auf PCIBus festgelegt ist, muss der Miniporttreiber Werte für die Member VendorIdLength, VendorId, DeviceIdLength und DeviceId angeben, die weiter unten beschrieben werden.

HwInitialize

Zeiger auf die HwScsiInitialize-Routine des Miniporttreibers, die ein erforderlicher Einstiegspunkt für alle Miniporttreiber ist. Der Prototyp für diese Routine ist PHW_INITIALIZE.

HwStartIo

Zeiger auf die HwScsiStartIo-Routine des Miniporttreibers, die ein erforderlicher Einstiegspunkt für alle Miniporttreiber ist. Der Prototyp für diese Routine ist PHW_STARTIO.

HwInterrupt

Zeiger auf die HwScsiInterrupt-Routine des Miniporttreibers, die ein erforderlicher Einstiegspunkt für jeden Miniporttreiber eines HBA ist, der Interrupts generiert. Legen Sie diesen Wert auf NULL fest, wenn der Miniporttreiber keine ISR benötigt. Der Prototyp für diese Routine ist PHW_INTERRUPT.

HwFindAdapter

Zeiger auf die HwScsiFindAdapter-Routine des Miniporttreibers, die ein erforderlicher Einstiegspunkt für alle Miniporttreiber ist. Der Prototyp für diese Routine ist PHW_FIND_ADAPTER.

HwResetBus

Zeiger auf die HwScsiResetBus-Routine des Miniporttreibers, die ein erforderlicher Einstiegspunkt für alle Miniporttreiber ist. Der Prototyp für diese Routine ist PHW_RESET_BUS.

HwDmaStarted

Zeiger auf die HwScsiDmaStarted-Routine des Miniporttreibers, wenn dessen HBA System-DMA verwendet, d. h. einen System-DMA-Controller. Legen Sie dies auf NULL fest, wenn der HBA ein Bus master ist oder PIO verwendet. Der Prototyp für diese Routine ist PHW_DMA_STARTED.

HwAdapterState

Zeiger auf die HwScsiAdapterState-Routine des Miniporttreibers, die ein erforderlicher Einstiegspunkt für Miniporttreiber von HBAs mit BIOSs ist, die mit einem betriebssystemabhängigen x86-Plattformporttreiber verknüpft sind, der zwischen x86-geschützten und echten Prozessormodi wechseln muss. Wenn der Miniporttreiber keine HwScsiAdapterState-Routine benötigt, legen Sie diesen Member auf NULL fest. Ein Miniporttreiber für einen HBA, der über ein BIOS verfügt, muss über eine HwScsiAdapterState-Routine verfügen, um mit dem reinen x86-Porttreiber kompatibel zu sein und in eine reine x86-Betriebssystemumgebung portierbar zu sein. Der Prototyp für diese Routine ist PHW_ADAPTER_STATE.

DeviceExtensionSize

Gibt die Größe in Byte an, die der Miniporttreiber für seine HBA-Geräteerweiterung pro HBA benötigt. Ein Miniporttreiber verwendet seine Geräteerweiterung als Speicher für vom Treiber bestimmte HBA-Informationen. Der betriebssystemspezifische Porttreiber initialisiert jede zuzuordnende Geräteerweiterung mit Nullen und übergibt bei jedem Aufruf eines Miniporttreibers einen Zeiger auf die HBA-spezifische Geräteerweiterung, mit Ausnahme der DriverEntry-Routine . Die angegebene Größe enthält keinen miniporttreiber-angeforderten Speicher pro logischer Einheit, wie als Nächstes beschrieben.

SpecificLuExtensionSize

Gibt die Größe in Byte an, die der Miniporttreiber für den Speicher pro logischer Einheit benötigt, falls vorhanden. Ein Miniporttreiber kann seine LU-Erweiterungen als Speicher für treiberbestimmte Informationen zu SCSI-Peripheriegeräten auf dem Bus verwenden. Der betriebssystemspezifische Porttreiber initialisiert jede LU-Erweiterung, die er ordnet, mit Nullen. Lassen Sie diesen Member auf 0 festgelegt, wenn der Miniporttreiber keine Lu-Informationen verwaltet, für die er Speicher benötigt. Dieser Wert basiert auf der Annahme, dass der HBA 32-Bit-Adressen empfangen kann, unabhängig davon, was der Controller tatsächlich unterstützen kann. Wenn zusätzlicher Speicherplatz in den LUN- oder SRB-Erweiterungen benötigt wird, um 64-Bit-Adressen zu verarbeiten, müssen entsprechende Anpassungen an diesem Wert vorgenommen werden, bevor sie mit Routinen wie ScsiPortGetUncachedExtension verwendet werden.

SrbExtensionSize

Gibt die Größe in Byte an, die der Miniporttreiber für seinen Speicher pro Anforderung benötigt( falls vorhanden). Ein Miniporttreiber kann SRB-Erweiterungen als Speicher für treiberbestimmte, anforderungsspezifische Informationen verwenden, z. B. Daten, die für die Verarbeitung einer bestimmten Anforderung erforderlich sind. Der betriebssystemspezifische Porttreiber initialisiert keine SRB-Erweiterungen, legt aber einen Zeiger auf diesen Speicher in jedem SRB fest, den er an den Miniporttreiber sendet. Auf eine SRB-Erweiterung kann von der HBA-Hardware sicher zugegriffen werden. Lassen Sie diesen Member auf 0 festgelegt, wenn der Miniporttreiber keine SRB-Informationen verwaltet, für die er Speicher benötigt. Dieser Wert basiert auf der Annahme, dass der HBA 32-Bit-Adressen empfangen kann, unabhängig davon, was der Controller tatsächlich unterstützen kann. Wenn zusätzlicher Speicherplatz in den LUN- oder SRB-Erweiterungen benötigt wird, um 64-Bit-Adressen zu verarbeiten, müssen entsprechende Anpassungen an diesem Wert vorgenommen werden, bevor sie mit Routinen wie ScsiPortGetUncachedExtension verwendet werden.

NumberOfAccessRanges

Gibt an, wie viele Zugriffsbereiche der Adapter verwendet. Jede ist ein Bereich von Speicheradressen oder E/A-Portadressen. Ein typischer HBA verwendet zwei Bereiche: einen für seine E/A-Ports und einen anderen für den Gerätespeicherbereich.

Reserved

Reserviert für die Systemnutzung und nicht für die Verwendung durch Miniporttreiber verfügbar.

MapBuffers

Gibt bei TRUE an, dass alle Datenpufferadressen virtuellen Adressen zugeordnet werden müssen, damit der Miniporttreiber darauf zugreifen kann. Bei FALSE müssen Datenpufferadressen nicht virtuellen Adressen zugeordnet werden.

NeedPhysicalAddresses

Gibt bei TRUE an, dass der Miniporttreiber sein Gerät, jede pro LU und jede SRB-Erweiterungsadresse sowie SRB-Pufferadressen gemäß den Anforderungen des HBA in physische Adressen übersetzen muss. Bei FALSE muss keine dieser Adressen in physische Adressen übersetzt werden.

TaggedQueuing

Gibt an, wenn TRUE, dass dieser Miniporttreiber SCSI-Markiertes Warteschlangen unterstützen kann. Wenn FALSE festgelegt ist, kann der Miniporttreiber SCSI-markiertes Warteschlangen nicht unterstützen.

AutoRequestSense

Gibt bei TRUE an, dass der HBA einen Anforderungsoptimierungsvorgang ausführen kann, ohne dass hierfür eine explizite Anforderung erforderlich ist. Bei FALSE erfordert der HBA eine explizite Anforderung, bevor ein Anforderungsoptimierungsvorgang ausgeführt werden kann. Nur Miniporttreiber, die HBAs mit integrierter Firmware zum Ausführen von Anforderungsoptimierungsvorgängen steuern, sollten diesen Member auf TRUE festlegen.

MultipleRequestPerLu

Gibt bei TRUE an, dass der Miniporttreiber mehrere Anforderungen pro logischer Einheit in die Warteschlange stellen kann, insbesondere innerhalb des HBA. Bei FALSE kann der Miniporttreiber nicht mehrere Anforderungen pro logischer Einheit in die Warteschlange stellen. Beachten Sie, dass ein HBA die Automatische Anforderungsoptimierung für seinen Miniporttreiber unterstützen muss, um diese Funktionalität zu aktivieren. Wenn ein Miniporttreiber diesen Member auf TRUE festlegt, muss er jedes SRB QueueTag-Element für Anforderungen dieses Typs verwenden, aber die SRB_FLAGS_QUEUE_ACTION_ENABLE ist nicht im SrbFlags-Member der SCSI_REQUEST_BLOCK-Struktur festgelegt.

ReceiveEvent

Gibt bei TRUE an, dass der Miniporttreiber einen HBA antreibt, der den Empfangsereignis-SRB für asynchrone SCSI-Ereignisse unterstützen kann. Bei FALSE kann der HBA den Empfangsereignis-SRB für asynchrone SCSI-Ereignisse nicht unterstützen.

VendorIdLength

Gibt die Größe der VendorId-Zeichenfolge in Byte an, die als Nächstes beschrieben wird.

VendorId

Zeiger auf eine ASCII-Bytezeichenfolge, die den Hersteller des HBA identifiziert. Dieses Element ist für Plug & Play Treiber irrelevant.

Wenn der angegebene AdapterInterfaceTypePCIBus ist, ist die Anbieter-ID ein von der PCI-SIG zugeordneter USHORT-Wert, der vom Miniporttreiber in eine Bytezeichenfolge konvertiert werden muss. Wenn der zugewiesene PCI-Anbieter-ID-Wert beispielsweise 1001 ist, lautet die vom Miniporttreiber bereitgestellte VendorId-Zeichenfolge ("1", "0", "0", "1").

ReservedUshort

Reserviert für die Systemnutzung und ist nicht für die Verwendung durch Miniporttreiber verfügbar.

PortVersionFlags

DeviceIdLength

Gibt die Größe der DeviceId-Zeichenfolge in Bytes an, die als Nächstes beschrieben wird.

DeviceId

Zeiger auf eine ASCII-Bytezeichenfolge, die die vom Miniporttreiber unterstützten HBA-Modelle identifiziert. Dieses Element ist für Plug & Play Treiber irrelevant.

Wenn der angegebene AdapterInterfaceTypePCIBus ist, ist eine Geräte-ID ein USHORT-Wert, der vom Hersteller des HBA zugewiesen wird. Der Miniporttreiber muss alle PCI-Geräte-ID-Werte für die unterstützten HBA(n) wie für das VendorId-Mitglied in DeviceId-Bytezeichenfolgen konvertieren. Wenn ein Miniporttreiber beispielsweise HBAs mit den PCI-Geräte-IDs 8040 und 8050 unterstützen kann, kann deviceId mit einem Zeiger auf die Bytezeichenfolge ("8", "0") festgelegt werden.

HwAdapterControl

Zeiger auf die HwScsiAdapterControl-Routine des Miniporttreibers, die ein erforderlicher Einstiegspunkt für alle PnP-Miniporttreiber ist. Legen Sie dies auf NULL fest, wenn der Miniporttreiber Plug & Play nicht unterstützt.

Hinweise

Jeder Miniporttreiber muss die HW_INITIALIZATION_DATA-Struktur mit Nullen initialisieren, bevor die Werte der relevanten Member in dieser Struktur festgelegt und ScsiPortInitialize aufgerufen wird.

Das Dma64BitAddresses-Mitglied von HW_INITIALIZATION_DATA wurde in Windows 2000 entfernt (weitere Details finden Sie in der Diskussion unter PORT_CONFIGURATION_DATA).

Sowohl HW_INITIALIZATION_DATA als auch PORT_CONFIGURATION_INFORMATION verfügen über ein Paar von Membern namens SpecificLuExtensionSize und SrbExtensionSize , deren Werte anders behandelt werden als vor Windows 2000. Der Miniporttreiber muss die Anfangswerte von SpecificLuExtensionSize und SrbExtensionSize in HW_INITIALIZATION_DATA basierend auf der Annahme berechnen, dass der HBA 32-Bit-Adressen verarbeiten kann, unabhängig davon, was der Controller tatsächlich unterstützen kann. (Weitere Details finden Sie in der Diskussion unter PORT_CONFIGURATION_DATA.)

Anforderungen

Anforderung Wert
Header srb.h (include Srb.h, Strmini.h)

Weitere Informationen

DriverEntry of SCSI Miniport Driver

HwScsiInitialize

SCSI_REQUEST_BLOCK

ScsiPortInitialize