HW_INITIALIZATION_DATA structure (storport.h)

La structure HW_INITIALIZATION_DATA (Storport) contient des informations spécifiques à chaque pilote miniport et au matériel qu’il 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, telle que retournée 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, MicroChannel et 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, DeviceIdLength et DeviceId .

HwInitialize

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

HwStartIo

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

HwInterrupt

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

HwFindAdapter

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

HwResetBus

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

HwDmaStarted

Le pilote Storport ne prend pas en charge 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 de 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 l’extension pour la première fois et la remplit avec des zéros. Il passe un pointeur vers l’extension de périphérique spécifique à HBA dans chaque appel à un pilote miniport. La taille donnée n’inclut pas de 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 ultérieurs à 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, de sorte que seul le premier appel à HwStorFindAdapter pour un adaptateur donné reçoit une extension d’appareil à zéro. 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 les arrêts et les redémarrages de Plug-and-Play (PnP), 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és logiques déterminées par le pilote sur les périphériques du bus. Le pilote Storport initialise chaque extension lu qu’il alloue avec des zéros. Laissez ce membre défini sur zéro si le pilote miniport ne conserve pas les informations par lu pour lesquelles il a besoin de stockage. Cette valeur est basée sur l’hypothèse que l’adaptateur HBA est en mesure de recevoir des adresses 32 bits, indépendamment de ce que le contrôleur peut réellement prendre en charge. Si un espace supplémentaire est nécessaire dans les extensions LUN ou SRB pour gérer les adresses 64 bits, des 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 aux requêtes déterminées par le pilote, telles que les données nécessaires pour traiter une demande 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 points/regroupements, et que les listes de points/regroupements par SRB sont généralement allouées dans l’extension SRB, ce membre est rarement égal à zéro. Laissez ce membre défini sur zéro si le pilote miniport ne conserve pas les informations par SRB pour lesquelles il a besoin de stockage.

Cette valeur est basée sur l’hypothèse que l’adaptateur HBA est en mesure de recevoir des adresses 32 bits, indépendamment de ce que le contrôleur peut réellement prendre en charge. Si un espace supplémentaire est nécessaire dans les extensions LUN ou SRB pour gérer les adresses 64 bits, des 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. Chaque est 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 de miniport.

MapBuffers

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

Valeur Signification
STOR_MAP_NO_BUFFERS Ne mapper aucun SRB, sauf SRB_FUNCTION_IO_CONTROL et SRB_FUNCTION_WMI.
STOR_MAP_ALL_BUFFERS Obsolète. Cette valeur a le même effet que STOR_MAP_NON_READ_WRITE_BUFFERS.
STOR_MAP_NON_READ_WRITE_BUFFERS Mapper 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 Mapper 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. La valeur TRUE indique que le pilote miniport doit traduire certains types d’adresses en adresses physiques. Les pilotes miniport qui fonctionnent avec le pilote Storport doivent prendre en charge les master DMA de bus. Ils devront donc toujours 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 marquée SCSI. Tous les pilotes miniport qui fonctionnent avec le pilote Storport doivent prendre en charge la mise en file d’attente étiquetée.

AutoRequestSense

Doit avoir la valeur TRUE. La valeur TRUE indique que l’adaptateur HBA peut effectuer une opération de détection de requête sans nécessiter de requête explicite. 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 demandes par unité logique. Les pilotes miniport qui fonctionnent avec le pilote Storport doivent prendre en charge plusieurs demandes 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 obligatoire, car les pilotes miniport qui fonctionnent avec le pilote Storport nécessitent la prise en charge de PnP.

HwBuildIo

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

HwFreeAdapterResources

Pointeur vers la routine HwStorFreeAdapterResources du pilote miniport virtuel, qui est un point d’entrée obligatoire pour tous les pilotes de 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.

HwProcessServiceRequest

Pointeur vers la routine HwStorProcessServiceRequest du pilote de 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 de 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 HwStorInitializeTracing du pilote de 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 de 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 une routine HwStorTracingEnabled facultative que le pilote de port appelle pour informer le miniport si le traçage 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 Il s’agit d’un pilote de miniport virtuel.
STOR_FEATURE_ATA_PASS_THROUGH Le miniport prend en charge le passage ATA.
STOR_FEATURE_FULL_PNP_DEVICE_CAPABILITIES Le miniport fournit des paramètres complets dans sa structure STOR_DEVICE_CAPABILITIES_EX .
STOR_FEATURE_DUMP_POINTERS Le miniport prend en charge les SBS de pointeur de vidage.
STOR_FEATURE_DEVICE_NAME_NO_SUFFIX Le pilote miniport ne souhaite pas que le suffixe « SCSI type Device » fasse partie du nom convivial de l’appareil.
STOR_FEATURE_DUMP_RESUME_CAPABLE La fonctionnalité de vidage du miniport est fonctionnelle pour la reprise après la mise en veille prolongée.
STOR_FEATURE_DEVICE_DESCRIPTOR_FROM_ATA_INFO_VPD Le pilote Storport initialise le STORAGE_DEVICE_DESCRIPTOR à partir de la page ATA Information VPD au lieu de données INQUIRY.
STOR_FEATURE_SET_ADAPTER_INTERFACE_TYPE Le pilote Storport définit le type d’interface de l’adaptateur.

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 Le miniport utilise des SSR standard.
SRB_TYPE_FLAG_STORAGE_REQUEST_BLOCK Le miniport prend en charge les SSRB étendus.

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 Adressage 8 bits bus, cible et LUN (BTL).

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 DriverEntry du pilote de miniport Storport doit appeler StorPortInitialize une fois que le pilote miniport a d’abord mis à zéro, puis définir les membres de HW_INITIALIZATION_DATA.

Configuration requise

Condition requise Valeur
En-tête storport.h (inclure Storport.h)