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) |