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.
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:
- Eseguire il mapping degli indirizzi dell'intervallo relativo al bus agli indirizzi dell'intervallo logico dello spazio di sistema con ScsiPortGetDeviceBase.
- Usare gli indirizzi logici mappati con il 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.
Fabbisogno
Requisito | Valore |
---|---|
piattaforma di destinazione | Desktop |
intestazione | srb.h (include Miniport.h, Scsi.h) |
libreria | Scsiport.lib |