Routine GetDescriptor du pilote de classe de stockage
Pour les opérations de transfert de données, les pilotes de classe de stockage ont besoin d’informations de configuration sur chaque HBA conduisant un bus auquel leurs appareils sont attachés. Pour obtenir ces informations, un pilote de classe appelle une routine GetDescriptor interne ou implémente la même fonctionnalité dans sa routine StartDevice . (Pour plus d’informations sur StartDevice, consultez Gestion du démarrage PnP dans un pilote de classe de stockage.)
Une routine GetDescriptor génère et configure des requêtes de propriété de requête (IRP_MJ_DEVICE_CONTROL avec IOCTL_STORAGE_QUERY_PROPERTY) pour que le pilote de port récupère les descripteurs de périphérique et d’adaptateur que le pilote de classe stocke dans son extension de périphérique. Le pilote de classe peut également définir des indicateurs déterminés par l’enregistreur de pilotes dans l’extension de périphérique en fonction des données de descripteur retournées.
Le pilote de classe inspecte les données STORAGE_DEVICE_DESCRIPTOR retournées pour déterminer les fonctionnalités de l’appareil (données de recherche SCSI ou l’équivalent non SCSI), telles que le type de périphérique SCSI, si le support de l’appareil (le cas échéant) est amovible (RemovableMedia), si l’appareil prend en charge plusieurs commandes en attente (CommandQueueing) et diverses chaînes d’ID. Le pilote de classe inspecte les données STORAGE_ADAPTER_DESCRIPTOR retournées pour déterminer les fonctionnalités de l’adaptateur, notamment :
Nombre maximal d’octets qu’un HBA particulier peut transférer en une seule opération (MaximumTransferLength).
Si l’adaptateur HBA peut transférer des données mises en mémoire tampon avec des pages physiques non contiguës (en d’autres termes, s’il prend en charge les nuages de points/regroupements), combien de pages physiques non incohérentes par mémoire tampon il peut gérer, par opération de transfert (MaximumPhysicalPages).
Exigences d’alignement de l’adaptateur HBA pour les transferts afin que le pilote de classe puisse définir correctement le champ AlignmentRequirement dans ses objets de périphérique (AlignmentMask).
Les applications qui envoient IOCTL_SCSI_PASS_THROUGH demandes peuvent également utiliser ce champ.
Pour plus d’informations sur la configuration d’AlignmentRequirement dans les objets d’appareil, consultez Initialisation d’un objet d’appareil.
Indique si l’adaptateur HBA prend en charge la mise en file d’attente marquée SCSI et/ou les files d’attente internes par unité logique (CommandQueueing).
Indique si l’adaptateur HBA prend en charge les transferts synchrones (AcceleratedTransfer).
Indique si l’adaptateur HBA met en cache les données en interne (CachesData).
Le pilote de classe doit stocker ces informations dans l’extension de périphérique du FDO afin que ses routines de répartition puissent garantir que toutes les demandes envoyées au pilote de port de stockage sont conformes à la taille, au nombre d’interruptions physiques et aux exigences d’alignement de l’adaptateur HBA sous-jacent. Pour plus d’informations sur les routines de répartition des pilotes de classe, consultez Routines de répartition des pilotes de classe de stockage. Pour plus d’informations sur la configuration des extensions d’appareil, consultez Configuration d’une extension de périphérique du pilote de classe de stockage.