次の方法で共有


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

DMA_ADAPTER

DMA_OPERATIONS

IoGetDmaAdapter

KeFlushIoBuffers

MapTransfer

MmGetMdlVirtualAddress