PFLUSH_ADAPTER_BUFFERS コールバック関数 (wdm.h)
FlushAdapterBuffers ルーチンは、システム DMA コントローラーの内部キャッシュまたは DMA 転送操作の終了時にバス マスター アダプターの内部キャッシュに残っているデータをフラッシュします。
構文
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
)
{...}
パラメーター
[in] DmaAdapter
バス マスター アダプターまたは DMA コントローラーを表す IoGetDmaAdapter によって返されるDMA_ADAPTER構造体へのポインター。
[in] Mdl
MapTransfer へのドライバーの呼び出しで以前に渡されたバッファーを記述する MDL へのポインター。
[in] MapRegisterBase
DMA 操作に割り当てられたマップ レジスタを指定します。 システムは、ドライバーの AdapterControl ルーチンにこの値を渡します。
[in] CurrentVa
I/O 操作が発生した Mdl によって記述されたバッファー内の現在の仮想アドレスへのポインター。 この値は、MapTransfer に渡される最初の CurrentVa 値と同じである必要があります。
[in] Length
バッファーの長さをバイト単位で指定します。
[in] WriteToDevice
DMA 転送操作の方向を指定します。システム メモリ内のバッファーからドライバーのデバイスへの転送の 場合は TRUE 。
戻り値
DMA コントローラーまたはバス マスター アダプターの内部キャッシュに残っているデータがシステム メモリまたはデバイスに正常にフラッシュされた場合、FlushAdapterBuffers は TRUE を返します。
注釈
FlushAdapterBuffers は、名前で直接呼び出すことができるシステム ルーチンではありません。 このルーチンは、 DMA_OPERATIONS 構造体で返されたアドレスからのポインターによってのみ呼び出されます。 ドライバーは、 IoGetDmaAdapter を呼び出して、このルーチンのアドレスを取得します。
DMA 転送が完了したことを確認するには、DMA 操作を実行するすべてのドライバーは、DMA 転送を要求した IRP を完了する前に、マップ レジスタを解放する前に FlushAdapterBuffers を呼び出す必要があります。
ドライバーは、MmGetMdlVirtualAddress を呼び出すことによって、パケット ベースの DMA 転送を開始するための初期 CurrentVa を取得できます。 ただし、返される値は、有効な仮想アドレスではなく、 Mdl へのインデックスです。 ドライバーが大きな転送要求を複数の DMA 操作に分割する必要がある場合は、DMA 操作ごとに CurrentVa と Length を 更新する必要があります。
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows 2000 以降で使用できます。 |
対象プラットフォーム | デスクトップ |
Header | wdm.h (Wdm.h、Ntddk.h、Ntifs.h を含む) |
IRQL | <= DISPATCH_LEVEL |
DDI コンプライアンス規則 | IrqlDispatch(wdm) |