estructura de HW_INITIALIZATION_DATA (storport.h)
La estructura HW_INITIALIZATION_DATA (Storport) contiene información específica para cada controlador de minipuerto y el hardware que administra el controlador de minipuerto.
Sintaxis
typedef struct _HW_INITIALIZATION_DATA {
ULONG HwInitializationDataSize;
INTERFACE_TYPE AdapterInterfaceType;
PHW_INITIALIZE HwInitialize;
PHW_STARTIO HwStartIo;
PHW_INTERRUPT HwInterrupt;
PVOID HwFindAdapter;
PHW_RESET_BUS HwResetBus;
PHW_DMA_STARTED HwDmaStarted;
PHW_ADAPTER_STATE HwAdapterState;
ULONG DeviceExtensionSize;
ULONG SpecificLuExtensionSize;
ULONG SrbExtensionSize;
ULONG NumberOfAccessRanges;
PVOID Reserved;
UCHAR MapBuffers;
BOOLEAN NeedPhysicalAddresses;
BOOLEAN TaggedQueuing;
BOOLEAN AutoRequestSense;
BOOLEAN MultipleRequestPerLu;
BOOLEAN ReceiveEvent;
USHORT VendorIdLength;
PVOID VendorId;
union {
USHORT ReservedUshort;
USHORT PortVersionFlags;
};
USHORT DeviceIdLength;
PVOID DeviceId;
PHW_ADAPTER_CONTROL HwAdapterControl;
PHW_BUILDIO HwBuildIo;
PHW_FREE_ADAPTER_RESOURCES HwFreeAdapterResources;
PHW_PROCESS_SERVICE_REQUEST HwProcessServiceRequest;
PHW_COMPLETE_SERVICE_IRP HwCompleteServiceIrp;
PHW_INITIALIZE_TRACING HwInitializeTracing;
PHW_CLEANUP_TRACING HwCleanupTracing;
PHW_TRACING_ENABLED HwTracingEnabled;
ULONG FeatureSupport;
ULONG SrbTypeFlags;
ULONG AddressTypeFlags;
ULONG Reserved1;
PHW_UNIT_CONTROL HwUnitControl;
} HW_INITIALIZATION_DATA, *PHW_INITIALIZATION_DATA;
Miembros
HwInitializationDataSize
Especifica el tamaño de esta estructura en bytes, tal y como devuelve sizeof(HW_INITIALIZATION_DATA). En efecto, este miembro indica la versión de esta estructura que usa el controlador de miniport. Una rutina driver's DriverEntry del controlador miniport debe establecer el valor de este miembro para el controlador de puerto.
AdapterInterfaceType
El controlador storport no admite autobuses heredados. Por lo tanto, la mayoría de los tipos de interfaz del adaptador que se usan con el controlador de puerto SCSI no son válidos para Storport. En concreto, No se admiten Isa, Eisa, MicroChannel y TurboChannel . Además, a diferencia del caso del puerto SCSI, no es necesario proporcionar valores para los miembros VendorIdLength, VendorId, DeviceIdLength y DeviceId.
HwInitialize
Puntero a la rutina HwStorInitialize del controlador de miniporte, que es un punto de entrada necesario para todos los controladores de minipuerto.
HwStartIo
Puntero a la rutina HwStorStartIo del controlador de miniporte, que es un punto de entrada necesario para todos los controladores de minipuerto.
HwInterrupt
Puntero a la rutina HwStorInterrupt del controlador de miniporte, que es un punto de entrada necesario para todos los controladores de minipuerto.
HwFindAdapter
Puntero a la rutina HwStorFindAdapter del controlador de miniporte, que es un punto de entrada necesario para todos los controladores de minipuerto.
HwResetBus
Puntero a la rutina HwStorResetBus del controlador de miniporte, que es un punto de entrada necesario para todos los controladores de minipuerto.
HwDmaStarted
El controlador Storport no admite DMA en modo subordinado. Por lo tanto, este miembro debe ser NULL.
HwAdapterState
El controlador Storport no admite controladores heredados. Por lo tanto, este miembro debe ser NULL.
DeviceExtensionSize
Especifica el tamaño, en bytes, requerido por el controlador de miniport para su extensión de dispositivo por adaptador. Un controlador de minipuerto usa su extensión de dispositivo como almacenamiento para la información del adaptador de bus host (HBA) determinado por el controlador. El controlador de puerto específico del sistema operativo inicializa cada extensión de dispositivo una vez, cuando asigna por primera vez la extensión y la rellena con ceros. Pasa un puntero a la extensión de dispositivo específica de HBA en cada llamada a un controlador de minipuerto. El tamaño especificado no incluye ningún almacenamiento de unidad lógica solicitado por controlador de miniporte. El tamaño del almacenamiento por unidad lógica se especifica a través del campo SpecificLuExtensionSize , que se describe más adelante en este tema.
Aunque SCSIPort vuelve a inicializar la extensión del dispositivo cada vez que se detiene el adaptador y, por tanto, las llamadas posteriores a HwScsiFindAdapter reciben una extensión de dispositivo sin cero, Storport no sigue ese modelo. En su lugar, Storport restablece la extensión de dispositivo en cero solo cuando se asigna por primera vez, por lo que solo la primera llamada a HwStorFindAdapter para un adaptador determinado recibe una extensión de dispositivo sin cero. Las llamadas posteriores a HwStorFindAdapter y otras funciones de minipuerto reciben la extensión del dispositivo según la última modificación del miniporte. Esto permite que el controlador de miniporte mantenga conocimiento sobre el estado del adaptador entre Plug and Play (PnP) se detiene y reinicia, lo que posiblemente permite que el controlador de miniporte optimice su procedimiento de inicialización.
SpecificLuExtensionSize
Especifica el tamaño en bytes requerido por el controlador de miniport para su almacenamiento por unidad lógica, si existe. Un controlador de minipuerto puede usar sus extensiones de LU como almacenamiento para información de unidad lógica determinada por el controlador sobre periféricos en el bus. El controlador storport inicializa cada extensión de LU que asigna con ceros. Deje este miembro establecido en cero si el controlador de minipuerto no mantiene la información por LU para la que requiere almacenamiento. Este valor se basa en la suposición de que el HBA puede recibir direcciones de 32 bits, independientemente de lo que el controlador pueda admitir realmente. Si se necesita espacio adicional en las extensiones LUN o SRB para controlar direcciones de 64 bits, se deben realizar ajustes adecuados en este valor antes de usarlo con rutinas como StorPortGetUncachedExtension.
SrbExtensionSize
Especifica el tamaño, en bytes, requerido por el controlador de miniport para su almacenamiento por solicitud, si existe. Un controlador de minipuerto puede usar extensiones SRB como almacenamiento para información específica del controlador determinada por el controlador, como los datos necesarios para procesar una solicitud determinada. El controlador Storport no inicializa las extensiones SRB, pero establece un puntero a este almacenamiento en cada SRB que envía al controlador de miniporte. El hardware HBA puede acceder a una extensión SRB de forma segura. Dado que los controladores de miniport que funcionan con el controlador storport deben admitir listas de dispersión y recopilación, y las listas de dispersión y recopilación por SRB normalmente se asignan en la extensión SRB, este miembro rara vez es cero. Deje este miembro establecido en cero si el controlador de minipuerto no mantiene la información por SRB para la que requiere almacenamiento.
Este valor se basa en la suposición de que el HBA puede recibir direcciones de 32 bits, independientemente de lo que el controlador pueda admitir realmente. Si se necesita espacio adicional en las extensiones LUN o SRB para controlar direcciones de 64 bits, se deben realizar ajustes adecuados en este valor antes de usarlo con rutinas como StorPortGetUncachedExtension.
NumberOfAccessRanges
Especifica cuántos intervalos de acceso usa el adaptador. Cada es un intervalo de direcciones de memoria o direcciones de puerto de E/S.
Reserved
Reservado para uso del sistema y no disponible para su uso por los controladores de minipuerto.
MapBuffers
Indica si el controlador de Storport asigna direcciones de búfer de datos SRB a direcciones virtuales del sistema. El miembro MapBuffers puede tener uno de los valores siguientes.
Valor | Significado |
---|---|
STOR_MAP_NO_BUFFERS | No asigne ningún SRB excepto SRB_FUNCTION_IO_CONTROL y SRB_FUNCTION_WMI. |
STOR_MAP_ALL_BUFFERS | Obsoleto. Este valor tiene el mismo efecto que STOR_MAP_NON_READ_WRITE_BUFFERS. |
STOR_MAP_NON_READ_WRITE_BUFFERS | Asigne el búfer para todas las E/S excepto para las solicitudes de lectura o escritura. |
STOR_MAP_ALL_BUFFERS_INCLUDING_READ_WRITE | Asigne el búfer para todas las E/S, incluidas las solicitudes de lectura y escritura. Este valor es válido a partir de Windows 8. |
NeedPhysicalAddresses
Debe establecerse en TRUE. Un valor de TRUE indica que el controlador de miniporte debe traducir determinados tipos de direcciones a direcciones físicas. Los controladores de minipuerto que funcionan con el controlador storport deben admitir DMA de bus-master, por lo que siempre se les pedirá que realicen la traducción de direcciones.
TaggedQueuing
Debe establecerse en TRUE. Un valor de TRUE indica que el controlador de miniporte admite la puesta en cola etiquetada SCSI. Todos los controladores de minipuerto que funcionan con el controlador storport deben admitir la puesta en cola etiquetada.
AutoRequestSense
Debe ser TRUE. Un valor true indica que el HBA puede realizar una operación de detección de solicitudes sin necesidad de que una solicitud explícita lo haga. Todos los controladores de minipuerto que funcionan con el controlador storport deben admitir el sentido de solicitud automática SCSI.
MultipleRequestPerLu
Debe establecerse en TRUE. Un valor de TRUE indica que el controlador de minipuerto puede poner en cola varias solicitudes por unidad lógica. Los controladores de miniport que funcionan con el controlador storport deben admitir varias solicitudes por unidad lógica.
ReceiveEvent
El controlador storport omite este miembro.
VendorIdLength
El controlador storport omite este miembro, ya que los controladores de miniport que funcionan con el controlador storport deben admitir PnP.
VendorId
El controlador storport omite este miembro, ya que los controladores de miniport que funcionan con el controlador storport deben admitir PnP.
ReservedUshort
PortVersionFlags
Marcas para indicar las características admitidas.
DeviceIdLength
El controlador storport omite este miembro, ya que los controladores de miniport que funcionan con el controlador storport deben admitir PnP.
DeviceId
El controlador storport omite este miembro, ya que los controladores de miniport que funcionan con el controlador storport deben admitir PnP.
HwAdapterControl
Puntero a la rutina HwStorAdapterControl del controlador de miniporte. Se trata de una rutina necesaria porque los controladores de minipuerto que funcionan con el controlador storport requieren compatibilidad con PnP.
HwBuildIo
Puntero a una rutina HwStorBuildIo opcional que el controlador de puerto llama a para realizar un procesamiento sin sincronizar antes de llamar a la rutina HwStorStartIo del controlador de miniport. Esta devolución de llamada es específica de miniportes físicos y debe establecerse en NULL mediante miniportes virtuales.
HwFreeAdapterResources
Puntero a la rutina HwStorFreeAdapterResources del controlador de miniporte virtual, que es un punto de entrada necesario para todos los controladores de minipuerto virtual. Esta devolución de llamada es específica de minipuertos virtuales y se establece en NULL para miniportes físicos.
Esta devolución de llamada se agrega en Windows 8. Los minipuertos virtuales para las versiones anteriores de Windows deben usar VIRTUAL_HW_INITIALIZATION_DATA en lugar de esta estructura.
HwProcessServiceRequest
Puntero a la rutina HwStorProcessServiceRequest del controlador de miniport virtual. Esta devolución de llamada es específica de minipuertos virtuales y se establece en NULL para miniportes físicos.
Esta devolución de llamada se agrega en Windows 8. Los minipuertos virtuales para las versiones anteriores de Windows deben usar VIRTUAL_HW_INITIALIZATION_DATA en lugar de esta estructura.
HwCompleteServiceIrp
Puntero a la rutina HwStorCompleteServiceIrp del controlador de miniporte virtual. Esta devolución de llamada es específica de minipuertos virtuales y se establece en NULL para miniportes físicos.
Esta devolución de llamada se agrega en Windows 8. Los minipuertos virtuales para las versiones anteriores de Windows deben usar VIRTUAL_HW_INITIALIZATION_DATA en lugar de esta estructura.
HwInitializeTracing
Puntero a la rutina HwStorInitializeTracing del controlador de miniporte virtual. Esta devolución de llamada es específica de minipuertos virtuales y se establece en NULL para miniportes físicos.
Esta devolución de llamada se agrega en Windows 8. Los minipuertos virtuales para las versiones anteriores de Windows deben usar VIRTUAL_HW_INITIALIZATION_DATA en lugar de esta estructura.
HwCleanupTracing
Puntero a la rutina HwStorCleanupTracing del controlador de miniporte virtual. Esta devolución de llamada es específica de minipuertos virtuales y se establece en NULL para miniportes físicos.
Esta devolución de llamada se agrega en Windows 8. Los minipuertos virtuales para las versiones anteriores de Windows deben usar VIRTUAL_HW_INITIALIZATION_DATA en lugar de esta estructura.
HwTracingEnabled
Puntero a una rutina HwStorTracingEnabled opcional que el controlador de puerto llama para notificar al miniporte si el seguimiento está habilitado o no.
FeatureSupport
Marcas que indican las características admitidas por el miniporte. FeatureSupport se establece en una combinación de estos valores:
Valor | Significado |
---|---|
STOR_FEATURE_VIRTUAL_MINIPORT | Se trata de un controlador de minipuerto virtual. |
STOR_FEATURE_ATA_PASS_THROUGH | El minipuerto admite el paso de ATA. |
STOR_FEATURE_FULL_PNP_DEVICE_CAPABILITIES | El minipuerto proporciona una configuración completa en su estructura de STOR_DEVICE_CAPABILITIES_EX . |
STOR_FEATURE_DUMP_POINTERS | El minipuerto admite los SRB del puntero de volcado. |
STOR_FEATURE_DEVICE_NAME_NO_SUFFIX | El controlador de miniporte no quiere el sufijo "Dispositivo de tipo SCSI" como parte del nombre descriptivo del dispositivo. |
STOR_FEATURE_DUMP_RESUME_CAPABLE | La funcionalidad de volcado del miniporte es funcional para reanudarse desde la hibernación. |
STOR_FEATURE_DEVICE_DESCRIPTOR_FROM_ATA_INFO_VPD | El controlador storport inicializa el STORAGE_DEVICE_DESCRIPTOR desde la página VPD de información de ATA en lugar de desde los datos DE CONSULTA. |
STOR_FEATURE_SET_ADAPTER_INTERFACE_TYPE | El controlador storport establece el tipo de interfaz del adaptador. |
SrbTypeFlags
Marcas que indican los tipos de SRB admitidos por el miniporte. SrbTypeFlags se establece en 0 o en una combinación de los valores siguientes:
Valor | Significado |
---|---|
SRB_TYPE_FLAG_SCSI_REQUEST_BLOCK | El minipuerto usa SRB estándar. |
SRB_TYPE_FLAG_STORAGE_REQUEST_BLOCK | La minipuerto admite srBs extendidos. |
AddressTypeFlags
Esquemas de direcciones admitidos por el miniporte. Actualmente, se admite el único esquema de direcciones y la minipuerta debe establecer este miembro en ADDRESS_TYPE_FLAG_BTL8.
Valor | Significado |
---|---|
ADDRESS_TYPE_FLAG_BTL8 | Direccionamiento de bus, destino y LUN (BTL) de 8 bits. |
Reserved1
Reservado, establecido en 0.
HwUnitControl
Puntero a la rutina HwStorUnitControl del controlador de miniporte. El controlador de puerto llama a esta rutina con una solicitud de control para un dispositivo de unidad de almacenamiento.
Comentarios
Cada rutina driver's DriverEntry del controlador storport debe llamar a StorPortInitialize después de que el controlador de miniporte se haya cero primero y, a continuación, establezca los miembros de HW_INITIALIZATION_DATA.
Requisitos
Requisito | Valor |
---|---|
Header | storport.h (incluya Storport.h) |