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) |