Condividi tramite


Funzione ScsiPortValidateRange (srb.h)

La routine ScsiPortValidateRange indica se i valori dell'intervallo di accesso specificato sono già stati richiesti nel Registro di sistema da un altro driver.

Nota I modelli di driver porta SCSI e miniport SCSI potrebbero essere modificati o non disponibili in futuro. È invece consigliabile usare driver Storport e modelli di driver miniport Storport.
 

Sintassi

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
);

Parametri

[in] HwDeviceExtension

Puntatore all'estensione del dispositivo hardware. Si tratta di un'area di archiviazione per HBA che il driver della porta alloca e inizializza per conto del driver miniport. I driver Miniport in genere archiviano informazioni specifiche di HBA in questa estensione, ad esempio lo stato dell'HBA e gli intervalli di accesso mappati dell'HBA. Questa area è disponibile per il driver miniport nel DeviceExtension->HwDeviceExtension membro dell'oggetto dispositivo dell'HBA subito dopo che il driver miniport chiama ScsiPortInitialize. Il driver della porta libera questa memoria quando rimuove il dispositivo.

[in] BusType

Specifica il valore del membro AdapterInterfaceType PORT_CONFIGURATION_INFORMATION quando viene chiamato HwScsiFindAdapter.

[in] SystemIoBusNumber

Specifica il valore del membro SystemIoBusNumber nelle informazioni di configurazione quando viene chiamato HwScsiFindAdapter.

[in] IoAddress

Specifica un indirizzo di base relativo al bus per l'intervallo di porte o memoria del dispositivo da convalidare prima diHwScsiFindAdapter del driver miniport tenta di eseguire il mapping dell'intervallo di accesso per l'adattatore in tale indirizzo.

[in] NumberOfBytes

Specifica la dimensione in byte o il numero di elementi nell'intervallo.

[in] InIoSpace

Indica quando true che l'intervallo è nello spazio di I/O anziché in memoria. Quando FALSE, l'intervallo è nello spazio di memoria.

Valore restituito

ScsiPortValidateRange restituisce TRUE se la routine HwScsiFindAdapter può eseguire il mapping sicuro e utilizzare l'intervallo mappato per accedere all'adattatore. ScsiPortValidateRange restituisce FALSE se i valori dell'intervallo di accesso specificato sono già stati richiesti nel Registro di sistema da un altro driver.

Osservazioni

ScsiPortValidateRange può essere chiamato solo dalla routine HwScsiFindAdapter di un driver miniport. Le chiamate da altre routine del driver miniport genereranno un errore di sistema o un'operazione errata per il chiamante.

Se il driver di porta specifico del sistema operativo inizializza qualsiasi AccessRanges elemento della struttura PORT_CONFIGURATION_INFORMATION prima di chiamare il driver miniport HwScsiFindAdapter routine, il driver miniport deve passare i valori forniti a ScsiPortGetDeviceBase e usare gli indirizzi logici mappati per l'intervallo per determinare se un HBA è uno supportato.

Il driver della porta riempie un elemento di tipo ACCESS_RANGE con una descrizione completa di un intervallo di indirizzi relativo al bus per un adattatore oppure il driver della porta zero tutti i membri dell'elemento.

Per l'input AccessRanges elementi impostati con zeri predefiniti, la routine HwScsiFindAdapter può tentare di individuare un adattatore supportato nel bus di I/O specificato. In queste circostanze, un driver miniport ha in genere un set di indirizzi predefiniti determinati dal driver per i relativi tipi di HBA. Tuttavia, un driver caricato in precedenza potrebbe già usare una scheda inizializzata in uno degli intervalli di indirizzi predefiniti di questo driver miniport, in particolare nei sistemi x86 in cui alcuni dispositivi vengono inizializzati in modalità reale x86. Per evitare che un dispositivo di questo tipo venga riprogrammato inavvertitamente, ogni driver miniport HwScsiFindAdapter routine deve chiamare ScsiPortValidateRange prima che esegua il mapping di qualsiasi indirizzo fornito dal driver con ScsiPortGetDeviceBase e quindi usi gli indirizzi logici mappati per interrogare gli adattatori in un bus di I/O.

Se ScsiPortValidateRange restituisce FALSE, HwScsiFindAdapter non deve tentare di eseguire il mapping degli indirizzi dell'intervallo di input perché un altro driver ha già richiesto l'intervallo nel Registro di sistema.

Se ScsiPortValidateRange restituisce TRUE, HwScsiFindAdapter può eseguire le operazioni seguenti:

  1. Eseguire il mapping degli indirizzi dell'intervallo relativo al bus agli indirizzi dell'intervallo logico dello spazio di sistema con ScsiPortGetDeviceBase.
  2. Usare gli indirizzi logici mappati con il ScsiPortRead/WriteXxx per determinare se l'adattatore è effettivamente un HBA supportato dal driver.
Se un driver miniport utilizza un intervallo passato correttamente a ScsiPortValidateRange per un HBA supportato, tale driver deve invertire il valore InIoSpace quando imposta il membro RangeInMemory di un AccessRanges elemento nel PORT_CONFIGURATION_INFORMATION.

ScsiPortValidateRange usa SCSI_PHYSICAL_ADDRESS per rappresentare gli indirizzi relativi al bus.

typedef PHYSICAL_ADDRESS SCSI_PHYSICAL_ADDRESS, *PSCSI_PHYSICAL_ADDRESS;

Il tipo SCSI_PHYSICAL_ADDRESS è un tipo di dati indipendente dal sistema operativo usato dai driver miniport SCSI per rappresentare indirizzi fisici o un indirizzo relativo al bus.

Nota I modelli di driver porta SCSI e miniport SCSI potrebbero essere modificati o non disponibili in futuro. È invece consigliabile usare driver Storport e modelli di driver miniport Storport.
 

Fabbisogno

Requisito Valore
piattaforma di destinazione Desktop
intestazione srb.h (include Miniport.h, Scsi.h)
libreria Scsiport.lib

Vedere anche

ACCESS_RANGE

HwScsiFindAdapter

PORT_CONFIGURATION_INFORMATION (SCSI)

ScsiPortGetDeviceBase

ScsiPortInitialize