Función ScsiPortValidateRange (srb.h)
La rutina ScsiPortValidateRange indica si otro controlador ya ha reclamado los valores del intervalo de acceso especificados en el Registro.
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 miniport. Los controladores de miniportar 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 DeviceExtension->HwDeviceExtension miembro 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 el controlador de miniporte HwScsiFindAdapter rutina intenta 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 cuándo es TRUE que el intervalo está en espacio de E/S, en lugar de en la memoria. Cuando FALSE, el intervalo está en espacio de memoria.
Valor devuelto
ScsiPortValidateRange devuelve TRUE si la rutina HwScsiFindAdapter puede asignar 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.
Observaciones
ScsiPortValidateRange solo se puede llamar desde una rutina de HwScsiFindAdapter del controlador de miniporte. Las llamadas de otras rutinas del controlador de miniportar provocará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 PORT_CONFIGURATION_INFORMATION antes de llamar a la rutina de del controlador de miniporte HwScsiFindAdapter, el controlador de miniport debe pasar los valores proporcionados a ScsiPortGetDeviceBase y usar las direcciones lógicas asignadas para el intervalo 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 la entrada AccessRanges elementos establecidos con ceros predeterminados, la rutina HwScsiFindAdapter puede intentar localizar un adaptador que admite en el bus de E/S especificado. En estas circunstancias, un controlador de miniporte normalmente tiene un conjunto de direcciones predeterminadas determinadas por controladores 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 de este controlador de miniport, especialmente en sistemas x86 solo en los que algunos dispositivos se inicializan en modo real x86. Para evitar que este dispositivo se reprograme accidentalmente, cada controlador de miniporte HwScsiFindAdapter rutina debe llamar a ScsiPortValidateRange antes de asignar las direcciones proporcionadas por el controlador con ScsiPortGetDeviceBase y, a continuación, usa 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:
- Asigne las direcciones del intervalo relativo al bus a las direcciones del intervalo lógico del espacio del sistema con ScsiPortGetDeviceBase.
- Use las direcciones lógicas asignadas con el ScsiPortRead/WriteXxx para determinar si el adaptador es realmente un HBA que admite el controlador.
ScsiPortValidateRange usa SCSI_PHYSICAL_ADDRESS para representar direcciones relativas al bus.
typedef PHYSICAL_ADDRESS SCSI_PHYSICAL_ADDRESS, *PSCSI_PHYSICAL_ADDRESS;
El tipo de 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.
Requisitos
Requisito | Valor |
---|---|
de la plataforma de destino de | Escritorio |
encabezado de | srb.h (include Miniport.h, Scsi.h) |
biblioteca de | Scsiport.lib |
Consulte también
de PORT_CONFIGURATION_INFORMATION (SCSI)