Freigeben über


ScsiPortValidateRange-Funktion (srb.h)

Die ScsiPortValidateRange Routine gibt an, ob die angegebenen Zugriffsbereichswerte bereits von einem anderen Treiber in der Registrierung beansprucht wurden.

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

SCSIPORT_API BOOLEAN ScsiPortValidateRange(
  [in] PVOID                 HwDeviceExtension,
  [in] INTERFACE_TYPE        BusType,
  [in] ULONG                 SystemIoBusNumber,
  [in] SCSI_PHYSICAL_ADDRESS IoAddress,
  [in] ULONG                 NumberOfBytes,
  [in] BOOLEAN               InIoSpace
);

Parameter

[in] HwDeviceExtension

Zeiger auf die Hardwaregeräteerweiterung. Dies ist ein Speicherbereich pro HBA, den der Porttreiber im Namen des Miniporttreibers zuordnet und initialisiert. Miniporttreiber speichern in der Regel HBA-spezifische Informationen in dieser Erweiterung, z. B. den Zustand der HBA und die zugeordneten Zugriffsbereiche der HBA. Dieser Bereich steht dem Miniporttreiber im DeviceExtension->HwDeviceExtension Mitglied des Geräteobjekts der HBA unmittelbar nach dem Aufruf ScsiPortInitializezur Verfügung. Der Porttreiber gibt diesen Speicher frei, wenn es das Gerät entfernt.

[in] BusType

Gibt den Wert des AdapterInterfaceType Members in der PORT_CONFIGURATION_INFORMATION Struktur an, wenn HwScsiFindAdapter- aufgerufen wird.

[in] SystemIoBusNumber

Gibt den Wert des SystemIoBusNumber Mitglieds in den Konfigurationsinformationen an, wenn HwScsiFindAdapter- aufgerufen wird.

[in] IoAddress

Gibt eine busrelative Basisadresse für den Bereich der Ports oder des Gerätespeichers an, die überprüft werden soll, bevor der HwScsiFindAdapter Routineversuche des Miniporttreibers versucht, den Zugriffsbereich für den Adapter an dieser Adresse zuzuordnen.

[in] NumberOfBytes

Gibt die Größe in Bytes oder anzahl der Elemente im Bereich an.

[in] InIoSpace

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

Rückgabewert

ScsiPortValidateRange gibt TRUE- zurück, wenn die HwScsiFindAdapter-Routine den zugeordneten Bereich sicher zuordnen und verwenden kann, um auf den Adapter zuzugreifen. ScsiPortValidateRange gibt FALSE zurück, wenn die angegebenen Zugriffsbereichswerte bereits von einem anderen Treiber in der Registrierung beansprucht wurden.

Bemerkungen

ScsiPortValidateRange-kann nur von der HwScsiFindAdapter Routine eines Miniporttreibers aufgerufen werden. Anrufe von anderen Miniporttreiberroutinen führen zu Systemfehlern oder falschen Vorgängen für den Anrufer.

Wenn der betriebssystemspezifische Porttreiber AccessRanges-Element der PORT_CONFIGURATION_INFORMATION Struktur initialisiert, bevor er die HwScsiFindAdapter Routine des Miniporttreibers aufruft, muss der Miniporttreiber die angegebenen Werte an ScsiPortGetDeviceBase übergeben und die zugeordneten logischen Adressen für den Bereich verwenden, um zu bestimmen, ob ein HBA einer ist, der unterstützt wird.

Der Porttreiber füllt entweder ein ACCESS_RANGE-Typ-Element mit einer vollständigen Beschreibung eines busrelativen Adressbereichs für einen Adapter aus, oder der Porttreiber nullt alle Elemente des Elements.

Bei Eingaben AccessRanges- Elementen, die mit Standardmäßigen Nullen festgelegt sind, kann die HwScsiFindAdapter Routine versuchen, einen Adapter zu finden, der auf dem angegebenen E/A-Bus unterstützt wird. Unter diesen Umständen verfügt ein Miniporttreiber in der Regel über eine Reihe von treiberbestimmten Standardadressen für seine Typen von HBA. Ein zuvor geladener Treiber verwendet jedoch möglicherweise bereits einen initialisierten Adapter in einem der Standardadressbereiche dieses Miniporttreibers, insbesondere in x86-systemen, in denen einige Geräte im x86-Realmodus initialisiert werden. Um zu verhindern, dass ein solches Gerät versehentlich neu programmiert wird, sollte die HwScsiFindAdapter Routine jedes Miniporttreibers ScsiPortValidateRange aufrufen, bevor es Treiberadressen mit ScsiPortGetDeviceBase- ordnet und dann die zugeordneten logischen Adressen verwendet, um Adapter auf einem I/O-Bus abzufragen.

Wenn ScsiPortValidateRangeFALSEzurückgibt, darf HwScsiFindAdapter nicht versuchen, die Eingabebereichsadressen zuzuordnen, da bereits ein anderer Treiber den Bereich in der Registrierung beansprucht hat.

Wenn ScsiPortValidateRangeTRUEzurückgibt, kann HwScsiFindAdapter Folgendes sicher ausführen:

  1. Ordnen Sie die Adressen des busrelativen Bereichs mit ScsiPortGetDeviceBase-zu logischen Bereichsadressen des Systemraums zu.
  2. Verwenden Sie die zugeordneten logischen Adressen mit dem ScsiPortRead/WriteXxx-, um zu bestimmen, ob der Adapter tatsächlich ein HBA ist, den der Treiber unterstützt.
Wenn ein Miniporttreiber einen Bereich verwendet, der erfolgreich an ScsiPortValidateRange für einen unterstützten HBA übergeben wird, muss dieser Treiber den InIoSpace--Wert umkehren, wenn der RangeInMemory- Member eines AccessRanges--Elements im PORT_CONFIGURATION_INFORMATION festgelegt wird.

ScsiPortValidateRange verwendet SCSI_PHYSICAL_ADDRESS, um busrelative Adressen darzustellen.

typedef PHYSICAL_ADDRESS SCSI_PHYSICAL_ADDRESS, *PSCSI_PHYSICAL_ADDRESS;

Der SCSI_PHYSICAL_ADDRESS Typ ist ein betriebssystemunabhängiger Datentyp, den SCSI-Miniporttreiber verwenden, um eine physische Adresse oder eine busrelative Adresse darzustellen.

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.
 

Anforderungen

Anforderung Wert
Zielplattform- Desktop
Header- srb.h (include Miniport.h, Scsi.h)
Library Scsiport.lib

Siehe auch

ACCESS_RANGE

HwScsiFindAdapter-

PORT_CONFIGURATION_INFORMATION (SCSI)-

ScsiPortGetDeviceBase-

ScsiPortInitialize-