Partager via


Fonction ScsiPortGetUncachedExtension (srb.h)

La routine ScsiPortGetUncachedExtension alloue de la mémoire qui peut être utilisée à la fois par le processeur et un HBA master bus pour DMA ou pour les données partagées.

Note Les modèles de pilote de port SCSI et de pilote miniport SCSI peuvent être modifiés ou indisponibles à l’avenir. Au lieu de cela, nous vous recommandons d’utiliser les modèles de pilote Storport et de pilote miniport Storport .
 

Syntaxe

SCSIPORT_API PVOID ScsiPortGetUncachedExtension(
  [in] PVOID                           HwDeviceExtension,
  [in] PPORT_CONFIGURATION_INFORMATION ConfigInfo,
  [in] ULONG                           NumberOfBytes
);

Paramètres

[in] HwDeviceExtension

Pointeur vers l’extension de périphérique matériel. Il s’agit d’une zone de stockage par HBA que le pilote de port alloue et initialise pour le compte du pilote miniport. Les pilotes Miniport stockent généralement des informations spécifiques à HBA dans cette extension, telles que l’état de l’adaptateur HBA et les plages d’accès mappées du HBA. Cette zone est disponible pour le pilote miniport dans le membre DeviceExtension-HwDeviceExtension> de l’objet d’appareil du HBA immédiatement après que le pilote miniport a appelé ScsiPortInitialize. Le pilote de port libère cette mémoire lorsqu’il supprime l’appareil.

[in] ConfigInfo

Spécifie des informations sur les fonctionnalités DMA de l’adaptateur HBA. Les membres suivants doivent être renseignés : DmaChannel ou DmaPort, DmaWidth, DmaSpeed, MaximumTransferLength, ScatterGather, Master défini sur TRUE, NumberOfPhysicalBreaks, AdapterInterfaceType, Dma32BitAddresses, SystemIoBusNumber, AutoRequestSense et SrbExtensionSize.

Les membres qui ne sont pas pertinents pour l’adaptateur HBA, tels que DmaChannel pour un adaptateur de master bus EISA, doivent être laissés tels quel.

[in] NumberOfBytes

Indique la taille en octets de l’extension non mise en cache à allouer. Les pilotes dans Windows XP et les systèmes d’exploitation antérieurs ne doivent pas allouer plus de 100 kilo-octets d’extension non mise en cache, et s’ils participent à des opérations d’E/S sur le fichier de mise en veille prolongée ou sur le fichier de vidage sur incident, ils doivent limiter la quantité d’extension non mise en cache qu’ils allouent à moins de 32 kilo-octets.

Valeur retournée

ScsiPortGetUncachedExtension retourne un pointeur d’adresse virtuelle vers l’extension non mise en cache. S’il ne peut pas allouer la mémoire demandée, il retourne NULL.

Remarques

ScsiPortGetUncachedExtension peut être appelé uniquement à partir de la routine HwScsiFindAdapter du pilote miniport et uniquement pour un HBA master bus. Les appels d’autres routines de pilotes miniport entraînent une défaillance du système ou une opération incorrecte pour l’appelant.

Étant donné que les machines haut de gamme disposent de caches et de mémoires volumineuses, toute mémoire à partager entre un HBA et le processeur doit être spécialement allouée. Les boîtes aux lettres ou les files d’attente de demandes d’E/S dans la mémoire système sont des exemples de ce type de mémoire partagée.

Un pilote miniport doit définir SrbExtensionSize avant d’appeler ScsiPortGetUncachedExtension pour modifier la taille de son stockage par requête en fonction de NumberOfPhysicalBreaks.

La routine HwScsiFindAdapter peut appeler ScsiPortGetUncachedExtension une seule fois pour chaque bus master HBA pris en charge par le pilote miniport.

Pour obtenir l’adresse physique de l’extension non mise en cache que l’adaptateur HBA peut utiliser, appelez ScsiPortGetPhysicalAddress.

Le pilote ScsiPort libère la mémoire allouée par ScsiPortGetUncachedExtension lorsque le périphérique de l’adaptateur est arrêté.

Configuration requise

Condition requise Valeur
Plateforme cible Desktop (Expérience utilisateur)
En-tête srb.h (include Miniport.h, Scsi.h)
Bibliothèque Scsiport.lib

Voir aussi

HwScsiFindAdapter

PORT_CONFIGURATION_INFORMATION (SCSI)

ScsiPortGetPhysicalAddress