PORT_CONFIGURATION_INFORMATION-Struktur (srb.h)
PORT_CONFIGURATION_INFORMATION (SCSI) enthält Konfigurationsinformationen für einen HBA. Der betriebssystemspezifische Porttreiber weist diese Struktur zu und initialisiert sie, stellt so viele HBA-spezifische Konfigurationsinformationen wie möglich bereit und übergibt die Struktur an die HwScsiFindAdapter-Routine des Miniporttreibers. Der Porttreiber erhält einige Informationen für diese Struktur aus der HW_INITIALIZATION_DATA Struktur des Miniporttreibers. Die HwScsiFindAdapter-Routine des Miniporttreibers ist dafür verantwortlich, zu bestimmen, ob der Miniporttreiber den HBA unterstützen kann, und wenn ja, für das Ausfüllen der relevanten verbleibenden Informationen in der PORT_CONFIGURATION_INFORMATION-Struktur.
Hinweis
Der SCSI-Porttreiber und die SCSI-Miniporttreibermodelle können in Zukunft geändert oder nicht mehr verfügbar sein. Verwenden Sie stattdessen die Modelle Storport-Treiber und Storport-Miniporttreiber .
Syntax
typedef struct _PORT_CONFIGURATION_INFORMATION {
ULONG Length;
ULONG SystemIoBusNumber;
INTERFACE_TYPE AdapterInterfaceType;
ULONG BusInterruptLevel;
ULONG BusInterruptVector;
KINTERRUPT_MODE InterruptMode;
ULONG MaximumTransferLength;
ULONG NumberOfPhysicalBreaks;
ULONG DmaChannel;
ULONG DmaPort;
DMA_WIDTH DmaWidth;
DMA_SPEED DmaSpeed;
ULONG AlignmentMask;
ULONG NumberOfAccessRanges;
ACCESS_RANGE( ) *AccessRanges[];
PVOID Reserved;
UCHAR NumberOfBuses;
UCHAR InitiatorBusId[8];
BOOLEAN ScatterGather;
BOOLEAN Master;
BOOLEAN CachesData;
BOOLEAN AdapterScansDown;
BOOLEAN AtdiskPrimaryClaimed;
BOOLEAN AtdiskSecondaryClaimed;
BOOLEAN Dma32BitAddresses;
BOOLEAN DemandMode;
BOOLEAN MapBuffers;
BOOLEAN NeedPhysicalAddresses;
BOOLEAN TaggedQueuing;
BOOLEAN AutoRequestSense;
BOOLEAN MultipleRequestPerLu;
BOOLEAN ReceiveEvent;
BOOLEAN RealModeInitialized;
BOOLEAN BufferAccessScsiPortControlled;
UCHAR MaximumNumberOfTargets;
UCHAR ReservedUchars[2];
ULONG SlotNumber;
ULONG BusInterruptLevel2;
ULONG BusInterruptVector2;
KINTERRUPT_MODE InterruptMode2;
ULONG DmaChannel2;
ULONG DmaPort2;
DMA_WIDTH DmaWidth2;
DMA_SPEED DmaSpeed2;
ULONG DeviceExtensionSize;
ULONG SpecificLuExtensionSize;
ULONG SrbExtensionSize;
UCHAR Dma64BitAddresses;
BOOLEAN ResetTargetSupported;
UCHAR MaximumNumberOfLogicalUnits;
BOOLEAN WmiDataProvider;
} PORT_CONFIGURATION_INFORMATION, *PPORT_CONFIGURATION_INFORMATION;
Member
Length
Gibt die Größe dieser Struktur in Bytes an. Tatsächlich gibt dieses Element, das immer vom betriebssystemspezifischen Porttreiber initialisiert wird, die Version dieser Struktur an, die vom Porttreiber verwendet wird.
SystemIoBusNumber
Gibt die systemseitig zugewiesene Nummer des E/A-Busses an, mit dem der HBA verbunden ist. Dieser Member wird vom betriebssystemspezifischen Porttreiber immer initialisiert. Sein Wert ist systemseitig zugewiesen, da die Plattform möglicherweise über mehrere E/A-Busse des angegebenen AdapterInterfaceType verfügt.
AdapterInterfaceType
Gibt die E/A-Busschnittstelle an. Der betriebssystemspezifische Porttreiber legt diesen Member immer auf den Wert fest, der vom Miniporttreiber in der SCSI-Struktur (HW_INITIALIZATION_DATA) angegeben wird.
BusInterruptLevel
Gibt die busrelative Interruptanforderungsebene an. Der betriebssystemspezifische Porttreiber macht keine Annahmen über die Interruptnutzung des HBA, sodass der Standardwert 0 ist. Je nach AdapterInterfaceType und HBA kann der für dieses Element festgelegte Wert dem IRQL für den Bus entsprechen, z. B. für Busse vom Typ Isa und MicroChannel . Treiber von Eisa HBAs müssen diesen Wert auf den busrelativen IRQL für den HBA festlegen, wenn der Adapter für levelsensitive Interrupts konfiguriert ist.
BusInterruptVector
Gibt den vom HBA zurückgegebenen busrelativen Vektor an. Der betriebssystemspezifische Porttreiber macht keine Annahmen über die Interruptnutzung des HBA, sodass der Standardwert 0 ist. Dieses Element ist für Treiber irrelevant, die das BusInterruptLevel-Member für ihre HBAs eingerichtet haben. Es ist relevant für HBAs für Typen von E/A-Bussen, die Interruptvektoren verwenden, z. B. PCIBus.
InterruptMode
Gibt an, ob der HBA LevelSensitive - oder Latched-Interrupts (manchmal als "edge-triggered" bezeichnet) verwendet. Der betriebssystemspezifische Porttreiber initialisiert dieses Element mit einem geeigneten Wert für den Bus und das Gerät, z. B. LevelSensitive für PCIBus. Treiber von Eisa HBAs müssen diesen Wert zurücksetzen, wenn der Adapter für levelsensitive Interrupts konfiguriert ist, ebenso wie Treiber von HBAs auf E/A-Bussen, die levelsensitive Interrupts verwenden, z. B. Busse vom Typ MicroChannel .
MaximumTransferLength
Gibt die maximale Anzahl von Bytes an, die der HBA in einem einzelnen Übertragungsvorgang übertragen kann. Standardmäßig ist der Wert dieses Elements SP_UNINITIALIZED_VALUE, was eine unbegrenzte maximale Übertragungsgröße angibt. Wenn der HBA über eine eingeschränktere Übertragungsunterstützung verfügt, muss ein Miniporttreiber diesen Member entsprechend der Übertragungskapazität des HBA zurücksetzen. Wenn die HwScsiInterrupt-Routine eines Miniporttreibers Interrupts für den HBA nicht deaktivieren kann, kann dieser Member während der Treiberentwicklung angepasst werden, um sicherzustellen, dass die in der ISR des Miniporttreibers aufgewendete Zeit nicht dazu führt, dass die Maus "springt" oder der serielle/parallele Durchsatz auf eine vom Benutzer spürbare Ebene abbricht.
NumberOfPhysicalBreaks
Gibt die maximale Anzahl von Unterbrechungen zwischen Adressbereichen an, die ein Datenpuffer aufweisen kann, wenn der HBA scatter/gather unterstützt. Mit anderen Worten, die Anzahl der Punkt-/Sammlungslisten abzüglich 1. Standardmäßig ist der Wert dieses Members SP_UNINITIALIZED_VALUE, was angibt, dass der HBA eine unbegrenzte Anzahl physischer Diskuitäten unterstützen kann. Wenn der Porttreiber einen Wert für dieses Element festlegt, kann der Miniporttreiber den Wert niedriger, aber nicht höher anpassen. Wenn dieser Member SP_UNINITIALIZED_VALUE ist, muss der Miniporttreiber diesen Member entsprechend der Scatter-/Gather-Kapazität des HBA zurücksetzen, wobei null keine Scatter-/Gather-Unterstützung darstellt.
DmaChannel
Gibt den DMA-Kanal an, der von einem untergeordneten HBA verwendet wird. Standardmäßig ist der Wert dieses Members SP_UNINITIALIZED_VALUE. Wenn der HBA einen System-DMA-Controller verwendet und der angegebene AdapterInterfaceType ein beliebiger Wert mit Ausnahme von MicroChannel ist, muss der Miniporttreiber diesen Member zurücksetzen.
DmaPort
Gibt den DMA-Port an, der von einem untergeordneten HBA verwendet wird. Standardmäßig ist der Wert dieses Members SP_UNINITIALIZED_VALUE. Wenn der HBA einen System-DMA-Controller verwendet und der angegebene AdapterInterfaceTypeMicroChannel ist, muss der Miniporttreiber diesen Member festlegen.
DmaWidth
Gibt die Breite von DMA-Übertragungen an, wenn der HBA DMA verwendet. Standardmäßig ist der Wert dieses Members 0. Wenn sein HBA DMA ausführt, muss der Miniporttreiber diesen Member auf einen der folgenden Elemente zurücksetzen: Width8Bits, Width16Bits oder Width32Bits.
DmaSpeed
Gibt die DMA-Datenübertragungsgeschwindigkeit für Eisa HBAs an. Standardmäßig gibt der Wert dieses Members die Kompatibilitätszeit an. Zulässige Werte für dieses Member sind folgende: Compatible, TypeA, TypeB oder TypeC.
AlignmentMask
Enthält eine Maske, die die Ausrichtungseinschränkungen für Puffer angibt, die vom HBA für Übertragungsvorgänge erforderlich sind. Gültige Maskenwerte werden auch durch Merkmale der Speicher-Manager in verschiedenen Versionen von Windows eingeschränkt. Die unter Windows 95 oder Windows 98 zulässigen Maskenwerte sind 0 (Byte ausgerichtet), 1 (Wort ausgerichtet) oder 3 (DWORD ausgerichtet). Unter Windows NT und Windows 2000 sind die gültigen Maskenwerte 0 (Byte ausgerichtet), 1 (Wort ausgerichtet), 3 (DWORD ausgerichtet) und 7 (doppelte DWORD-Ausrichtung). Der Miniporttreiber sollte diese Maske festlegen, wenn der HBA scatter/gather unterstützt.
NumberOfAccessRanges
Gibt die Anzahl der AccessRanges-Elemente im Array an, die als Nächstes beschrieben wird. Der betriebssystemspezifische Porttreiber legt diesen Member immer auf den Wert fest, der in der HW_INITIALIZATION_DATA-Struktur übergeben wird, wenn der Miniporttreiber ScsiPortInitialize heißt.
AccessRanges
Reserved
Für die Systemverwendung reserviert und nicht für die Verwendung durch Miniporttreiber verfügbar.
NumberOfBuses
Gibt die Anzahl der vom HBA gesteuerten SCSI-Busse an. Standardmäßig ist der Wert dieses Members 0.
InitiatorBusId[8]
Gibt die Initiatorbus-ID an. Wenn die Eingabe InitiatorBusId[0] den Wert 0 aufweist, kann der Miniporttreiber einen Standardwert zuweisen, wenn sein HBA nicht die Verwendung bestimmter Werte erfordert, die durch Abfragen des HBA bestimmt wurden. Andernfalls sollte der Miniporttreiber nach Möglichkeit alle vom Porttreiber zugewiesenen Nonzero-Werte verwenden. Jeder Miniporttreiber muss die InitiatorBusId-Spezifikationen so aktualisieren, dass sie den vom HBA verwendeten Werten entsprechen. Bei Bedarf wird der HBA zur Ermittlung der entsprechenden Werte abfragt.
Ein Miniporttreiber muss einen Eintrag für jeden vom HBA unterstützten SCSI-Bus festlegen, wie durch den Wert von NumberOfBuses angegeben.
ScatterGather
Gibt an, wenn TRUE , dass der HBA scatter/gather unterstützt. Wenn FALSE vom HBA nicht unterstützt wird scatter/gather. Standardmäßig ist der Wert dieses Members FALSE.
Master
Gibt an, wenn TRUE, dass der HBA ein Bus master ist. Bei FALSE ist der HBA kein Bus master. Standardmäßig ist der Wert dieses Members FALSE.
CachesData
Gibt an, wenn TRUE , dass der HBA Daten zwischenspeichert oder den zwischengespeicherten Zustand auf den Peripheriegeräten beibehält. Bei FALSE speichert der HBA keine Daten zwischen oder behält den zwischengespeicherten Zustand auf den Peripheriegeräten bei. Standardmäßig ist der Wert dieses Members FALSE. Wenn dies auf TRUE zurückgesetzt wird, benachrichtigt der betriebssystemspezifische Porttreiber den Miniporttreiber, wenn bestimmte Systemereignisse auftreten, z. B. Dateisystemcacheleerungen und Herunterfahren des Systems. Wenn beispielsweise ein Controller auf dem Bus zwei Datenträger spiegelt, würde der Miniporttreiber diesen Member normalerweise auf TRUE festlegen.
AdapterScansDown
Gibt an, wenn TRUE , dass das BIOS für den HBA nach SCSI-Buszielen von sieben bis 0 scannt. Bei FALSE sucht das BIOS für den HBA nach SCSI-Buszielen, beginnend mit einer ID 0 und dem Scan nach oben bis (jedoch nicht eingeschlossen) MaximumTargetIds. Standardmäßig ist der Wert von AdapterScansDownFALSE.
AtdiskPrimaryClaimed
Gibt an, wenn TRUE , dass der primäre "AT" (WD1003-kompatible) Datenträgeradressbereich, 0x1F0 auf 0x1FF, von einem anderen Treiber für sein Gerät in der Registrierung beansprucht wurde. Dieser Member wird vom betriebssystemspezifischen Porttreiber immer initialisiert. Wenn der Eingabewert dieses Members TRUE ist, sollte ein Miniporttreiber davon ausgehen, dass ein bereits geladener Treiber den Gerätebereich beansprucht hat. Wenn der Eingabewert FALSE ist, kann ein Miniporttreiber den Adressbereich für einen HBA beanspruchen, der einen "AT"-Datenträgercontroller emuliert und diesen Member auf TRUE zurücksetzt, wodurch der Zugriff auf diesen Bereich durch den "AT"-Datenträgertreiber oder anschließend geladene Miniporttreiber verhindert wird.
AtdiskSecondaryClaimed
Gibt an, wenn TRUE , dass der sekundäre AT-Datenträger-Adressbereich, 0x170 auf 0x17F von einem anderen Treiber für sein Gerät in der Registrierung beansprucht wurde. Bei FALSE wurde der sekundäre AT-Adressbereich nicht von einem anderen Treiber in der Registrierung beansprucht. Dieser Member wird vom betriebssystemspezifischen Porttreiber immer initialisiert. Miniporttreiber sollten diesen Member wie für AtdiskPrimaryClaimed behandeln.
Dma32BitAddresses
Gibt an, wenn TRUE , dass der HBA über 32 Adresszeilen verfügt und auf den Arbeitsspeicher mit physischen Adressen zugreifen kann, die größer als 0x00FFFFFF sind. Bei FALSE verfügt der HBA über eine Reihe anderer DMA-Adresszeilen als 32. Standardmäßig ist der Wert dieses Members FALSE. Wenn der Miniporttreiber Dma64BitAddresses festlegt, muss dieser Member FALSE sein.
DemandMode
Gibt an, wann TRUE , dass der DMA-Systemcontroller für Den Bedarfsmodus und nicht für Einzelzyklusvorgänge programmiert werden soll. Wenn der HBA kein untergeordnetes Gerät ist, sollte dieser Member FALSE sein.
MapBuffers
Gibt an, wann TRUE , dass Datenpuffer virtuellen Systemadressbereichen zugeordnet werden müssen. Bei FALSE müssen die Datenpuffer nicht virtuellen Systemadressen zugeordnet werden. Der betriebssystemspezifische Porttreiber legt diesen Member immer auf den Wert fest, der in der SCSI-Struktur (HW_INITIALIZATION_DATA) übergeben wird, wenn der Miniporttreiber ScsiPortInitialize genannt wird. Ein Miniporttreiber kann diesen Wert für jeden bestimmten HBA zurücksetzen, den er steuert. Bei FALSE darf der Miniporttreiber nicht direkt auf Srb.DataBuffer zugreifen.
NeedPhysicalAddresses
Gibt an, wenn true , dass der Miniporttreiber virtuelle Adressen in physische Adressen übersetzen muss, wie vom HBA gefordert. Bei FALSE muss der Miniporttreiber virtuelle Adressen nicht in physische Adressen übersetzen. Der betriebssystemspezifische Porttreiber legt diesen Member immer auf den Wert fest, der in der SCSI-Struktur (HW_INITIALIZATION_DATA) übergeben wird, wenn der Miniporttreiber ScsiPortInitialize genannt wird. Ein Miniporttreiber kann diesen Wert für jeden bestimmten HBA zurücksetzen, den er steuert.
TaggedQueuing
Gibt an, wenn TRUE , dass der HBA das Anstehen mehrerer Anforderungen mit SCSI-Tags unterstützt. Bei FALSE unterstützt der HBA keine SCSI-markierte Warteschlangen. Der betriebssystemspezifische Porttreiber legt diesen Member immer auf den Wert fest, der in der SCSI-Struktur (HW_INITIALIZATION_DATA) übergeben wird, wenn der Miniporttreiber ScsiPortInitialize genannt wird. Ein Miniporttreiber kann diesen Wert für jeden bestimmten HBA zurücksetzen, den er steuert.
AutoRequestSense
Gibt an, wenn TRUE , dass der HBA die Automatische Anforderungssinnung unterstützt. Wenn FALSE vom HBA nicht unterstützt wird, wird die automatische Anforderungssinnung nicht unterstützt. Der betriebssystemspezifische Porttreiber legt diesen Member immer auf den Wert fest, der in der SCSI-Struktur (HW_INITIALIZATION_DATA) übergeben wird, wenn der Miniporttreiber ScsiPortInitialize genannt wird. Ein Miniporttreiber kann diesen Wert für jeden bestimmten HBA zurücksetzen, den er steuert. Dieses Element muss auf TRUE festgelegt werden, bevor der Treiber eines bus-master HBA ScsiPortGetUncachedExtension aufruft.
MultipleRequestPerLu
Gibt an, wenn TRUE , dass der HBA mehrere Anforderungen pro logische Einheit unterstützt. Bei FALSE unterstützt der HBA nicht mehrere Anforderungen pro logischer Einheit. Der Mechanismus, mit dem der Adapter die Anforderungen zwischenspeichert, ist adapterdefiniert. Der betriebssystemspezifische Porttreiber legt diesen Member immer auf den Wert fest, der in der SCSI-Struktur (HW_INITIALIZATION_DATA) übergeben wird, wenn der Miniporttreiber ScsiPortInitialize genannt wird. Ein Miniporttreiber kann diesen Wert für jeden bestimmten HBA zurücksetzen, den er steuert.
ReceiveEvent
Gibt an, wenn TRUE , dass der HBA SCSI-Empfangsereignisvorgänge unterstützt. Bei FALSE unterstützt der HBA keine SCSI-Empfangsereignisvorgänge. Der betriebssystemspezifische Porttreiber legt diesen Member immer auf den Wert fest, der in der SCSI-Struktur (HW_INITIALIZATION_DATA) übergeben wird, wenn der Miniporttreiber ScsiPortInitialize genannt wird. Ein Miniporttreiber kann diesen Wert für jeden bestimmten HBA zurücksetzen, den er steuert.
RealModeInitialized
Gibt an, wenn TRUE , dass ein (nur x86)-Realmodustreiber den HBA bereits initialisiert hat. Bei FALSE wurde der HBA zuvor nicht von einem Realmodustreiber initialisiert. Der betriebssystemabhängige Porttreiber initialisiert diesen Member immer. Wenn dies auf TRUE festgelegt ist, darf der Miniporttreiber seinen HBA nicht initialisieren, wenn die Initialisierungssequenz des Treibers mit der HBA-Initialisierung im realen Modus identisch ist. Wenn Sie den HBA unter diesen Umständen nicht erneut initialisieren, wird der Miniporttreiber viel schneller geladen. Der Wert dieses Members ist irrelevant für jeden Miniporttreiber, der seinen HBA immer initialisiert, während er auf x86-basierten Plattformen im geschützten Modus ausgeführt wird, und für alle Miniporttreiber, für die es unerheblich ist, ob sie auf einer CISC- oder RISC-basierten Plattform ausgeführt werden.
BufferAccessScsiPortControlled
Gibt an , wenn TRUE, dass der Miniporttreiber immer ScsiPortXxx aufruft, um auf Datenpuffer und/oder Anforderungssinninformationen in SRBs zuzugreifen, sodass der betriebssystemspezifische Porttreiber die E/A-Anforderungsverarbeitung optimieren kann. Bei FALSE muss der Miniporttreiber keine ScsiPortXxx-Routinen aufrufen, um auf Datenpuffer oder Anforderungssinninformationen zuzugreifen. Das Festlegen dieses Elements auf FALSE kann die E/A-Leistung des HBA beeinträchtigen. Durch das Aufrufen anderer Routinen als ScsiPortXxx ist ein Miniporttreiber nicht über Microsoft-Betriebssysteme hinweg portierbar.
MaximumNumberOfTargets
Gibt die Anzahl der Zielperipheriegeräte an, die der HBA steuern kann. Standardmäßig ist der Wert dieses Members gemäß dem SCSI-Standard SCSI_MAXIMUM_TARGETS. Ein Miniporttreiber kann diesen Member auf einen niedrigeren Wert zurücksetzen, wenn der HBA über eingeschränktere Funktionen verfügt, oder auf einen größeren Wert, der angibt, dass der HBA über Wide-SCSI- oder Fibre Channel-Funktionen verfügt. Dieser Wert ist auf SCSI_MAXIMUM_TARGETS_PER_BUS beschränkt.
ReservedUchars[2]
Für die Systemverwendung reserviert und nicht für die Verwendung durch Miniporttreiber verfügbar.
SlotNumber
Gibt die Slotnummer eines HBA mit übereinstimmenden Werten mit der VendorId und DeviceId an, die in der SCSI-Struktur (HW_INITIALIZATION_DATA) angegeben wurden, wenn der Miniporttreiber ScsiPortInitialize genannt wird.
BusInterruptLevel2
Für die Systemverwendung reserviert und nicht für die Verwendung durch Miniporttreiber verfügbar.
BusInterruptVector2
Für die Systemverwendung reserviert und nicht für die Verwendung durch Miniporttreiber verfügbar.
InterruptMode2
Für die Systemverwendung reserviert und nicht für die Verwendung durch Miniporttreiber verfügbar.
DmaChannel2
Für die Systemverwendung reserviert und nicht für die Verwendung durch Miniporttreiber verfügbar.
DmaPort2
Für die Systemverwendung reserviert und nicht für die Verwendung durch Miniporttreiber verfügbar.
DmaWidth2
Für die Systemverwendung reserviert und nicht für die Verwendung durch Miniporttreiber verfügbar.
DmaSpeed2
Für die Systemverwendung reserviert und nicht für die Verwendung durch Miniporttreiber verfügbar.
DeviceExtensionSize
Gibt die Größe in Bytes an, die von einem Miniporttreiber für seine HBA-Geräteerweiterung benötigt wird, um Datenübertragungen mit einer Größe von mehr als 64 KB zu verarbeiten. Dies erfordert möglicherweise größere Punkt-/Sammlungslisten als die in der Registrierung für diesen Treiber definierte Größe.
SpecificLuExtensionSize
Gibt die Größe in Bytes an, die vom Miniporttreiber für den Speicher pro logischer Einheit erforderlich ist, falls vorhanden, um Datenübertragungen zu verarbeiten, die größer als 64 KB sind. Lassen Sie diesen Member auf 0 festgelegt, wenn der Miniporttreiber keine Lu-Informationen verwaltet, für die er Speicher erfordert. 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ätzlichen Speicherplatz in den LUN- oder SRB-Erweiterungen benötigt wird, um 64-Bit-Adressen zu verarbeiten, müssen entsprechende Anpassungen an diesen Wert vorgenommen werden, bevor sie ihn mit Routinen wie ScsiPortGetUncachedExtension verwenden.
SrbExtensionSize
Gibt die Größe in Bytes an, die vom Miniporttreiber für seinen Anforderungsspeicher benötigt wird( falls vorhanden), um Datenübertragungen zu verarbeiten, die größer als 64 KB sind. Legen Sie diesen Member vor dem Aufrufen von ScsiPortGetUncachedExtension fest, um die Größe des Anforderungsspeichers basierend auf NumberOfPhysicalBreaks zu ändern. 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ätzlichen Speicherplatz in den LUN- oder SRB-Erweiterungen benötigt wird, um 64-Bit-Adressen zu verarbeiten, müssen entsprechende Anpassungen an diesen Wert vorgenommen werden, bevor sie ihn mit Routinen wie ScsiPortGetUncachedExtension verwenden.
Dma64BitAddresses
Gibt an, dass der HBA auf Adressen zugreifen kann, die größer als 4 GB sind, oder 0x0FFFFFFFF, wenn Dma64BitAddresses den Wert SCSI_DMA64_MINIPORT_SUPPORTED enthält. Vor Windows 2000 hat der ScsiPort diesen Wert basierend auf dem Inhalt von HW_INITIALIZATION_DATA (SCSI) festgelegt. Das ist nicht mehr der Fall. In Windows 2000 wird der Wert von Dma64BitAddresses allein durch den Rückruf des Miniporttreibers HwScsiFindAdapter bestimmt. Wenn das Betriebssystem einen 64-Bit-Adressraum unterstützt, übergibt der Porttreiber den Wert SCSI_DMA64_SYSTEM_SUPPORTED an den Miniporttreiber in diesem Member. Wenn der von PORT_CONFIGURATION_INFORMATION beschriebene HBA auch Adressräume mit mehr als 32 Bit unterstützt, ist der Port-/Miniporttreiber erforderlich, um die vollständige 64-Bit-Adressierung zu unterstützen, und der Rückruf HwScsiFindAdapter des Miniporttreibers gibt dies an, indem Dma64BitAddresses der Wert SCSI_DMA64_MINIPORT_SUPPORTED zugewiesen wird. Dabei wird über jeden vorherigen Wert geschrieben, der vom Porttreiber zugewiesen wurde. Der richtige Wert muss dem Dma64BitAddresses-Member zugewiesen werden, bevor der Miniporttreiber ScsiPortGetUncachedExtension aufruft.
ResetTargetSupported
Veraltet. Der ScsiPort-Treiber sendet keine SRB_FUNCTION_RESET_DEVICE Anforderungen mehr an seine Miniporttreiber. Verwenden Sie dieses Element nicht.
MaximumNumberOfLogicalUnits
Gibt die maximale Anzahl logischer Einheiten pro Ziel an, die der HBA steuern kann. Standardmäßig ist der Wert dieses Members SCSI_MAXIMUM_LOGICAL_UNITS. Ein Miniporttreiber kann diesen Member auf einen niedrigeren Wert zurücksetzen, wenn der HBA über eingeschränktere Funktionen verfügt, oder auf einen höheren Wert, der angibt, dass der HBA über SCSI-3-Funktionen verfügt.
WmiDataProvider
Gibt an, wenn TRUE , dass der Miniporttreiber auf WMI-Anforderungen (Windows-Verwaltungsinstrumentation) antwortet. Bei FALSE reagiert der Miniporttreiber nicht auf WMI-Anforderungen (Windows-Verwaltungsinstrumentation). Standardmäßig ist der Wert dieses Members FALSE.
Hinweise
Welche Elemente initialisiert werden, hängt vom HBA-Miniporttreiber und von den Konfigurationsinformationen ab, die dem betriebssystemspezifischen Porttreiber zur Verfügung stehen. Der betriebssystemspezifische Porttreiber legt Standardwerte in allen Membern fest, für die er keine Konfigurationsinformationen für die HwScsiFindAdapter-Routine des Miniporttreibers bereitstellen kann.
Alle HBA-Miniporttreiber sollten mindestens einen Satz Standardwerte aufweisen, die für relevante Member verwendet werden sollen, wenn der betriebssystemspezifische Porttreiber nicht alle initialisierten Werte übergibt.
Die HwScsiFindAdapter-Routine muss alle Member aktualisieren, die für einen vom Treiber unterstützten HBA relevant sind.
Windows NT-Speicherklassentreiber, die später als Miniporttreiber geladen werden, hängen von den Informationen ab, die von der HwScsiFindAdapter-Routine jedes Miniporttreibers bereitgestellt werden, um die nachfolgenden E/A-Anforderungen einzurichten. Beispielsweise steuern die Werte MaximumTransferLength und NumberOfPhysicalBreaks , die von jedem Miniporttreiber bereitgestellt werden, ob ein Klassentreiber große Übertragungsanforderungen in einen Satz von teilweisen Übertragungen aufteilen muss, um den Grenzwerten des HBA zu entsprechen.
Das Dma64BitAddresses-Element von PORT_CONFIGURATION_INFORMATION sollte nicht mehr als BOOLEAN-Wert betrachtet werden. Der Wert SCSI_DMA64_SYSTEM_SUPPORTED gibt an, dass der Port-/Miniporttreiber für die Unterstützung der 64-Bit-Adressierung erforderlich ist, aber die ScsiPortGetUncachedExtension-Routine interpretiert weiterhin jeden nonzero-Wert von Dma64BitAddresses als Hinweis darauf, dass 64-Bit-Unterstützung erforderlich ist. Dies bedeutet, dass ScsiPortGetUncachedExtension weiterhin ordnungsgemäß funktioniert, wenn es von einem Legacytreiber aufgerufen wird, der Dma64BitAddresses BOOLEAN-Werte zuweist.
Zusätzlich zu Dma64BitAddresses verfügen sowohl PORT_CONFIGURATION_INFORMATION als auch HW_INITIALIZATION_DATA über ein Memberpaar namens SpecificLuExtensionSize und SrbExtensionSize , deren Werte jetzt unterschiedlich behandelt werden müssen. Der Miniporttreiber muss die Anfangswerte von SpecificLuExtensionSize und SrbExtensionSize in HW_INITIALIZATION_DATA basierend auf der Annahme berechnen, dass der HBA 32-Bit-Adressen empfangen kann, unabhängig davon, was der Controller tatsächlich unterstützen kann. Die Standardwerte für SpecificLuExtensionSize und SrbExtensionSize in PORT_CONFIGURATION_INFORMATION basieren ebenfalls auf der Annahme der 32-Bit-Adressierung, da die Werte in PORT_CONFIGURATION_INFORMATION von den Werten in HW_INITIALIZATION_DATA abgeleitet werden.
Wenn der Miniporttreiber zusätzlichen Speicherplatz in der LUN-Erweiterung oder der SRB-Erweiterung benötigt, um physische 64-Bit-Adressen zu verarbeiten, muss er die Werte für SpecificLuExtensionSize und SrbExtensionSize in PORT_CONFIGURATION_INFORMATION ändern, um dies zu berücksichtigen, bevor PORT_CONFIGURATION_INFORMATION an ScsiPortGetUncachedExtension übergeben werden.
Anforderungen
Anforderung | Wert |
---|---|
Header | srb.h (include Srb.h, Storport.h, Strmini.h) |