PFLUSH_ADAPTER_BUFFERS fonction de rappel (wdm.h)

La routine FlushAdapterBuffers vide toutes les données restantes dans le cache interne du contrôleur DMA système ou dans le cache interne d’un adaptateur de bus master à la fin d’une opération de transfert DMA.

Syntaxe

PFLUSH_ADAPTER_BUFFERS PflushAdapterBuffers;

BOOLEAN PflushAdapterBuffers(
  [in] PDMA_ADAPTER DmaAdapter,
  [in] PMDL Mdl,
  [in] PVOID MapRegisterBase,
  [in] PVOID CurrentVa,
  [in] ULONG Length,
  [in] BOOLEAN WriteToDevice
)
{...}

Paramètres

[in] DmaAdapter

Pointeur vers la structure DMA_ADAPTER retournée par IoGetDmaAdapter qui représente l’adaptateur de master bus ou le contrôleur DMA.

[in] Mdl

Pointeur vers la MDL qui décrit la mémoire tampon précédemment passée dans l’appel du pilote à MapTransfer.

[in] MapRegisterBase

Spécifie les registres cartographiques alloués à l’opération DMA. Le système transmet cette valeur à la routine AdapterControl du pilote.

[in] CurrentVa

Pointeur vers l’adresse virtuelle actuelle dans la mémoire tampon, décrite par mdl, où l’opération d’E/S s s’est produite. Cette valeur doit être identique à la valeur CurrentVa initiale passée à MapTransfer.

[in] Length

Spécifie la longueur, en octets, de la mémoire tampon.

[in] WriteToDevice

Spécifie la direction de l’opération de transfert DMA : TRUE pour un transfert d’une mémoire tampon dans la mémoire système vers le périphérique du pilote.

Valeur retournée

FlushAdapterBuffers retourne TRUE si des données restantes dans le cache interne du contrôleur DMA ou de l’adaptateur master bus ont été correctement vidées dans la mémoire système ou sur l’appareil.

Remarques

FlushAdapterBuffers n’est pas une routine système qui peut être appelée directement par nom. Cette routine peut être appelée 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.

Pour s’assurer qu’un transfert DMA est terminé, chaque pilote qui effectue des opérations DMA doit appeler FlushAdapterBuffers avant de terminer l’IRP qui a demandé le transfert DMA et avant de libérer les registres cartographiques.

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 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 Length pour chaque opération DMA.

Configuration requise

Condition requise Valeur
Client minimal pris en charge Disponible à partir de Windows 2000.
Plateforme cible Desktop (Expérience utilisateur)
En-tête wdm.h (include Wdm.h, Ntddk.h, Ntifs.h)
IRQL <= DISPATCH_LEVEL
Règles de conformité DDI IrqlDispatch(wdm)

Voir aussi

AllocateAdapterChannel

DMA_ADAPTER

DMA_OPERATIONS

IoGetDmaAdapter

KeFlushIoBuffers

MapTransfer

MmGetMdlVirtualAddress