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 を します。
戻り値
FlushAdapterBuffers は、DMA コントローラーまたはバス マスター アダプターの内部キャッシュに残っているデータがシステム メモリまたはデバイスに正常にフラッシュされた場合、TRUE を返します。
備考
FlushAdapterBuffers は、名前で直接呼び出すことができるシステム ルーチンではありません。 このルーチンは、DMA_OPERATIONS 構造体で返されたアドレスからのポインターによってのみ呼び出されます。 ドライバーは、IoGetDmaAdapterを呼び出すことによって、このルーチンのアドレスを取得します。
DMA 転送が完了したことを確認するには、DMA 操作を実行するすべてのドライバーは、DMA 転送を要求した IRP を完了する前 マップ レジスタを解放する前に、 FlushAdapterBuffers を呼び出す必要があります。
ドライバーは、MmGetMdlVirtualAddressを呼び出すことによって、パケット ベースの DMA 転送の開始に対する初期 CurrentVa を取得できます。 ただし、返される値は、有効な仮想アドレスではなく、Mdlへのインデックスです。 ドライバーが複数の DMA 操作に大きな転送要求を分割する必要がある場合は、各 DMA 操作の CurrentVa と 長さ 更新する必要があります。
必要条件
要件 | 価値 |
---|---|
サポートされる最小クライアント | Windows 2000 以降で使用できます。 |
ターゲット プラットフォーム の | デスクトップ |
ヘッダー | wdm.h (Wdm.h、Ntddk.h、Ntifs.h を含む) |
IRQL | <= DISPATCH_LEVEL |
DDI コンプライアンス規則 を する | IrqlDispatch(wdm) |
関連項目
AllocateAdapterChannel の
IoGetDmaAdapter の