PFLUSH_ADAPTER_BUFFERS Rückruffunktion (wdm.h)
Die FlushAdapterBuffers Routine löscht alle Daten, die im internen Cache des DMA-Controllers oder im internen Cache eines Busmasteradapters am Ende eines DMA-Übertragungsvorgangs 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, die den Busmasteradapter oder DMA-Controller darstellt.
[in] Mdl
Zeigen Sie auf die MDL, die den puffer beschreibt, der zuvor im Aufruf des Treibers an MapTransferübergeben wurde.
[in] MapRegisterBase
Gibt die Zuordnungsregister an, die für den DMA-Vorgang zugeordnet sind. Das System übergibt diesen Wert an die AdapterControl Routine des Treibers.
[in] CurrentVa
Zeigen Sie auf die aktuelle virtuelle Adresse im Puffer, die vom Mdlbeschrieben wird, wobei 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 busmasteradapters verbleiben, erfolgreich im Systemspeicher oder außerhalb des Geräts geleert wurden.
Bemerkungen
FlushAdapterBuffers ist keine Systemroutine, die direkt anhand des Namens aufgerufen werden kann. Diese Routine kann nur durch Zeiger von der in einer DMA_OPERATIONS Struktur zurückgegebenen Adresse aufgerufen werden. Treiber rufen die Adresse dieser Routine ab, indem sie IoGetDmaAdapteraufruft.
Um sicherzustellen, dass eine DMA-Übertragung abgeschlossen ist, muss jeder Treiber, der DMA-Vorgänge ausführt, FlushAdapterBuffers aufrufen, bevor das IRP abgeschlossen wird, das die DMA-Übertragung angefordert hat, und bevor die Kartenregister freigegeben werden.
Ein Treiber kann die anfängliche CurrentVa- für den Start einer paketbasierten DMA-Übertragung abrufen, indem MmGetMdlVirtualAddressaufgerufen wird. Der zurückgegebene Wert ist jedoch ein Index in der Mdlanstelle einer gültigen virtuellen Adresse. Wenn der Treiber eine große Übertragungsanforderung in mehrere DMA-Vorgänge aufteilen muss, muss er CurrentVa- und Length- für jeden DMA-Vorgang aktualisieren.
Anforderungen
Anforderung | Wert |
---|---|
mindestens unterstützte Client- | Ab Windows 2000 verfügbar. |
Zielplattform- | Desktop |
Header- | wdm.h (include Wdm.h, Ntddk.h, Ntifs.h) |
IRQL- | <= DISPATCH_LEVEL |
DDI-Complianceregeln | IrqlDispatch(wdm) |