estructura HW_INITIALIZATION_DATA (storport.h)
La estructura HW_INITIALIZATION_DATA (Storport) contiene información específica para cada controlador de miniporte 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 tamaño de(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 de miniport debe establecer el valor de este miembro para el controlador de puerto.
AdapterInterfaceType
El controlador storport no admite buses heredados. Por lo tanto, la mayoría de los tipos de interfaz de adaptador que se usan con el controlador de puerto SCSI no son válidos para Storport. En concreto, Isa, Eisa, MicroChannely TurboChannel no se admiten. Además, a diferencia del caso del puerto SCSI, no se requiere un controlador de miniport que funcione con el controlador Storport para proporcionar valores para los miembros de VendorIdLength, VendorId, DeviceIdLengthy DeviceId.
HwInitialize
Puntero a la rutina HwStorInitialize del controlador de miniporte, que es un punto de entrada necesario para todos los controladores de miniport.
HwStartIo
Puntero a la rutina de HwStorStart Io del controlador de miniporte, que es un punto de entrada necesario para todos los controladores de miniport.
HwInterrupt
Puntero a la rutina del controlador de miniporte HwStorInterrupt, que es un punto de entrada necesario para todos los controladores de miniport.
HwFindAdapter
Puntero a la rutina de HwStorFindAdapter del controlador de miniporte, que es un punto de entrada necesario para todos los controladores de miniport.
HwResetBus
Puntero a la rutina del controlador de miniporte HwStorResetBus, que es un punto de entrada necesario para todos los controladores de miniport.
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 miniporte 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 miniport. El tamaño especificado no incluye ningún almacenamiento solicitado por unidad lógica por controlador de miniport. 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 salida, Storport no sigue ese modelo. En su lugar, Storport restablece la extensión del dispositivo a 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 salida. Las llamadas posteriores a HwStorFindAdapter y otras funciones de miniporte reciben la extensión del dispositivo como la última modificación del miniport. Esto permite que el controlador de miniporte mantenga conocimiento sobre el estado del adaptador entre plug and play (PnP) se detiene y reinicia, posiblemente permitiendo 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 miniporte puede usar sus extensiones de LU como almacenamiento para la 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 miniporte 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 miniporte 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 miniportar. El hardware HBA puede acceder a una extensión SRB de forma segura. Dado que los controladores de miniport que funcionan con el controlador de 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 miniporte 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 miniport.
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 siguientes valores.
Valor | Significado |
---|---|
STOR_MAP_NO_BUFFERS (0) | No asigne ningún SRB excepto SRB_FUNCTION_IO_CONTROL y SRB_FUNCTION_WMI. |
STOR_MAP_ALL_BUFFERS (1) | Obsoleto. Este valor tiene el mismo efecto que STOR_MAP_NON_READ_WRITE_BUFFERS. |
STOR_MAP_NON_READ_WRITE_BUFFERS (2) | Asigne el búfer para todas las E/S, excepto para las solicitudes de lectura o escritura. |
STOR_MAP_ALL_BUFFERS_INCLUDING_READ_WRITE (3) | 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 miniport que funcionan con el controlador storport deben admitir DMA maestro de bus, 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 miniport que funcionan con el controlador storport deben admitir la puesta en cola etiquetada.
AutoRequestSense
Debe ser TRUE. Un valor de 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 miniport 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 miniporte 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 de HwStorAdapterControl del controlador de miniporte. Se trata de una rutina necesaria porque los controladores de miniport que funcionan con el controlador storport requieren compatibilidad con PnP.
HwBuildIo
Puntero a una rutina opcional HwStorBuildIo que el controlador de puerto llama a para realizar un procesamiento no sincronizado antes de llamar a la rutina de HwStorStartIo del controlador de miniport. Esta devolución de llamada es específica de los miniportes físicos y debe establecerse en NULL mediante miniportes virtuales.
HwFreeAdapterResources
Puntero al controlador de miniporte virtual HwStorFreeAdapterResources rutina, que es un punto de entrada necesario para todos los controladores de miniport virtual. Esta devolución de llamada es específica de los miniportes virtuales y se establece en NULL para miniportes físicos.
Esta devolución de llamada se agrega en Windows 8. Los miniportes virtuales para versiones anteriores de Windows deben usar VIRTUAL_HW_INITIALIZATION_DATA en lugar de esta estructura.
HwProcessServiceRequest
Puntero a la rutina de
Esta devolución de llamada se agrega en Windows 8. Los miniportes virtuales para versiones anteriores de Windows deben usar VIRTUAL_HW_INITIALIZATION_DATA en lugar de esta estructura.
HwCompleteServiceIrp
Puntero a la rutina de
Esta devolución de llamada se agrega en Windows 8. Los miniportes virtuales para versiones anteriores de Windows deben usar VIRTUAL_HW_INITIALIZATION_DATA en lugar de esta estructura.
HwInitializeTracing
Puntero a la rutina de del controlador de miniporte virtual
Esta devolución de llamada se agrega en Windows 8. Los miniportes virtuales para 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 los miniportes virtuales y se establece en NULL para miniportes físicos.
Esta devolución de llamada se agrega en Windows 8. Los miniportes virtuales para versiones anteriores de Windows deben usar VIRTUAL_HW_INITIALIZATION_DATA en lugar de esta estructura.
HwTracingEnabled
Puntero a un HwStorTracingEnabled opcional rutina 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 minipuerto. FeatureSupport se establece en una combinación de estos valores:
Valor | Significado |
---|---|
STOR_FEATURE_VIRTUAL_MINIPORT (0x00000001) | Se trata de un controlador de minipuerto virtual. |
STOR_FEATURE_ATA_PASS_THROUGH (0x00000002) | El minipuerto admite el paso de ATA. |
STOR_FEATURE_FULL_PNP_DEVICE_CAPABILITIES (0x00000004) | El minipuerto proporciona una configuración completa en su estructura de STOR_DEVICE_CAPABILITIES_EX. |
STOR_FEATURE_DUMP_POINTERS (0x00000008) | El minipuerto admite los SRB del puntero de volcado. |
STOR_FEATURE_DEVICE_NAME_NO_SUFFIX (0x00000010) | El controlador de miniport no quiere el sufijo "SCSI tipo Dispositivo" como parte del nombre descriptivo del dispositivo. |
STOR_FEATURE_DUMP_RESUME_CAPABLE (0x00000020) | La funcionalidad de volcado de miniporte es funcional para reanudarse desde la hibernación. |
STOR_FEATURE_DEVICE_DESCRIPTOR_FROM_ATA_INFO_VPD (0x00000040) | El controlador de 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_EXTRA_IO_INFORMATION (0x00000080) | El controlador de minipuerto quiere SRBEX_DATA_IO_INFO en un SRBEX si está disponible. |
STOR_FEATURE_ADAPTER_CONTROL_PRE_FINDADAPTER (0x00000100) | El controlador de miniport puede procesar de forma segura la llamada AdapterControl desde Storport antes de recibir HwFindAdapter. |
STOR_FEATURE_ADAPTER_NOT_REQUIRE_IO_PORT (0x00000200) | El controlador de minipuerto no requiere un recurso de puerto de E/S para su adaptador. |
STOR_FEATURE_DUMP_16_BYTE_ALIGNMENT (0x00000400) | El controlador de miniport quiere que su HwDeviceExtension esté alineado con 16 bytes en modo de volcado. |
STOR_FEATURE_SET_ADAPTER_INTERFACE_TYPE (0x00000800) | El miniport quiere que Storport establezca el tipo de interfaz del adaptador. |
STOR_FEATURE_DUMP_INFO (0x00001000) | El controlador de miniporte admite la información de volcado SRB. |
STOR_FEATURE_DMA_ALLOCATION_NO_BOUNDARY (0x00002000) | El controlador de minipuerto admite la asignación de DMA a la memoria física sin límites. |
STOR_FEATURE_SUPPORTS_NVME_ADAPTER (0x00004000) | El controlador miniport admite adaptadores de almacenamiento basados en NVMe. |
STOR_FEATURE_REPORT_INTERNAL_DATA (0x00008000) | El controlador de miniporte admite la generación de informes de datos internos. |
STOR_FEATURE_EARLY_DUMP (0x00010000) | El controlador de miniporte admite la generación temprana del volcado de memoria. |
STOR_FEATURE_NVME_ICE (0x00020000) | El controlador miniport admite NVMe ICE. |
SrbTypeFlags
Marcas que indican los tipos de SRB admitidos por el miniporte. SrbTypeFlags se establece en 0 o en una combinación de los siguientes valores:
Valor | Significado |
---|---|
SRB_TYPE_FLAG_SCSI_REQUEST_BLOCK (0x1) | El minipuerto usa SRB estándar. |
SRB_TYPE_FLAG_STORAGE_REQUEST_BLOCK (0x2) | El minipuerto admite SRB extendidos. |
AddressTypeFlags
Esquemas de direcciones admitidos por el miniport. Actualmente, se admite el único esquema de direcciones y el miniport debe establecer este miembro en ADDRESS_TYPE_FLAG_BTL8.
Valor | Significado |
---|---|
ADDRESS_TYPE_FLAG_BTL8 (0x1) | Direccionamiento de bus, destino y LUN (BTL) de 8 bits. |
Reserved1
Reservado, establecido en 0.
HwUnitControl
Puntero de 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.
Observaciones
Cada rutina de controlador de miniport storport
Requisitos
Requisito | Valor |
---|---|
encabezado de |
storport.h (incluya Storport.h) |