Compartir a través de


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 HwStorProcessServiceRequest del controlador 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.

HwCompleteServiceIrp

Puntero a la rutina de HwStorCompleteServiceIrp 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.

HwInitializeTracing

Puntero a la rutina de del controlador de miniporte virtual HwStorInitializeTracing. 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.

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 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
encabezado de storport.h (incluya Storport.h)