Compartilhar via


estrutura HW_INITIALIZATION_DATA (storport.h)

A estrutura HW_INITIALIZATION_DATA (Storport) contém informações específicas para cada driver de miniporto e o hardware que o driver de miniporto gerencia.

Sintaxe

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;

Membros

HwInitializationDataSize

Especifica o tamanho dessa estrutura em bytes, conforme retornado por tamanhos de(HW_INITIALIZATION_DATA). Na verdade, esse membro indica a versão dessa estrutura que está sendo usada pelo driver de miniporto. A rotina DriverEntry de um driver de miniport deve definir o valor desse membro para o driver de porta.

AdapterInterfaceType

O motorista do Storport não dá suporte a ônibus herdados. Portanto, a maioria dos tipos de interface do adaptador usados com o driver de porta SCSI são inválidos para Storport. Em particular, não há suporte para Isa, Eisa, MicroChannele TurboChannel. Além disso, ao contrário do caso da porta SCSI, um driver de miniporto que funciona com o driver Storport não é necessário para fornecer valores para os membros VendorIdLength, VendorId, DeviceIdLengthe deviceId.

HwInitialize

Ponteiro para a rotina de HwStorInitialize do driver de miniporto, que é um ponto de entrada necessário para todos os drivers de miniporto.

HwStartIo

Ponteiro para a rotina HwStorStartIo do driver de miniporto, que é um ponto de entrada necessário para todos os drivers de miniporto.

HwInterrupt

Ponteiro para a rotina de do HwStorInterrupt do driver de miniporto, que é um ponto de entrada necessário para todos os drivers de miniporto.

HwFindAdapter

Ponteiro para a rotina de HwStorFindAdapter do driver de miniporto, que é um ponto de entrada necessário para todos os drivers de miniporto.

HwResetBus

Ponteiro para a rotina de HwStorResetBus do driver de miniporto, que é um ponto de entrada necessário para todos os drivers de miniporto.

HwDmaStarted

O driver Storport não dá suporte ao DMA de modo subordinado. Portanto, esse membro deve ser NULL.

HwAdapterState

O driver Storport não dá suporte a drivers herdados. Portanto, esse membro deve ser NULL.

DeviceExtensionSize

Especifica o tamanho, em bytes, exigido pelo driver de miniporto para sua extensão de dispositivo por adaptador. Um driver de miniporto usa sua extensão de dispositivo como armazenamento para informações do HBA (adaptador de barramento de host) determinado pelo driver. O driver de porta específico do sistema operacional inicializa cada extensão de dispositivo uma vez, quando aloca a extensão pela primeira vez e a preenche com zeros. Ele passa um ponteiro para a extensão de dispositivo específica do HBA em cada chamada para um driver de miniporto. O tamanho especificado não inclui nenhum armazenamento por unidade lógica solicitado pelo driver de miniport. O tamanho do armazenamento por unidade lógica é especificado por meio do campo SpecificLuExtensionSize, descrito posteriormente neste tópico.

Embora o SCSIPort re-inicialize a extensão do dispositivo sempre que o adaptador for interrompido e, portanto, chamadas subsequentes para HwScsiFindAdapter receber uma extensão de dispositivo zerada, o Storport não segue esse modelo. Em vez disso, o Storport redefine a extensão do dispositivo como zero somente quando ela é alocada pela primeira vez, portanto, somente a primeira chamada para HwStorFindAdapter para um determinado adaptador recebe uma extensão de dispositivo zerada. Chamadas subsequentes para HwStorFindAdapter e outras funções de miniporto recebem a extensão do dispositivo conforme modificado pela última vez pelo miniporto. Isso permite que o driver de miniporte mantenha o conhecimento sobre o estado do adaptador entre paradas e reinicializações do Plug and Play (PnP), possivelmente permitindo que o driver de miniporto otimize seu procedimento de inicialização.

SpecificLuExtensionSize

Especifica o tamanho em bytes exigido pelo driver de miniporto para seu armazenamento por unidade lógica, se houver. Um driver de miniporto pode usar suas extensões LU como armazenamento para informações de unidade lógica determinadas pelo driver sobre periféricos no barramento. O driver Storport inicializa cada extensão LU alocada com zeros. Deixe esse membro definido como zero se o driver de miniporto não mantiver informações por LU para as quais ele requer armazenamento. Esse valor baseia-se na suposição de que o HBA é capaz de receber endereços de 32 bits, independentemente do que o controlador possa realmente dar suporte. Se for necessário espaço adicional nas extensões LUN ou SRB para lidar com endereços de 64 bits, os ajustes apropriados deverão ser feitos nesse valor antes de usá-lo com rotinas como StorPortGetUncachedExtension.

SrbExtensionSize

Especifica o tamanho, em bytes, exigido pelo driver de miniporto para seu armazenamento por solicitação, se houver. Um driver de miniporto pode usar extensões SRB como armazenamento para informações específicas de solicitação determinadas pelo driver, como dados necessários para processar uma solicitação específica. O driver Storport não inicializa extensões SRB, mas define um ponteiro para esse armazenamento em cada SRB que ele envia para o driver de miniporto. Uma extensão SRB pode ser acessada com segurança pelo hardware do HBA. Como os drivers de miniport que trabalham com o driver Storport devem dar suporte a listas de dispersão/coleta e as listas de dispersão/coleta por SRB geralmente são alocadas na extensão SRB, esse membro raramente é zero. Deixe esse membro definido como zero se o driver de miniporto não mantiver informações por SRB para as quais ele requer armazenamento.

Esse valor baseia-se na suposição de que o HBA é capaz de receber endereços de 32 bits, independentemente do que o controlador possa realmente dar suporte. Se for necessário espaço adicional nas extensões LUN ou SRB para lidar com endereços de 64 bits, os ajustes apropriados deverão ser feitos nesse valor antes de usá-lo com rotinas como StorPortGetUncachedExtension.

NumberOfAccessRanges

Especifica quantos intervalos de acesso o adaptador usa. Cada um é um intervalo de endereços de memória ou endereços de porta de E/S.

Reserved

Reservado para uso do sistema e não disponível para uso por drivers de miniporto.

MapBuffers

Indica se o driver storport mapeia endereços de buffer de dados SRB para endereços virtuais do sistema. O membro MapBuffers pode ter um dos valores a seguir.

Valor Significado
STOR_MAP_NO_BUFFERS (0) Não mapeie para nenhum SRB, exceto SRB_FUNCTION_IO_CONTROL e SRB_FUNCTION_WMI.
STOR_MAP_ALL_BUFFERS (1) Obsoleto. Esse valor tem o mesmo efeito que STOR_MAP_NON_READ_WRITE_BUFFERS.
STOR_MAP_NON_READ_WRITE_BUFFERS (2) Mapeie o buffer para todas as E/S, exceto para solicitações de leitura ou gravação.
STOR_MAP_ALL_BUFFERS_INCLUDING_READ_WRITE (3) Mapeie o buffer para todas as E/S, incluindo solicitações de leitura e gravação. Esse valor é válido a partir do Windows 8.

NeedPhysicalAddresses

Deve ser definido como true. Um valor de verdadeiro indica que o driver de miniporto deve traduzir determinados tipos de endereços para endereços físicos. Os motoristas de miniport que trabalham com o driver Storport devem dar suporte ao DMA mestre do ônibus, portanto, eles sempre serão obrigados a fazer a tradução de endereço.

TaggedQueuing

Deve ser definido como true. Um valor de VERDADEIRO indica que o driver de miniporto dá suporte à fila marcada por SCSI. Todos os drivers de miniport que trabalham com o driver Storport devem dar suporte à fila marcada.

AutoRequestSense

Deve ser VERDADEIRO. Um valor de TRUE indica que o HBA pode executar uma operação de sentido de solicitação sem exigir uma solicitação explícita para fazer isso. Todos os drivers de miniport que trabalham com o driver Storport devem dar suporte ao SCSI Auto-Request Sense.

MultipleRequestPerLu

Deve ser definido como true. Um valor de VERDADEIRO indica que o driver de miniporto pode enfileirar várias solicitações por unidade lógica. Os drivers de miniport que trabalham com o driver Storport devem dar suporte a várias solicitações por unidade lógica.

ReceiveEvent

O driver storport ignora esse membro.

VendorIdLength

O driver storport ignora esse membro, pois os drivers de miniporto que trabalham com o driver Storport devem dar suporte a PnP.

VendorId

O driver storport ignora esse membro, pois os drivers de miniporto que trabalham com o driver Storport devem dar suporte a PnP.

ReservedUshort

PortVersionFlags

Sinalizadores para indicar recursos com suporte.

DeviceIdLength

O driver storport ignora esse membro, pois os drivers de miniporto que trabalham com o driver Storport devem dar suporte a PnP.

DeviceId

O driver storport ignora esse membro, pois os drivers de miniporto que trabalham com o driver Storport devem dar suporte a PnP.

HwAdapterControl

Ponteiro para a rotina de HwStorAdapterControl do driver de miniport. Essa é uma rotina necessária porque os drivers de miniporto que trabalham com o driver Storport exigem suporte PnP.

HwBuildIo

Ponteiro para um rotina de do HwStorBuildIo opcional que o driver de porta chama para fazer processamento não sincronizado antes de chamar a rotina de do do driver de miniporto HwStorStartIo. Esse retorno de chamada é específico para miniportos físicos e deve ser definido como NULL por miniportos virtuais.

HwFreeAdapterResources

Um ponteiro para a rotina de HwStorFreeAdapterResources do driver de miniport virtual, que é um ponto de entrada necessário para todos os drivers de miniportos virtuais. Esse retorno de chamada é específico para miniportos virtuais e é definido como NULL para miniportos físicos.

Esse retorno de chamada é adicionado no Windows 8. Os miniportos virtuais para versões anteriores do Windows devem usar VIRTUAL_HW_INITIALIZATION_DATA em vez dessa estrutura.

HwProcessServiceRequest

Um ponteiro para a rotina de HwStorProcessServiceRequest do driver de miniporto virtual. Esse retorno de chamada é específico para miniportos virtuais e é definido como NULL para miniportos físicos.

Esse retorno de chamada é adicionado no Windows 8. Os miniportos virtuais para versões anteriores do Windows devem usar VIRTUAL_HW_INITIALIZATION_DATA em vez dessa estrutura.

HwCompleteServiceIrp

Um ponteiro para a rotina de do do driver de miniporto virtual HwStorCompleteServiceIrp. Esse retorno de chamada é específico para miniportos virtuais e é definido como NULL para miniportos físicos.

Esse retorno de chamada é adicionado no Windows 8. Os miniportos virtuais para versões anteriores do Windows devem usar VIRTUAL_HW_INITIALIZATION_DATA em vez dessa estrutura.

HwInitializeTracing

Um ponteiro para a rotina de HwStorInitializeTracing do driver de miniport virtual. Esse retorno de chamada é específico para miniportos virtuais e é definido como NULL para miniportos físicos.

Esse retorno de chamada é adicionado no Windows 8. Os miniportos virtuais para versões anteriores do Windows devem usar VIRTUAL_HW_INITIALIZATION_DATA em vez dessa estrutura.

HwCleanupTracing

Um ponteiro para a rotina de de HwStorCleanupTracing do driver de miniport virtual. Esse retorno de chamada é específico para miniportos virtuais e é definido como NULL para miniportos físicos.

Esse retorno de chamada é adicionado no Windows 8. Os miniportos virtuais para versões anteriores do Windows devem usar VIRTUAL_HW_INITIALIZATION_DATA em vez dessa estrutura.

HwTracingEnabled

Um ponteiro para um opcional HwStorTracingEnabled rotina que o driver de porta chama para notificar o miniporto de se o rastreamento está habilitado ou não.

FeatureSupport

Sinalizadores que indicam recursos compatíveis com o miniporto. do FeatureSupport é definido como uma combinação desses valores:

Valor Significado
STOR_FEATURE_VIRTUAL_MINIPORT (0x00000001) Este é um driver de miniporto virtual.
STOR_FEATURE_ATA_PASS_THROUGH (0x00000002) O miniporto dá suporte à passagem do ATA.
STOR_FEATURE_FULL_PNP_DEVICE_CAPABILITIES (0x00000004) O miniporto fornece configurações completas em sua estrutura de STOR_DEVICE_CAPABILITIES_EX.
STOR_FEATURE_DUMP_POINTERS (0x00000008) O miniporto dá suporte aos SRBs do ponteiro de despejo.
STOR_FEATURE_DEVICE_NAME_NO_SUFFIX (0x00000010) O driver de miniporto não deseja que o sufixo "SCSI tipo Dispositivo" como parte do nome amigável do dispositivo.
STOR_FEATURE_DUMP_RESUME_CAPABLE (0x00000020) A funcionalidade de despejo do miniporto é funcional para retomar da hibernação.
STOR_FEATURE_DEVICE_DESCRIPTOR_FROM_ATA_INFO_VPD (0x00000040) O driver Storport inicializa o STORAGE_DEVICE_DESCRIPTOR da página VPD de Informações do ATA em vez de dados INQUIRY.
STOR_FEATURE_EXTRA_IO_INFORMATION (0x00000080) O driver de miniporto deseja SRBEX_DATA_IO_INFO em um SRBEX, se disponível.
STOR_FEATURE_ADAPTER_CONTROL_PRE_FINDADAPTER (0x00000100) O driver de miniporto pode processar com segurança a chamada AdapterControl de Storport antes de receber HwFindAdapter.
STOR_FEATURE_ADAPTER_NOT_REQUIRE_IO_PORT (0x00000200) O driver de miniporto não requer recurso de Porta de E/S para seu adaptador.
STOR_FEATURE_DUMP_16_BYTE_ALIGNMENT (0x00000400) O driver de miniporto deseja que seu HwDeviceExtension seja alinhado com 16 bytes no modo de despejo.
STOR_FEATURE_SET_ADAPTER_INTERFACE_TYPE (0x00000800) O miniporto deseja que o Storport defina o tipo de interface do adaptador.
STOR_FEATURE_DUMP_INFO (0x00001000) O driver de miniporto dá suporte aos SRBs de informações de despejo.
STOR_FEATURE_DMA_ALLOCATION_NO_BOUNDARY (0x00002000) O driver de miniporto dá suporte para alocar DMA à memória física sem limites.
STOR_FEATURE_SUPPORTS_NVME_ADAPTER (0x00004000) O driver de miniporto dá suporte a adaptadores de armazenamento baseados em NVMe.
STOR_FEATURE_REPORT_INTERNAL_DATA (0x00008000) O driver de miniporto dá suporte ao relatório de dados internos.
STOR_FEATURE_EARLY_DUMP (0x00010000) O driver de miniporto dá suporte à geração inicial de despejo de memória.
STOR_FEATURE_NVME_ICE (0x00020000) O driver de miniporto dá suporte ao NVMe ICE.

SrbTypeFlags

Sinalizadores que indicam os tipos SRB compatíveis com o miniporto. SrbTypeFlags é definido como 0 ou uma combinação dos seguintes valores:

Valor Significado
SRB_TYPE_FLAG_SCSI_REQUEST_BLOCK (0x1) O miniporto usa SRBs padrão.
SRB_TYPE_FLAG_STORAGE_REQUEST_BLOCK (0x2) O miniporto dá suporte a SRBs estendidos.

AddressTypeFlags

Os esquemas de endereço compatíveis com o miniporto. Atualmente, há suporte para o único esquema de endereço e o miniporto deve definir esse membro como ADDRESS_TYPE_FLAG_BTL8.

Valor Significado
ADDRESS_TYPE_FLAG_BTL8 (0x1) Endereçamento de 8 bits de Barramento, Destino e LUN (BTL).

Reserved1

Reservado, definido como 0.

HwUnitControl

Um ponteiro da rotina de HwStorUnitControl do driver de miniport. O driver de porta chama essa rotina com uma solicitação de controle para um dispositivo de unidade de armazenamento.

Observações

A rotina driverEntry de cada driver de miniport do Storport deve chamar StorPortInitialize depois que o driver do miniporto tiver zerado pela primeira vez e, em seguida, definir os membros do HW_INITIALIZATION_DATA.

Requisitos

Requisito Valor
cabeçalho storport.h (inclua Storport.h)