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. 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:
- Ordnen Sie die Adressen des busrelativen Bereichs mit ScsiPortGetDeviceBase-zu logischen Bereichsadressen des Systemraums zu.
- 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.
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.
Anforderungen
Anforderung | Wert |
---|---|
Zielplattform- | Desktop |
Header- | srb.h (include Miniport.h, Scsi.h) |
Library | Scsiport.lib |