PFLUSH_ADAPTER_BUFFERS funzione di callback (wdm.h)
Il FlushAdapterBuffers routine scarica tutti i dati rimanenti nella cache interna del controller DMA di sistema o nella cache interna di un adattatore master bus alla fine di un'operazione di trasferimento DMA.
Sintassi
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
)
{...}
Parametri
[in] DmaAdapter
Puntatore alla struttura DMA_ADAPTER restituita da IoGetDmaAdapter che rappresenta l'adattatore bus-master o il controller DMA.
[in] Mdl
Puntatore al file MDL che descrive il buffer passato in precedenza nella chiamata del driver a MapTransfer.
[in] MapRegisterBase
Specifica i registri mappa allocati per l'operazione DMA. Il sistema passa questo valore alla routine Adapter Control del driver.
[in] CurrentVa
Puntatore all'indirizzo virtuale corrente nel buffer, descritto dal Mdl, dove si è verificata l'operazione di I/O. Questo valore deve essere uguale al valore iniziale CurrentVa passato a MapTransfer.
[in] Length
Specifica la lunghezza, espressa in byte, del buffer.
[in] WriteToDevice
Specifica la direzione dell'operazione di trasferimento DMA: TRUE per un trasferimento da un buffer nella memoria di sistema al dispositivo del driver.
Valore restituito
FlushAdapterBuffers restituisce TRUE se i dati rimanenti nella cache interna dell'adattatore bus o del controller DMA sono stati scaricati correttamente nella memoria di sistema o nel dispositivo.
Osservazioni
FlushAdapterBuffers non è una routine di sistema che può essere chiamata direttamente per nome. Questa routine è chiamabile solo dal puntatore dall'indirizzo restituito in una struttura DMA_OPERATIONS. I driver ottengono l'indirizzo di questa routine chiamando IoGetDmaAdapter.
Per garantire il completamento di un trasferimento DMA, ogni driver che esegue operazioni DMA deve chiamare FlushAdapterBuffers prima di completare l'IRP che ha richiesto il trasferimento DMA e prima di liberare i registri della mappa.
Un driver può ottenere il CurrentVa iniziale per l'avvio di un trasferimento DMA basato su pacchetti chiamando MmGetMdlVirtualAddress. Tuttavia, il valore restituito è un indice nel Mdl, anziché un indirizzo virtuale valido. Se il driver deve suddividere una richiesta di trasferimento di grandi dimensioni in più operazioni DMA, deve aggiornare CurrentVa e lunghezza per ogni operazione DMA.
Fabbisogno
Requisito | Valore |
---|---|
client minimo supportato | Disponibile a partire da Windows 2000. |
piattaforma di destinazione | Desktop |
intestazione | wdm.h (include Wdm.h, Ntddk.h, Ntifs.h) |
IRQL | <= DISPATCH_LEVEL |
regole di conformità DDI | irqlDispatch(wdm) |