Condividi tramite


Funzione ScsiPortValidateRange (srb.h)

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

Nota I modelli di driver di porta SCSI e miniport SCSI potrebbero essere modificati o non disponibili in futuro. È invece consigliabile usare il driver Storport e i 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 di porta alloca e inizializza per conto del driver miniport. I driver Miniport archivia in genere informazioni specifiche dell'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 membro DeviceExtension-HwDeviceExtension> dell'oggetto dispositivo 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 nella struttura 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 che la routine HwScsiFindAdapter del driver miniport tenti 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. Se FALSE, l'intervallo è nello spazio di memoria.

Valore restituito

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

Commenti

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 non corretta per il chiamante.

Se il driver di porta specifico del sistema operativo inizializza qualsiasi elemento AccessRanges della struttura PORT_CONFIGURATION_INFORMATION prima di chiamare la routine HwScsiFindAdapter del driver miniport, 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 o il driver di porta zero tutti i membri dell'elemento.

Per gli elementi AccessRanges di input impostati con zeri predefiniti, la routine HwScsiFindAdapter può tentare di individuare un adattatore supportato nel bus di I/O specificato. In questi casi, 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 solo x86 in cui alcuni dispositivi vengono inizializzati in modalità reale x86. Per evitare che un dispositivo di questo tipo venga riprogrammato inavvertitamente, ogni routine HwScsiFindAdapter del driver miniport 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 le schede su 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 del bus agli indirizzi dell'intervallo logico dello spazio di sistema con ScsiPortGetDeviceBase.
  2. Usare gli indirizzi logici mappati con ScsiPortRead/WriteXxx per determinare se l'adattatore è effettivamente un HBA supportato dal driver.
Se un driver miniport usa un intervallo passato correttamente a ScsiPortValidateRange per un HBA supportato, tale driver deve invertire il valore InIoSpace quando imposta il membro RangeInMemory di un elemento AccessRanges 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 di porta SCSI e miniport SCSI potrebbero essere modificati o non disponibili in futuro. È invece consigliabile usare il driver Storport e i modelli di driver miniport Storport .
 

Requisiti

Requisito Valore
Piattaforma di destinazione Desktop
Intestazione srb.h (include Miniport.h, Scsi.h)
Libreria Scsiport.lib

Vedi anche

ACCESS_RANGE

HwScsiFindAdapter

PORT_CONFIGURATION_INFORMATION (SCSI)

ScsiPortGetDeviceBase

ScsiPortInitialize