fonction de rappel PFLUSH_ADAPTER_BUFFERS (wdm.h)
Les FlushAdapterBuffers routine vident toutes les données restantes dans le cache interne du contrôleur DMA du système ou dans le cache interne d’un adaptateur maître de bus à 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 maître de bus ou le contrôleur DMA.
[in] Mdl
Pointeur vers le 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 pour 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écrit par le Mdl, où l’opération d’E/S s’est produite. Cette valeur doit être identique à la valeur initiale CurrentVa 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 l’appareil du pilote.
Valeur de retour
FlushAdapterBuffers retourne TRUE si des données restantes dans le cache interne du contrôleur DMA ou de l’adaptateur maître bus ont été correctement vidées dans la mémoire système ou sortante sur l’appareil.
Remarques
FlushAdapterBuffers 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.
Pour vous assurer qu’un transfert DMA est terminé, chaque pilote qui effectue des opérations DMA doit appeler FlushAdapterBuffers avant d’effectuer le transfert DMA 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 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.
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) |