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.
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:
- Eseguire il mapping degli indirizzi dell'intervallo relativo del bus agli indirizzi dell'intervallo logico dello spazio di sistema con ScsiPortGetDeviceBase.
- Usare gli indirizzi logici mappati con ScsiPortRead/WriteXxx per determinare se l'adattatore è effettivamente un HBA supportato dal driver.
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.
Requisiti
Requisito | Valore |
---|---|
Piattaforma di destinazione | Desktop |
Intestazione | srb.h (include Miniport.h, Scsi.h) |
Libreria | Scsiport.lib |