Partager via


structure HW_INITIALIZATION_DATA (storport.h)

La structure HW_INITIALIZATION_DATA (Storport) contient des informations particulières à chaque pilote miniport et le matériel que le pilote miniport gère.

Syntaxe

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;

Membres

HwInitializationDataSize

Spécifie la taille de cette structure en octets, comme retourné par sizeof(HW_INITIALIZATION_DATA). En effet, ce membre indique la version de cette structure utilisée par le pilote miniport. La routine DriverEntry d’un pilote miniport doit définir la valeur de ce membre pour le pilote de port.

AdapterInterfaceType

Le pilote Storport ne prend pas en charge les bus hérités. Par conséquent, la plupart des types d’interface d’adaptateur utilisés avec le pilote de port SCSI ne sont pas valides pour Storport. En particulier, Isa, Eisa, MicroChannelet TurboChannel ne sont pas pris en charge. En outre, contrairement au cas de port SCSI, un pilote miniport qui fonctionne avec le pilote Storport n’est pas nécessaire pour fournir des valeurs pour les membres VendorIdLength, VendorId, DeviceIdLengthet DeviceId membres.

HwInitialize

Pointeur vers le du pilote miniport HwStorInitialize routine, qui est un point d’entrée requis pour tous les pilotes miniports.

HwStartIo

Pointeur vers la routine du pilote miniport HwStorStartIo, qui est un point d’entrée requis pour tous les pilotes miniports.

HwInterrupt

Pointeur vers la routine du pilote miniport HwStorInterrupt, qui est un point d’entrée requis pour tous les pilotes miniport.

HwFindAdapter

Pointeur vers la routine HwStorFindAdapter du pilote miniport, qui est un point d’entrée requis pour tous les pilotes miniports.

HwResetBus

Pointeur vers la routine du pilote miniport HwStorResetBus, qui est un point d’entrée requis pour tous les pilotes miniports.

HwDmaStarted

Le pilote Storport ne prend pas en charge la DMA en mode subordonné. Par conséquent, ce membre doit être NULL.

HwAdapterState

Le pilote Storport ne prend pas en charge les pilotes hérités. Par conséquent, ce membre doit être NULL.

DeviceExtensionSize

Spécifie la taille, en octets, requise par le pilote miniport pour son extension de périphérique par adaptateur. Un pilote miniport utilise son extension de périphérique comme stockage pour les informations sur l’adaptateur de bus hôte (HBA) déterminé par le pilote. Le pilote de port spécifique au système d’exploitation initialise chaque extension de périphérique une fois, lorsqu’il alloue d’abord l’extension et le remplit avec des zéros. Il transmet un pointeur à l’extension de périphérique spécifique à l’adaptateur HBA dans chaque appel à un pilote miniport. La taille donnée n’inclut aucun stockage par unité logique demandé par pilote miniport. La taille du stockage par unité logique est spécifiée via le champ SpecificLuExtensionSize, décrit plus loin dans cette rubrique.

Bien que SCSIPort réinitialise l’extension d’appareil chaque fois que l’adaptateur est arrêté et que les appels suivants à HwScsiFindAdapter reçoivent une extension d’appareil zéro, Storport ne suit pas ce modèle. Au lieu de cela, Storport réinitialise l’extension d’appareil à zéro uniquement lorsqu’elle est allouée pour la première fois. Par conséquent, seul le premier appel à HwStorFindAdapter pour une carte donnée reçoit une extension d’appareil sans sortie. Les appels suivants à HwStorFindAdapter et d’autres fonctions miniport reçoivent l’extension de l’appareil comme dernière modification par le miniport. Cela permet au pilote miniport de conserver des connaissances sur l’état de l’adaptateur entre plug-and-play (PnP) s’arrête et redémarre, ce qui permet éventuellement au pilote miniport d’optimiser sa procédure d’initialisation.

SpecificLuExtensionSize

Spécifie la taille en octets requise par le pilote miniport pour son stockage par unité logique, le cas échéant. Un pilote miniport peut utiliser ses extensions LU comme stockage pour les informations d’unité logique déterminée par le pilote sur les périphériques du bus. Le pilote Storport initialise chaque extension lu qu’il alloue avec zéros. Laissez ce membre défini sur zéro si le pilote miniport ne conserve pas les informations par lu pour lesquelles il nécessite un stockage. Cette valeur est basée sur l’hypothèse que l’adaptateur HBA peut recevoir des adresses 32 bits, quelle que soit la prise en charge du contrôleur. Si un espace supplémentaire est nécessaire dans les extensions LUN ou SRB pour gérer les adresses 64 bits, les ajustements appropriés doivent être apportés à cette valeur avant de l’utiliser avec des routines telles que StorPortGetUncachedExtension.

SrbExtensionSize

Spécifie la taille, en octets, requise par le pilote miniport pour son stockage par requête, le cas échéant. Un pilote miniport peut utiliser des extensions SRB comme stockage pour les informations spécifiques au pilote, telles que les données nécessaires pour traiter une requête particulière. Le pilote Storport n’initialise pas les extensions SRB, mais définit un pointeur vers ce stockage dans chaque SRB qu’il envoie au pilote miniport. Une extension SRB est accessible en toute sécurité par le matériel HBA. Étant donné que les pilotes miniport qui fonctionnent avec le pilote Storport doivent prendre en charge les listes de nuages de points/regroupements, et les listes de nuages de points/regroupements par SRB sont généralement allouées dans l’extension SRB, ce membre est rarement zéro. Laissez ce membre défini sur zéro si le pilote miniport ne conserve pas les informations par SRB pour lesquelles il nécessite un stockage.

Cette valeur est basée sur l’hypothèse que l’adaptateur HBA peut recevoir des adresses 32 bits, quelle que soit la prise en charge du contrôleur. Si un espace supplémentaire est nécessaire dans les extensions LUN ou SRB pour gérer les adresses 64 bits, les ajustements appropriés doivent être apportés à cette valeur avant de l’utiliser avec des routines telles que StorPortGetUncachedExtension.

NumberOfAccessRanges

Spécifie le nombre de plages d’accès que l’adaptateur utilise. Il s’agit d’une plage d’adresses mémoire ou d’adresses de port d’E/S.

Reserved

Réservé à l’utilisation du système et non disponible pour une utilisation par les pilotes miniport.

MapBuffers

Indique si le pilote Storport mappe les adresses de mémoire tampon de données SRB aux adresses virtuelles système. Les MapBuffers membre peuvent avoir l’une des valeurs suivantes.

Valeur Signification
STOR_MAP_NO_BUFFERS (0) Ne mappez aucune SRB, sauf SRB_FUNCTION_IO_CONTROL et SRB_FUNCTION_WMI.
STOR_MAP_ALL_BUFFERS (1) Obsolète. Cette valeur a le même effet que STOR_MAP_NON_READ_WRITE_BUFFERS.
STOR_MAP_NON_READ_WRITE_BUFFERS (2) Mappez la mémoire tampon pour toutes les E/S, à l’exception des demandes de lecture ou d’écriture.
STOR_MAP_ALL_BUFFERS_INCLUDING_READ_WRITE (3) Mappez la mémoire tampon pour toutes les E/S, y compris les demandes de lecture et d’écriture. Cette valeur est valide à partir de Windows 8.

NeedPhysicalAddresses

Doit être défini sur TRUE. Une valeur de TRUE indique que le pilote miniport doit traduire certains types d’adresses en adresses physiques. Les pilotes miniports qui fonctionnent avec le pilote Storport doivent prendre en charge la DMA maître de bus. Ils seront donc toujours nécessaires pour effectuer la traduction d’adresses.

TaggedQueuing

Doit être défini sur TRUE. La valeur TRUE indique que le pilote miniport prend en charge la mise en file d’attente SCSI étiquetée. Tous les pilotes miniports qui fonctionnent avec le pilote Storport doivent prendre en charge la mise en file d’attente marquée.

AutoRequestSense

Doit être TRUE. Une valeur de TRUE indique que l’adaptateur HBA peut effectuer une opération de sens des requêtes sans exiger qu’une requête explicite le fasse. Tous les pilotes miniport qui fonctionnent avec le pilote Storport doivent prendre en charge SCSI Auto-Request Sense.

MultipleRequestPerLu

Doit être défini sur TRUE. La valeur TRUE indique que le pilote miniport peut mettre en file d’attente plusieurs requêtes par unité logique. Les pilotes Miniport qui fonctionnent avec le pilote Storport doivent prendre en charge plusieurs requêtes par unité logique.

ReceiveEvent

Le pilote Storport ignore ce membre.

VendorIdLength

Le pilote Storport ignore ce membre, car les pilotes miniport qui fonctionnent avec le pilote Storport doivent prendre en charge PnP.

VendorId

Le pilote Storport ignore ce membre, car les pilotes miniport qui fonctionnent avec le pilote Storport doivent prendre en charge PnP.

ReservedUshort

PortVersionFlags

Indicateurs pour indiquer les fonctionnalités prises en charge.

DeviceIdLength

Le pilote Storport ignore ce membre, car les pilotes miniport qui fonctionnent avec le pilote Storport doivent prendre en charge PnP.

DeviceId

Le pilote Storport ignore ce membre, car les pilotes miniport qui fonctionnent avec le pilote Storport doivent prendre en charge PnP.

HwAdapterControl

Pointeur vers la routine HwStorAdapterControl du pilote miniport. Il s’agit d’une routine requise, car les pilotes miniports qui fonctionnent avec le pilote Storport nécessitent la prise en charge de PnP.

HwBuildIo

Pointeur vers une routine facultative HwStorBuildIo que le pilote de port appelle pour effectuer un traitement non synchronisé avant d’appeler la routine du pilote miniport HwStorStartIo. Ce rappel est spécifique aux miniports physiques et doit être défini sur NULL par miniports virtuels.

HwFreeAdapterResources

Pointeur vers le HwStorFreeAdapterResources du pilote miniport virtuel routine, qui est un point d’entrée requis pour tous les pilotes miniport virtuels. Ce rappel est spécifique aux miniports virtuels et est défini sur NULL pour les miniports physiques.

Ce rappel est ajouté dans Windows 8. Les miniports virtuels pour les versions précédentes de Windows doivent utiliser VIRTUAL_HW_INITIALIZATION_DATA au lieu de cette structure.

HwProcessServiceRequest

Pointeur vers la routine HwStorProcessServiceRequest du pilote miniport virtuel. Ce rappel est spécifique aux miniports virtuels et est défini sur NULL pour les miniports physiques.

Ce rappel est ajouté dans Windows 8. Les miniports virtuels pour les versions précédentes de Windows doivent utiliser VIRTUAL_HW_INITIALIZATION_DATA au lieu de cette structure.

HwCompleteServiceIrp

Pointeur vers la routine HwStorCompleteServiceIrp du pilote miniport virtuel. Ce rappel est spécifique aux miniports virtuels et est défini sur NULL pour les miniports physiques.

Ce rappel est ajouté dans Windows 8. Les miniports virtuels pour les versions précédentes de Windows doivent utiliser VIRTUAL_HW_INITIALIZATION_DATA au lieu de cette structure.

HwInitializeTracing

Pointeur vers la routine de HwStorInitializeTracing du pilote miniport virtuel. Ce rappel est spécifique aux miniports virtuels et est défini sur NULL pour les miniports physiques.

Ce rappel est ajouté dans Windows 8. Les miniports virtuels pour les versions précédentes de Windows doivent utiliser VIRTUAL_HW_INITIALIZATION_DATA au lieu de cette structure.

HwCleanupTracing

Pointeur vers la routine HwStorCleanupTracing du pilote miniport virtuel. Ce rappel est spécifique aux miniports virtuels et est défini sur NULL pour les miniports physiques.

Ce rappel est ajouté dans Windows 8. Les miniports virtuels pour les versions précédentes de Windows doivent utiliser VIRTUAL_HW_INITIALIZATION_DATA au lieu de cette structure.

HwTracingEnabled

Pointeur vers un pointeur facultatif HwStorTracingEnabled routine que le pilote de port appelle pour notifier la miniporte si le suivi est activé ou non.

FeatureSupport

Indicateurs indiquant les fonctionnalités prises en charge par le miniport. FeatureSupport est défini sur une combinaison de ces valeurs :

Valeur Signification
STOR_FEATURE_VIRTUAL_MINIPORT (0x00000001) Il s’agit d’un pilote de miniport virtuel.
STOR_FEATURE_ATA_PASS_THROUGH (0x00000002) Le miniport prend en charge la transmission ATA.
STOR_FEATURE_FULL_PNP_DEVICE_CAPABILITIES (0x00000004) Le miniport fournit des paramètres complets dans sa structure STOR_DEVICE_CAPABILITIES_EX.
STOR_FEATURE_DUMP_POINTERS (0x00000008) Le miniport prend en charge les bases de données SRB du pointeur de vidage.
STOR_FEATURE_DEVICE_NAME_NO_SUFFIX (0x00000010) Le pilote miniport ne souhaite pas que le suffixe « SCSI type Device » dans le cadre du nom convivial de l’appareil.
STOR_FEATURE_DUMP_RESUME_CAPABLE (0x00000020) La fonctionnalité de vidage du miniport est fonctionnelle pour reprendre à partir de la veille prolongée.
STOR_FEATURE_DEVICE_DESCRIPTOR_FROM_ATA_INFO_VPD (0x00000040) Le pilote Storport initialise le STORAGE_DEVICE_DESCRIPTOR à partir de la page VPD d’informations ATA au lieu des données d’ENQUÊTE.
STOR_FEATURE_EXTRA_IO_INFORMATION (0x00000080) Le pilote miniport souhaite SRBEX_DATA_IO_INFO dans un SRBEX si disponible.
STOR_FEATURE_ADAPTER_CONTROL_PRE_FINDADAPTER (0x00000100) Le pilote miniport peut traiter en toute sécurité l’appel AdapterControl à partir de Storport avant de recevoir HwFindAdapter.
STOR_FEATURE_ADAPTER_NOT_REQUIRE_IO_PORT (0x00000200) Le pilote miniport ne nécessite pas de ressource de port d’E/S pour son adaptateur.
STOR_FEATURE_DUMP_16_BYTE_ALIGNMENT (0x00000400) Le pilote miniport veut que son HwDeviceExtension soit aligné sur 16 octets en mode dump.
STOR_FEATURE_SET_ADAPTER_INTERFACE_TYPE (0x00000800) Le miniport souhaite que Storport définisse le type d’interface de l’adaptateur.
STOR_FEATURE_DUMP_INFO (0x00001000) Le pilote miniport prend en charge les bases de données d’informations de vidage.
STOR_FEATURE_DMA_ALLOCATION_NO_BOUNDARY (0x00002000) Le pilote miniport prend en charge l’allocation de DMA à la mémoire physique sans limites.
STOR_FEATURE_SUPPORTS_NVME_ADAPTER (0x00004000) Le pilote miniport prend en charge les adaptateurs de stockage NVMe.
STOR_FEATURE_REPORT_INTERNAL_DATA (0x00008000) Le pilote miniport prend en charge la création de rapports de données internes.
STOR_FEATURE_EARLY_DUMP (0x00010000) Le pilote miniport prend en charge la génération anticipée de vidage sur incident.
STOR_FEATURE_NVME_ICE (0x00020000) Le pilote miniport prend en charge NVMe ICE.

SrbTypeFlags

Indicateurs indiquant les types SRB pris en charge par le miniport. SrbTypeFlags a la valeur 0 ou une combinaison des valeurs suivantes :

Valeur Signification
SRB_TYPE_FLAG_SCSI_REQUEST_BLOCK (0x1) Le miniport utilise des bases de données SRB standard.
SRB_TYPE_FLAG_STORAGE_REQUEST_BLOCK (0x2) Le miniport prend en charge les bases de données SRB étendues.

AddressTypeFlags

Schémas d’adresse pris en charge par le miniport. Actuellement, le seul schéma d’adresse est pris en charge et le miniport doit définir ce membre sur ADDRESS_TYPE_FLAG_BTL8.

Valeur Signification
ADDRESS_TYPE_FLAG_BTL8 (0x1) Adressage bus, cible et LUN (BTL) 8 bits.

Reserved1

Réservé, défini sur 0.

HwUnitControl

Pointeur de la routine HwStorUnitControl du pilote miniport. Le pilote de port appelle cette routine avec une demande de contrôle pour un périphérique d’unité de stockage.

Remarques

Chaque routine driver miniport Storport driverEntry doit appeler StorPortInitialize une fois que le pilote miniport a d’abord zéro, puis définir les membres de HW_INITIALIZATION_DATA.

Exigences

Exigence Valeur
d’en-tête storport.h (include Storport.h)