PMAP_TRANSFER fonction de rappel (wdm.h)
La routine MapTransfer configure les registres de carte d’un objet adaptateur pour mapper un transfert DMA à partir d’une mémoire tampon verrouillée.
Syntaxe
PMAP_TRANSFER PmapTransfer;
PHYSICAL_ADDRESS PmapTransfer(
[in] PDMA_ADAPTER DmaAdapter,
[in] PMDL Mdl,
[in] PVOID MapRegisterBase,
[in] PVOID CurrentVa,
[in, out] PULONG Length,
[in] BOOLEAN WriteToDevice
)
{...}
Paramètres
[in] DmaAdapter
Pointeur vers l’objet d’adaptateur DMA retourné par IoGetDmaAdapter et passé précédemment à AllocateAdapterChannel pour la demande de transfert d’IRP actuelle.
[in] Mdl
Pointeur vers l’un des éléments suivants : mdL qui décrit la mémoire tampon à MdlAddress dans le protocole IRP actuel ou mdL qui décrit la mémoire tampon commune configurée par le pilote d’un périphérique subordonné (mode d’initialisation automatique).
[in] MapRegisterBase
Spécifie les registres cartographiques alloués pour l’opération DMA. Le système transmet cette valeur à la routine AdapterControl du pilote.
[in] CurrentVa
Pointeur vers l’adresse virtuelle actuelle des données à transférer pour une opération de transfert DMA.
[in, out] Length
Spécifie la longueur, en octets, à mapper. Si le pilote a indiqué que son appareil était un maître de bus avec une prise en charge de nuages de points/collecte lorsqu’il a appelé IoGetDmaAdapter, la valeur de Length à retourner à partir de MapTransfer indique le nombre d’octets mappés. Sinon, les valeurs d’entrée et de sortie de Length sont identiques.
[in] WriteToDevice
Indique la direction de l’opération de transfert : TRUE pour un transfert de la mémoire tampon verrouillée vers l’appareil.
Valeur de retour
MapTransfer retourne l’adresse logique de la région mappée, que le pilote d’un adaptateur maître de bus peut utiliser. Les pilotes d’appareils qui utilisent un contrôleur DMA système ne peuvent pas utiliser cette valeur et doivent l’ignorer.
Remarques
MapTransfer n’est pas une routine système qui peut être appelée directement par nom. Cette routine est appelante uniquement par le pointeur de l’adresse retournée dans une structure DMA_OPERATIONS. Les pilotes obtiennent l’adresse de cette routine en appelant IoGetDmaAdapter.
Le DmaAdapter doit déjà avoir été alloué suite à l’appel précédent du pilote pour AllocateAdapterChannel.
Le nombre de registres cartographiques pouvant être configurés ne peut pas dépasser le nombre maximal retourné lorsque le pilote appelé IoGetDmaAdapter.
Un pilote peut obtenir le CurrentVa initial pour le début d’un transfert DMA basé sur des paquets en appelant MmGetMdlVirtualAddress. Toutefois, la valeur retournée est un index dans le Mdl, plutôt qu’une adresse virtuelle valide. Si le pilote doit fractionner une demande de transfert volumineuse en plusieurs opérations DMA, il doit mettre à jour currentVa et Longueur pour chaque opération DMA.
Le pilote d’un périphérique maître de bus avec prise en charge de nuages de points/collectes peut utiliser l’adresse logique retournée et mettre à jour valeur Longueur pour générer une liste de nuages de points/regroupements, en appelant MapTransfer à plusieurs reprises jusqu’à ce qu’il ait utilisé tous les registres de carte disponibles pour l’opération de transfert. Toutefois, un tel pilote peut utiliser plus simplement la routine GetScatterGatherList.
Exigences
Exigence | Valeur |
---|---|
client minimum pris en charge | Disponible à partir de Windows 2000. |
plateforme cible | Bureau |
d’en-tête | wdm.h (include Wdm.h, Ntddk.h, Ntifs.h) |
IRQL | <= DISPATCH_LEVEL |
règles de conformité DDI | irqlDispatch(wdm) |