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)