Freigeben über


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 empfehlen wir die Verwendung des Storport-Treibers und Storport Miniport Treibermodelle.
 

Syntax

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

Angehörige

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 mit dem vom Adapter decodierten Bereich übereinstimmt. Wenn die HBA beispielsweise sieben Register verwendet, aber auf acht reagiert, sollte dieses Element auf 8 festgelegt werden.

RangeInMemory

Gibt an, dass sich der Bereich im Arbeitsspeicher befindet, wenn TRUE-und nicht im E/A-Leerzeichen. Wenn FALSE-, befindet sich der Bereich im E/A-Leerzeichen.

Bemerkungen

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

Wenn möglich, richtet der osspezifische Porttreiber jedes Zugriffsbereichselement mit einem busrelativen HBA-Bereich für den Miniporttreiber ein, bevor die HwScsiFindAdapter-Routine des Miniporttreibers aufgerufen wird. Andernfalls gibt der Porttreiber Keine Bereichselemente an, für die keine Konfigurationsinformationen bereitgestellt werden können.

Wenn der Porttreiber einen Bereich liefert, sollte die HwScsiFindAdapter-Routine des Miniporttreibers nur die bereitgestellten Adressen verwenden und niemals versuchen, andere HBAs auf demselben Bus mithilfe von Adressen ihrer eigenen Entwicklung zu finden. Der Versuch, auf andere busrelative Port- oder Speicherbereiche zuzugreifen, wenn der Porttreiber Bereichsinformationen bereitgestellt hat, insbesondere in x86-Systemen, in denen einige Geräte im realen x86-Modus initialisiert werden, können dazu führen, dass andere Geräte im Bus initialisiert werden oder sogar dazu führen, dass das System den Startvorgang fehlschlägt.

Jeder Miniporttreiber sollte über eine Reihe von busrelativen Standardbereichen verfügen, um zu versuchen, ob 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 versucht, einen solchen Bereich mit ScsiPortGetDeviceBase zuzuordnen und die zurückgegebenen logischen Adressen für den Zugriff auf einen Adapter zu verwenden, insbesondere, wenn einer seiner HBAs über ein BIOS verfügt.

Jeder Zugriffsbereich, den ein Miniporttreiber für den betriebssystemspezifischen Porttreiber in der PORT_CONFIGURATION_INFORMATION ausfüllt, muss das RangeStart Member auf eine busrelative Adresse festgelegt haben, z. B. einen Wert, der von ScsiPortGetBusDatazurückgegeben wird.

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

Anforderungen

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

Siehe auch

HwScsiFindAdapter-

PORT_CONFIGURATION_INFORMATION (SCSI)-

ScsiPortConvertUlongToPhysicalAddress

ScsiPortGetBusData-

ScsiPortGetDeviceBase-

ScsiPortValidateRange