Partager via


Configuration de l’extension de périphérique d’un pilote de classe de stockage

Dans les extensions d’appareil de chaque objet d’appareil créé par un pilote de classe de stockage, ce pilote fournit un stockage pour toutes les données déterminées par le pilote qu’il utilise pour gérer les demandes d’E/S pour l’appareil, comme le pointeur vers le PDO passé à AddDevice, le pointeur vers l’objet d’appareil retourné par IoAttachDeviceToDeviceStack, un pointeur arrière vers son propre objet d’appareil, et ainsi de suite.

La plupart des pilotes de classe de stockage fournissent également un stockage pour les informations suivantes :

  • Valeur de délai d’attente spécifique au type d’appareil

    Le pilote de classe peut transmettre la valeur de délai d’attente en SBS qu’il envoie au pilote de port, qui temps SRB_FUNCTION_EXECUTE_SCSI demandes (voir SCSI_REQUEST_BLOCK) pour le compte de chaque pilote de classe. Le pilote de port retourne un SRB avec son membre SrbStatus défini sur SRB_STATUS_TIMEOUT si l’intervalle entre le moment où le pilote de port envoie la demande au pilote sous-jacent et le moment où la demande se termine dépasse la valeur de délai d’attente spécifiée.

  • Pointeur vers la routine de gestion des erreurs du pilote de classe

    Pour plus d’informations sur la gestion des erreurs dans les pilotes de classe de stockage, consultez Routines IoCompletion du pilote de classe de stockage.

  • Nombre d’erreurs de protocole de bus que le pilote gère sur l’appareil

  • Pointeur vers une mémoire tampon allouée par le pilote pour les données sense

    Un pilote de classe doit allouer de la mémoire pour les données sense retournées à partir d’un pool non paginé aligné sur le cache. Pour plus d’informations sur l’allocation de mémoire pour les mémoires tampons de pilote, consultez Allocation de la mémoire System-Space.

  • Valeur par défaut déterminée par le pilote pour SrbFlags que le pilote de classe définit dans les SRB

  • Pointeur vers un en-tête de liste de recherche si le pilote configure une liste de recherche pour les SB qu’il alloue

    Pour plus d’informations, consultez Utilisation de listes de recherche.

  • Pointeurs vers un IRP et un SRB alloués et conservés en réserve pour les requêtes qui doivent réussir même dans des conditions de mémoire faible, pour les opérations de pagination ainsi que les opérations de récupération d’erreurs (telles que celles effectuées par une routine ReleaseQueue d’un pilote de classe de stockage)

  • Pointeur vers les données STORAGE_ADAPTER_DESCRIPTOR et STORAGE_DEVICE_DESCRIPTOR collectées par le pilote de port à partir de l’adaptateur HBA

    Pour plus d’informations sur la façon dont les pilotes de classe obtiennent et utilisent ces données, consultez La routine GetDescriptor du pilote de classe de stockage.

  • Indicateurs qui indiquent l’état PnP précédent et actuel, pour gérer les transitions entre les états sur l’appareil

  • Indicateur qui indique l’état d’alimentation actuel de l’appareil, pour éviter un travail supplémentaire dans la gestion des demandes d’alimentation redondantes

  • Nombre de fichiers de pagination système, le cas échéant, sur l’appareil, en fonction des demandes de notification de pagination reçues par le pilote (IRP_MJ_PNP avec IRP_MN_DEVICE_USAGE_NOTIFICATION)

Un pilote de classe de stockage ne peut pas envoyer de requêtes à son appareil via le pilote de port de stockage sans utiliser le pointeur d’objet de périphérique retourné par IoAttachDeviceToDeviceStack et stocké dans l’extension de périphérique par la routine AddDevice du pilote.