Função ScsiPortValidateRange (srb.h)
A rotina de ScsiPortValidateRange indica se os valores de intervalo de acesso especificados já foram reivindicados no registro por outro driver.
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
);
[in] HwDeviceExtension
Ponteiro para a extensão do dispositivo de hardware. Essa é uma área de armazenamento por HBA que o driver de porta aloca e inicializa em nome do driver de miniporto. Os drivers de miniporto geralmente armazenam informações específicas do HBA nessa extensão, como o estado do HBA e os intervalos de acesso mapeados do HBA. Essa área está disponível para o driver de miniporto no DeviceExtension->HwDeviceExtension membro do objeto de dispositivo do HBA imediatamente após o driver de miniporto chamar ScsiPortInitialize. O driver de porta libera essa memória quando remove o dispositivo.
[in] BusType
Especifica o valor do membro AdapterInterfaceType na estrutura PORT_CONFIGURATION_INFORMATION quando HwScsiFindAdapter é chamado.
[in] SystemIoBusNumber
Especifica o valor do membro SystemIoBusNumber nas informações de configuração quando HwScsiFindAdapter é chamado.
[in] IoAddress
Especifica um endereço base relativo ao barramento para o intervalo de portas ou memória do dispositivo a ser validado antes dedo driver de miniporto HwScsiFindAdapter tentativas de rotina para mapear o intervalo de acesso para o adaptador nesse endereço.
[in] NumberOfBytes
Especifica o tamanho em bytes ou número de elementos no intervalo.
[in] InIoSpace
Indica quando TRUE que o intervalo está no espaço de E/S, em vez de na memória. Quando FALSE, o intervalo está no espaço de memória.
ScsiPortValidateRange retornará verdadeiro se a rotina HwScsiFindAdapter puder mapear e usar com segurança o intervalo mapeado para acessar o adaptador. ScsiPortValidateRange retornará FALSE se os valores de intervalo de acesso especificados já tiverem sido reivindicados no registro por outro driver.
scsiPortValidateRange só pode ser chamado a partir de uma rotina de HwScsiFindAdapter de do driver de miniport. Chamadas de outras rotinas de driver de miniporto resultarão em falha do sistema ou operação incorreta para o chamador.
Se o driver de porta específico do sistema operacional inicializar qualquer elemento AccessRanges da estrutura PORT_CONFIGURATION_INFORMATION antes de chamar a rotina de do HwScsiFindAdapter do driver de miniport, O driver de miniporto deve passar os valores fornecidos para ScsiPortGetDeviceBase e usar os endereços lógicos mapeados para o intervalo para determinar se um HBA é compatível.
O driver de porta preenche um elemento do tipo ACCESS_RANGE com uma descrição completa de um intervalo de endereços relativo ao barramento para um adaptador ou o driver de porta zeros todos os membros do elemento.
Para de entrada do AccessRanges elementos definidos com zeros padrão, a rotina de HwScsiFindAdapter pode tentar localizar um adaptador compatível com ele no barramento de E/S fornecido. Nessas circunstâncias, um driver de miniporto geralmente tem um conjunto de endereços padrão determinados pelo driver para seus tipos de HBA. No entanto, um driver carregado anteriormente pode já estar usando um adaptador inicializado em um dos intervalos de endereços padrão desse miniportor, especialmente em sistemas somente x86 nos quais alguns dispositivos são inicializados no modo real x86. Para impedir que esse dispositivo seja reprogramado inadvertidamente, o HwScsiFindAdapter rotina de cada motorista deve chamar ScsiPortValidateRange antes de mapear os endereços fornecidos pelo driver com ScsiPortGetDeviceBase e, em seguida, usa os endereços lógicos mapeados para interrogar adaptadores em um barramento de E/S.
Se ScsiPortValidateRange retornar false, HwScsiFindAdapter não deverá tentar mapear os endereços de intervalo de entrada porque outro driver já reivindicou o intervalo no registro.
Se ScsiPortValidateRange retornar VERDADEIRO, HwScsiFindAdapter poderá fazer o seguinte com segurança:
- Mapeie os endereços de intervalo relativos ao barramento para endereços de intervalo lógico de espaço do sistema com ScsiPortGetDeviceBase.
- Use os endereços lógicos mapeados com o ScsiPortRead/WriteXxx para determinar se o adaptador realmente é um HBA compatível com o driver.
ScsiPortValidateRange usa SCSI_PHYSICAL_ADDRESS para representar endereços relativos a ônibus.
typedef PHYSICAL_ADDRESS SCSI_PHYSICAL_ADDRESS, *PSCSI_PHYSICAL_ADDRESS;
O tipo SCSI_PHYSICAL_ADDRESS é um tipo de dados independente do sistema operacional que os motoristas de miniporto SCSI usam para representar um endereço físico ou um endereço relativo ao barramento.
Requisito | Valor |
---|---|
da Plataforma de Destino | Área de trabalho |
cabeçalho | srb.h (inclua Miniport.h, Scsi.h) |
biblioteca | Scsiport.lib |