Partager via


Fonction ScsiPortGetPhysicalAddress (srb.h)

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

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 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 à 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] Srb

Pointeur vers le bloc de requête SCSI si la VirtualAddress à convertir provient du membre DataBuffer de ce SRB ou, éventuellement, du SenseInfoBuffer. Sinon, ce paramètre doit être NULL.

[in] VirtualAddress

Pointeur vers l’adresse virtuelle de base à convertir. Si cette adresse virtuelle se situe 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 retournée

ScsiPortGetPhysicalAddress retourne l’adresse physique correspondante pour une Adresse Virtuelle donnée. Si l’adresse donnée ne peut pas être convertie, elle retourne NULL.

Remarques

Les pilotes miniport des HBA master bus appellent ScsiPortGetPhysicalAddress pour obtenir des plages d’adresses physiques mappées à utiliser pendant les opérations DMA. Par exemple, ScsiPortGetPhysicalAddress peut être utilisé pour créer une liste de points/regroupements pour les transferts de données qui s’étendent sur des pages. Notez que la longueur retournée peut être supérieure à la taille du DataBuffer dans un SRB donné.

Si un Srb non NULL est passé, virtualAddress doit se trouver dans la plage du DataBuffer du SRB ou doit être un pointeur du SenseInfoBuffer. Sinon, la VirtualAddress donnée doit se trouver dans l’extension non mise en cache du pilote miniport, dans SrbExtension ou dans SenseInfoBuffer.

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

En raison de contraintes sur certains bus, comme ISA, il n’est pas garanti que l’adresse retournée par cette routine corresponde à l’adresse retournée par une routine externe analogue (telle que MmGetPhysicalAddress). Un pilote miniport doit appeler uniquement les 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 de bus.

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 .
 

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

DriverEntry du pilote SCSI Miniport

HW_INITIALIZATION_DATA (SCSI)

SCSI_REQUEST_BLOCK

ScsiPortGetUncachedExtension

ScsiPortGetVirtualAddress