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)

Weitere Informationen

AllocateAdapterChannel

DMA_ADAPTER

DMA_OPERATIONS

IoGetDmaAdapter

KeFlushIoBuffers

MapTransfer

MmGetMdlVirtualAddress