Función ScsiPortValidateRange (srb.h)

La rutina ScsiPortValidateRange indica si otro controlador ya ha reclamado los valores de intervalo de acceso especificados en el Registro.

Nota Los modelos del controlador de puerto SCSI y del controlador de miniporte SCSI pueden modificarse o no estar disponibles en el futuro. En su lugar, se recomienda usar el controlador Storport y los modelos de controlador de miniport storport .
 

Sintaxis

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

Parámetros

[in] HwDeviceExtension

Puntero a la extensión de dispositivo de hardware. Se trata de un área de almacenamiento por HBA que el controlador de puerto asigna e inicializa en nombre del controlador de minipuerto. Los controladores de minipuerto suelen almacenar información específica de HBA en esta extensión, como el estado del HBA y los intervalos de acceso asignados del HBA. Esta área está disponible para el controlador de miniport en el miembro DeviceExtension-HwDeviceExtension> del objeto de dispositivo del HBA inmediatamente después de que el controlador de miniporte llame a ScsiPortInitialize. El controlador de puerto libera esta memoria cuando quita el dispositivo.

[in] BusType

Especifica el valor del miembro AdapterInterfaceType en la estructura PORT_CONFIGURATION_INFORMATION cuando se llama a HwScsiFindAdapter .

[in] SystemIoBusNumber

Especifica el valor del miembro SystemIoBusNumber en la información de configuración cuando se llama a HwScsiFindAdapter .

[in] IoAddress

Especifica una dirección base relativa al bus para el intervalo de puertos o memoria del dispositivo que se va a validar antes de que la rutina HwScsiFindAdapter del controlador de miniporte intente asignar el intervalo de acceso para el adaptador en esa dirección.

[in] NumberOfBytes

Especifica el tamaño en bytes o el número de elementos del intervalo.

[in] InIoSpace

Indica si es TRUE que el intervalo está en el espacio de E/S, en lugar de en la memoria. Cuando es FALSE, el intervalo está en espacio de memoria.

Valor devuelto

ScsiPortValidateRange devuelve TRUE si la rutina HwScsiFindAdapter puede asignarse de forma segura y usar el intervalo asignado para acceder al adaptador. ScsiPortValidateRange devuelve FALSE si otro controlador ya ha reclamado los valores de intervalo de acceso especificados en el Registro.

Comentarios

Solo se puede llamar a ScsiPortValidateRange desde una rutina HwScsiFindAdapter del controlador de miniport. Las llamadas de otras rutinas del controlador de miniporte producirán un error del sistema o una operación incorrecta para el autor de la llamada.

Si el controlador de puerto específico del sistema operativo inicializa cualquier elemento AccessRanges de la estructura de PORT_CONFIGURATION_INFORMATION antes de llamar a la rutina HwScsiFindAdapter del controlador de miniport, el controlador de miniport debe pasar los valores proporcionados a ScsiPortGetDeviceBase y usar las direcciones lógicas asignadas para el rango para determinar si un HBA es el que admite.

El controlador de puerto rellena un elemento de tipo ACCESS_RANGE con una descripción completa de un intervalo de direcciones relativas al bus para un adaptador o el controlador de puerto cero todos los miembros del elemento.

Para los elementos AccessRanges de entrada establecidos con ceros predeterminados, la rutina HwScsiFindAdapter puede intentar localizar un adaptador que admite en el bus de E/S determinado. En estas circunstancias, un controlador de minipuerto suele tener un conjunto de direcciones predeterminadas determinadas por el controlador para sus tipos de HBA. Sin embargo, es posible que un controlador cargado previamente ya esté usando un adaptador inicializado en uno de los intervalos de direcciones predeterminados del controlador de miniporte, especialmente en sistemas solo x86 en los que algunos dispositivos se inicializan en modo real x86. Para evitar que este dispositivo se vuelva a programar accidentalmente, cada rutina del controlador de miniporte HwScsiFindAdapter debe llamar a ScsiPortValidateRange antes de asignar direcciones proporcionadas por el controlador con ScsiPortGetDeviceBase y, a continuación, usar las direcciones lógicas asignadas para interrogar adaptadores en un bus de E/S.

Si ScsiPortValidateRange devuelve FALSE, HwScsiFindAdapter no debe intentar asignar las direcciones del intervalo de entrada porque otro controlador ya ha reclamado el intervalo en el registro.

Si ScsiPortValidateRange devuelve TRUE, HwScsiFindAdapter puede hacer lo siguiente de forma segura:

  1. Asigne las direcciones del intervalo relativo al bus a las direcciones del intervalo lógico del espacio del sistema con ScsiPortGetDeviceBase.
  2. Use las direcciones lógicas asignadas con ScsiPortRead/WriteXxx para determinar si el adaptador es realmente un HBA que admite el controlador.
Si un controlador de minipuerto usa un intervalo pasado correctamente a ScsiPortValidateRange para un HBA que admite, ese controlador debe invertir el valor InIoSpace cuando establece el miembro RangeInMemory de un elemento AccessRanges en el PORT_CONFIGURATION_INFORMATION.

ScsiPortValidateRange usa SCSI_PHYSICAL_ADDRESS para representar direcciones relativas al bus.

typedef PHYSICAL_ADDRESS SCSI_PHYSICAL_ADDRESS, *PSCSI_PHYSICAL_ADDRESS;

El tipo SCSI_PHYSICAL_ADDRESS es un tipo de datos independiente del sistema operativo que usan los controladores de miniporte SCSI para representar direcciones físicas o una dirección relativa al bus.

Nota Los modelos del controlador de puerto SCSI y del controlador de miniporte SCSI pueden modificarse o no estar disponibles en el futuro. En su lugar, se recomienda usar el controlador Storport y los modelos de controlador de miniport storport .
 

Requisitos

Requisito Value
Plataforma de destino Escritorio
Encabezado srb.h (incluya Miniport.h, Scsi.h)
Library Scsiport.lib

Consulte también

ACCESS_RANGE

HwScsiFindAdapter

PORT_CONFIGURATION_INFORMATION (SCSI)

ScsiPortGetDeviceBase

ScsiPortInitialize