PFLUSH_ADAPTER_BUFFERS Rückruffunktion (wdm.h)
Die FlushAdapterBuffers-Routine leeren alle Daten, die am Ende eines DMA-Übertragungsvorgangs im internen Cache des System-DMA-Controllers oder im internen Cache eines Bus-master-Adapters verbleiben.
Syntax
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
)
{...}
Parameter
[in] DmaAdapter
Zeiger auf die DMA_ADAPTER-Struktur, die von IoGetDmaAdapter zurückgegeben wird und den Bus-master-Adapter oder DMA-Controller darstellt.
[in] Mdl
Zeiger auf die MDL, die den Puffer beschreibt, der zuvor im Aufruf des Treibers an MapTransfer übergeben wurde.
[in] MapRegisterBase
Gibt die Zuordnungsregister an, die dem DMA-Vorgang zugeordnet sind. Das System übergibt diesen Wert an die AdapterControl-Routine des Treibers.
[in] CurrentVa
Zeiger auf die aktuelle virtuelle Adresse im Puffer, die von der Mdl beschrieben wird, in der der E/A-Vorgang aufgetreten ist. Dieser Wert muss mit dem ursprünglichen CurrentVa-Wert übereinstimmen, der an MapTransfer übergeben wird.
[in] Length
Gibt die Länge des Puffers in Bytes an.
[in] WriteToDevice
Gibt die Richtung des DMA-Übertragungsvorgangs an: TRUE für eine Übertragung von einem Puffer im Systemspeicher auf das Gerät des Treibers.
Rückgabewert
FlushAdapterBuffers gibt TRUE zurück, wenn Daten, die im internen Cache des DMA-Controllers oder des Bus-master Adapters verbleiben, erfolgreich in den Systemspeicher oder auf das Gerät geleert wurden.
Hinweise
FlushAdapterBuffers ist keine Systemroutine, die direkt nach Namen aufgerufen werden kann. Diese Routine kann nur durch den Zeiger von der Adresse aufgerufen werden, die in einer DMA_OPERATIONS-Struktur zurückgegeben wird. Treiber erhalten die Adresse dieser Routine, indem sie IoGetDmaAdapter aufrufen.
Um sicherzustellen, dass eine DMA-Übertragung abgeschlossen ist, muss jeder Treiber, der DMA-Vorgänge ausführt, FlushAdapterBuffers aufrufen, bevor der IRP abgeschlossen wird, der die DMA-Übertragung angefordert hat, und vor dem Freigeben der Kartenregister.
Ein Treiber kann die anfängliche CurrentVa für den Start einer paketbasierten DMA-Übertragung abrufen, indem MmGetMdlVirtualAddress aufgerufen wird. Der zurückgegebene Wert ist jedoch ein Index in der Mdl und nicht eine gültige virtuelle Adresse. Wenn der Treiber eine große Übertragungsanforderung in mehr als einen DMA-Vorgang aufteilen muss, müssen CurrentVa und Length für jeden DMA-Vorgang aktualisiert werden.
Anforderungen
Anforderung | Wert |
---|---|
Unterstützte Mindestversion (Client) | Verfügbar ab Windows 2000. |
Zielplattform | Desktop |
Header | wdm.h (einschließlich Wdm.h, Ntddk.h, Ntifs.h) |
IRQL | <= DISPATCH_LEVEL |
DDI-Complianceregeln | IrqlDispatch(wdm) |