ScsiPortValidateRange-Funktion (srb.h)
Die ScsiPortValidateRange-Routine gibt an, ob die angegebenen Zugriffsbereichswerte bereits von einem anderen Treiber in der Registrierung beansprucht wurden.
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. Hierbei handelt es sich um einen HBA-Speicherbereich, den der Porttreiber im Namen des Miniporttreibers ordnet und initialisiert. Miniporttreiber speichern normalerweise HBA-spezifische Informationen in dieser Erweiterung, z. B. den Zustand des HBA und die zugeordneten Zugriffsbereiche des HBA. Dieser Bereich steht dem Miniporttreiber im DeviceExtension-HwDeviceExtension-Member> des HBA-Geräteobjekts unmittelbar nach dem Aufruf von ScsiPortInitialize durch den Miniporttreiber zur Verfügung. Der Porttreiber gibt diesen Arbeitsspeicher frei, wenn er 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-Members in den Konfigurationsinformationen an, wenn HwScsiFindAdapter aufgerufen wird.
[in] IoAddress
Gibt eine busrelative Basisadresse für den Bereich der Ports oder den Gerätespeicher an, der überprüft werden soll, bevor die HwScsiFindAdapter-Routine des Miniporttreibers versucht, den Zugriffsbereich für den Adapter an dieser Adresse zuzuordnen.
[in] NumberOfBytes
Gibt die Größe in Bytes oder die Anzahl der Elemente im Bereich an.
[in] InIoSpace
Gibt an, wenn true ist, dass sich der Bereich im E/A-Bereich und nicht im Arbeitsspeicher befindet. Bei 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.
Hinweise
ScsiPortValidateRange kann nur aus der HwScsiFindAdapter-Routine eines Miniporttreibers aufgerufen werden. Anrufe von anderen Miniporttreiberroutinen führen zu Systemfehlern oder zu einem falschen Betrieb für den Aufrufer.
Wenn der betriebssystemspezifische Porttreiber ein 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 es sich um einen unterstützten HBA handelt.
Der Porttreiber füllt entweder ein ACCESS_RANGE-Type-Element mit einer vollständigen Beschreibung eines busrelativen Adressbereichs für einen Adapter, oder der Porttreiber stellt alle Elemente des Elements auf Null.
Für AccessRanges-Eingabeelemente , die mit Standardnullen festgelegt sind, kann die HwScsiFindAdapter-Routine versuchen, einen adapter zu finden, den sie auf dem angegebenen E/A-Bus unterstützt. Unter diesen Umständen verfügt ein Miniporttreiber in der Regel über eine Reihe von vom Treiber bestimmten Standardadressen für seinen Typ(en) von HBA. Ein zuvor geladener Treiber verwendet jedoch möglicherweise bereits einen initialisierten Adapter in einem der Standardadressbereiche dieses Miniporttreibers, insbesondere in reinen 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 alle vom Treiber bereitgestellten Adressen ScsiPortGetDeviceBase zugeordnet werden und dann die zugeordneten logischen Adressen verwendet werden, um Adapter auf einem E/A-Bus abzufragen.
Wenn ScsiPortValidateRangeFALSE zurückgibt, darf HwScsiFindAdapter nicht versuchen, die Eingabebereichsadressen zuzuordnen, da bereits ein anderer Treiber den Bereich in der Registrierung beansprucht hat.
Wenn ScsiPortValidateRangeTRUE zurückgibt, kann HwScsiFindAdapter die folgenden Schritte ausführen:
- Ordnen Sie die Adressen des relativen Busbereichs den Logischen Bereichsadressen des Systemraums mit ScsiPortGetDeviceBase zu.
- Verwenden Sie die zugeordneten logischen Adressen mit ScsiPortRead/WriteXxx , um zu bestimmen, ob es sich bei dem Adapter tatsächlich um einen vom Treiber unterstützten HBA handelt.
ScsiPortValidateRange verwendet SCSI_PHYSICAL_ADDRESS , um busrelative Adressen darzustellen.
typedef PHYSICAL_ADDRESS SCSI_PHYSICAL_ADDRESS, *PSCSI_PHYSICAL_ADDRESS;
Der SCSI_PHYSICAL_ADDRESS Typs ist ein betriebssystemunabhängiger Datentyp, den SCSI-Miniporttreiber verwenden, um entweder eine physische Adresse oder eine busrelative Adresse darzustellen.
Anforderungen
Anforderung | Wert |
---|---|
Zielplattform | Desktop |
Kopfzeile | srb.h (einschließlich Miniport.h, Scsi.h) |
Bibliothek | Scsiport.lib |