次の方法で共有


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 コントローラーまたはバス マスター アダプターの内部キャッシュに残っているデータがシステム メモリまたはデバイスに正常にフラッシュされた場合、FlushAdapterBuffersTRUE を返します。

注釈

FlushAdapterBuffers は、名前で直接呼び出すことができるシステム ルーチンではありません。 このルーチンは、 DMA_OPERATIONS 構造体で返されたアドレスからのポインターによってのみ呼び出されます。 ドライバーは、 IoGetDmaAdapter を呼び出して、このルーチンのアドレスを取得します。

DMA 転送が完了したことを確認するには、DMA 操作を実行するすべてのドライバーは、DMA 転送を要求した IRP を完了する前に、マップ レジスタを解放する前に FlushAdapterBuffers を呼び出す必要があります。

ドライバーは、MmGetMdlVirtualAddress を呼び出すことによって、パケット ベースの DMA 転送を開始するための初期 CurrentVa を取得できます。 ただし、返される値は、有効な仮想アドレスではなく、 Mdl へのインデックスです。 ドライバーが大きな転送要求を複数の DMA 操作に分割する必要がある場合は、DMA 操作ごとに CurrentVaLength を 更新する必要があります。

要件

要件
サポートされている最小のクライアント Windows 2000 以降で使用できます。
対象プラットフォーム デスクトップ
Header wdm.h (Wdm.h、Ntddk.h、Ntifs.h を含む)
IRQL <= DISPATCH_LEVEL
DDI コンプライアンス規則 IrqlDispatch(wdm)

こちらもご覧ください

AllocateAdapterChannel

DMA_ADAPTER

DMA_OPERATIONS

IoGetDmaAdapter

KeFlushIoBuffers

MapTransfer

MmGetMdlVirtualAddress