Share via


ACCESS_RANGE-Struktur (srb.h)

Ein ACCESS_RANGE beschreibt einen Speicher- oder E/A-Portbereich, der von einem HBA verwendet wird.

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

Syntax

typedef struct _ACCESS_RANGE {
  SCSI_PHYSICAL_ADDRESS RangeStart;
  ULONG                 RangeLength;
  BOOLEAN               RangeInMemory;
} ACCESS_RANGE, *PACCESS_RANGE;

Member

RangeStart

Enthält eine Adresse vom Typ SCSI_PHYSICAL_ADDRESS , die die busrelative Basisadresse des Bereichs angibt. Dies ist eine Adresse, die an ScsiPortGetDeviceBase übergeben werden kann.

RangeLength

Gibt die Größe in Bytes oder die Anzahl der Ports im Bereich an. Ein Miniporttreiber muss sicherstellen, dass dieser Wert dem tatsächlich vom Adapter decodierten Bereich entspricht. Wenn der HBA beispielsweise sieben Register verwendet, aber auf acht antwortet, sollte dieser Member auf 8 festgelegt werden.

RangeInMemory

Gibt an, dass sich der Bereich im Arbeitsspeicher befindet, wenn true und nicht im E/A-Bereich vorhanden ist. Bei FALSE befindet sich der Bereich im E/A-Bereich.

Hinweise

Jede ACCESS_RANGE ist ein AccessRanges-Arrayelement innerhalb der PORT_CONFIGURATION_INFORMATION-Struktur, das an die HwScsiFindAdapter-Routine eines Miniporttreibers übergeben wird.

Wenn möglich, richtet der betriebssystemspezifische Porttreiber jedes Zugriffsbereichselement mit einem busrelativen HBA-Bereich für den Miniporttreiber ein, bevor die HwScsiFindAdapter-Routine des Miniporttreibers aufgerufen wird. Andernfalls stellt der Porttreiber Bereichselemente auf Null, für die er keine Konfigurationsinformationen bereitstellen kann.

Wenn der Porttreiber einen Bereich zur Verfügung stellt, sollte die HwScsiFindAdapter-Routine des Miniporttreibers nur die angegebenen Adressen verwenden und niemals versuchen, andere HBAs auf demselben Bus mithilfe eigener Adressen zu finden. Der Versuch, auf andere busrelative Ports oder Speicherbereiche zuzugreifen, wenn der Porttreiber Bereichsinformationen bereitgestellt hat, insbesondere in x86-only-Systemen, in denen einige Geräte im x86-Realmodus initialisiert werden, kann dazu führen, dass andere Geräte auf dem Bus die Initialisierung fehlschlagen oder sogar dazu führen, dass der Startvorgang des Systems fehlschlägt.

Jeder Miniporttreiber sollte über einen Satz von busrelativen Standardbereichen verfügen, um zu versuchen, wenn der betriebssystemspezifische Porttreiber die Informationen nicht bereitstellen kann. Ein Miniporttreiber muss ScsiPortValidateRange aufrufen, um die Sicherheit eines vom Miniporttreiber bereitgestellten Zugriffsbereichs zu überprüfen, bevor er versucht, einen solchen Bereich ScsiPortGetDeviceBase zuzuordnen und die zurückgegebenen logischen Adressen für den Zugriff auf einen Adapter zu verwenden, insbesondere wenn eine seiner HBAs über ein BIOS verfügt.

Für jeden Zugriffsbereich, den ein Miniporttreiber für den betriebssystemspezifischen Porttreiber im PORT_CONFIGURATION_INFORMATION ausfüllt, muss das RangeStart-Member auf eine busrelative Adresse festgelegt sein, z. B. einen wert, der von ScsiPortGetBusData zurückgegeben wird.

Die entsprechende logische Basisadresse, die von ScsiPortGetDeviceBase zurückgegeben wird, sollte in der Regel in der Geräteerweiterung des Miniporttreibers als RangeStart-Adresse für einen zugeordneten Bereich von E/A-Ports oder Speicheradressen gespeichert werden, die zum Aufrufen der Xxx-Routinen ScsiPortReadXxx und ScsiPortWrite verwendet werden.

Anforderungen

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

Weitere Informationen

HwScsiFindAdapter

PORT_CONFIGURATION_INFORMATION (SCSI)

ScsiPortConvertUlongToPhysicalAddress

ScsiPortGetBusData

ScsiPortGetDeviceBase

ScsiPortValidateRange