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 sizeof(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 driver 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, MicroChannel e 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, DeviceIdLength e DeviceId .

HwInitialize

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

HwStartIo

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

HwInterrupt

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

HwFindAdapter

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

HwResetBus

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

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 miniporta para sua extensão de dispositivo por adaptador. Um driver de miniporta 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 de 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 inicialize novamente a extensão do dispositivo sempre que o adaptador for interrompido e, portanto, as chamadas subsequentes para HwScsiFindAdapter receberem 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 miniporto mantenha o conhecimento sobre o estado do adaptador entre paradas e reinicializações de 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 miniporta para seu armazenamento por unidade lógica, se houver. Um driver de miniporta 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 do 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 miniporta para seu armazenamento por solicitação, se houver. Um driver de miniporta 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 HBA. Como os drivers de miniporta que funcionam 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 miniporta.

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 Não mapeie para nenhum SRB, exceto SRB_FUNCTION_IO_CONTROL e SRB_FUNCTION_WMI.
STOR_MAP_ALL_BUFFERS Obsoleto. Esse valor tem o mesmo efeito que STOR_MAP_NON_READ_WRITE_BUFFERS.
STOR_MAP_NON_READ_WRITE_BUFFERS Mapeie o buffer para todas as E/S, exceto para solicitações de leitura ou gravação.
STOR_MAP_ALL_BUFFERS_INCLUDING_READ_WRITE Mapeie o buffer para todas as E/S, incluindo solicitações de leitura e gravação. Esse valor é válido começando com Windows 8.

NeedPhysicalAddresses

Deve ser definido como TRUE. Um valor true indica que o driver de miniporto deve traduzir determinados tipos de endereços para endereços físicos. Os drivers de miniport que trabalham com o driver storport devem dar suporte ao DMA master barramento, portanto, eles sempre serão obrigados a fazer a conversão de endereços.

TaggedQueuing

Deve ser definido como TRUE. Um valor true indica que o driver de miniporta dá suporte à fila marcada por SCSI. Todos os drivers de miniporta que funcionam com o driver Storport devem dar suporte ao enfileiramento marcado.

AutoRequestSense

Deve ser TRUE. Um valor 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 miniporta que funcionam com o driver Storport devem dar suporte ao Sensor de Solicitação Automática SCSI.

MultipleRequestPerLu

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

ReceiveEvent

O driver do Storport ignora esse membro.

VendorIdLength

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

VendorId

O driver storport ignora esse membro, pois os drivers de miniporto que funcionam 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 funcionam com o driver Storport devem dar suporte a PnP.

DeviceId

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

HwAdapterControl

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

HwBuildIo

Ponteiro para uma rotina opcional do HwStorBuildIo que o driver de porta chama para fazer processamento não sincronizado antes de chamar a rotina HwStorStartIo do driver de miniporto. 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 HwStorFreeAdapterResources do driver de miniporta virtual, que é um ponto de entrada necessário para todos os drivers 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 em Windows 8. Miniportos virtuais para versões anteriores do Windows devem usar VIRTUAL_HW_INITIALIZATION_DATA em vez dessa estrutura.

HwProcessServiceRequest

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

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

HwCompleteServiceIrp

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

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

HwInitializeTracing

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

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

HwCleanupTracing

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

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

HwTracingEnabled

Um ponteiro para uma rotina opcional HwStorTracingEnabled 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. FeatureSupport é definido como uma combinação desses valores:

Valor Significado
STOR_FEATURE_VIRTUAL_MINIPORT Este é um driver de miniporta virtual.
STOR_FEATURE_ATA_PASS_THROUGH O miniporto dá suporte à passagem do ATA.
STOR_FEATURE_FULL_PNP_DEVICE_CAPABILITIES O miniporto fornece configurações completas em sua estrutura de STOR_DEVICE_CAPABILITIES_EX .
STOR_FEATURE_DUMP_POINTERS O miniporto dá suporte aos SRBs do ponteiro de despejo.
STOR_FEATURE_DEVICE_NAME_NO_SUFFIX O driver de miniporta não deseja o sufixo " ScSI type Device" como parte do nome amigável do dispositivo.
STOR_FEATURE_DUMP_RESUME_CAPABLE A funcionalidade de despejo do miniporta é funcional para retomar da hibernação.
STOR_FEATURE_DEVICE_DESCRIPTOR_FROM_ATA_INFO_VPD O driver do Storport inicializa o STORAGE_DEVICE_DESCRIPTOR da página VPD de Informações do ATA em vez de dados INQUIRY.
STOR_FEATURE_SET_ADAPTER_INTERFACE_TYPE O driver storport define o tipo de interface do adaptador.

SrbTypeFlags

Sinalizadores que indicam os tipos de 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 O miniporto usa SRBs padrão.
SRB_TYPE_FLAG_STORAGE_REQUEST_BLOCK 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 Endereçamento de 8 bits de Barramento, Destino e LUN (BTL).

Reserved1

Reservado, definido como 0.

HwUnitControl

Um ponteiro para a rotina 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.

Comentários

A rotina DriverEntry de cada driver de miniporto storport deve chamar StorPortInitialize depois que o driver de miniporto tiver zero primeiro e, em seguida, definir os membros de HW_INITIALIZATION_DATA.

Requisitos

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