Partager via


ScsiPortGetPhysicalAddress, fonction (srb.h)

La routine ScsiPortGetPhysicalAddress convertit une plage d’adresses virtuelle donnée en plage d’adresses physiques pour une opération DMA.

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

Syntaxe

SCSIPORT_API SCSI_PHYSICAL_ADDRESS ScsiPortGetPhysicalAddress(
  [in]  PVOID               HwDeviceExtension,
  [in]  PSCSI_REQUEST_BLOCK Srb,
  [in]  PVOID               VirtualAddress,
  [out] ULONG               *Length
);

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 à un HBA dans cette extension, telles que l’état de l’adaptateur HBA et les plages d’accès mappées de l’adaptateur HBA. Cette zone est disponible pour le pilote miniport dans le DeviceExtension->HwDeviceExtension membre de l’objet d’appareil du HBA immédiatement après l’appel du pilote miniport ScsiPortInitialize. Le pilote de port libère cette mémoire lorsqu’il supprime l’appareil.

[in] Srb

Le pointeur vers le bloc de requête SCSI si le VirtualAddress de à convertir provient du membre dataBuffer de SRB ou éventuellement du SenseInfoBuffer. Dans le cas contraire, ce paramètre doit être NULL.

[in] VirtualAddress

Pointeur vers l’adresse virtuelle de base à convertir. Si cette adresse virtuelle se trouve dans la plage d’un DataBuffer fourni par SRB, l’appelant doit également fournir le pointeur Srb.

[out] Length

Retourne le nombre d’octets mappés, en commençant à l’adresse physique retournée.

Valeur de retour

ScsiPortGetPhysicalAddress retourne l’adresse physique correspondante d’un VirtualAddressdonné. Si l’adresse donnée ne peut pas être convertie, elle retourne NULL.

Remarques

Les pilotes miniports des adaptateurs HBA principaux de bus appellent ScsiPortGetPhysicalAddress pour obtenir des plages d’adresses physiques mappées à utiliser pendant les opérations DMA. Par exemple, ScsiPortGetPhysicalAddress pouvez être utilisé pour générer une liste de nuages/de collecte pour les transferts de données qui s’étendent sur des pages. Notez que l'longueur retournée peut être supérieure à la taille du DataBuffer dans un SRB donné.

Si unenull nonNULL est passée, la VirtualAddress doit être comprise dans la plage de DataBuffer du SRB ou doit être un pointeur à partir du SenseInfoBuffer. Sinon, le VirtualAddress donné doit se trouver dans l’extension non mise en cache du pilote miniport, le SrbExtensionou le SenseInfoBuffer.

Un pilote miniport peut appeler ScsiPortGetPhysicalAddress pour traduire une adresse d’extension uniquement si la routine DriverEntry du pilote miniport définit NeedPhysicalAddresses sur TRUE dans le HW_INITIALIZATION_DATA lorsqu’il a appelé ScsiPortInitialize.

En raison de contraintes sur certains bus, comme ISA, l’adresse retournée par cette routine n’est pas garantie de correspondre à l’adresse retournée par une routine extérieure analogue (par exemple, MmGetPhysicalAddress). Un pilote miniport doit appeler uniquement routines ScsiPortXxx pour être portables.

ScsiPortGetPhysicalAddress utilise SCSI_PHYSICAL_ADDRESS pour représenter des adresses physiques.

typedef PHYSICAL_ADDRESS SCSI_PHYSICAL_ADDRESS, *PSCSI_PHYSICAL_ADDRESS;

Le type SCSI_PHYSICAL_ADDRESS est un type de données indépendant du système d’exploitation que les pilotes miniport SCSI utilisent pour représenter une adresse physique ou une adresse relative au bus.

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

Exigences

Exigence Valeur
plateforme cible Bureau
d’en-tête srb.h (include Miniport.h, Scsi.h)
bibliothèque Scsiport.lib

Voir aussi

DriverEntry de SCSI Miniport Driver

HW_INITIALIZATION_DATA (SCSI)

SCSI_REQUEST_BLOCK

ScsiPortGetUncachedExtension

ScsiPortGetVirtualAddress