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) |
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour