次の方法で共有


PFLUSH_ADAPTER_BUFFERS_EX コールバック関数 (wdm.h)

FlushAdapterBuffersEx ルーチンは、システム DMA コントローラーまたはバス マスター デバイスによって実行される DMA 転送操作の最後にデータ キャッシュに残っているデータをフラッシュします。

構文

PFLUSH_ADAPTER_BUFFERS_EX PflushAdapterBuffersEx;

NTSTATUS PflushAdapterBuffersEx(
  [in] PDMA_ADAPTER DmaAdapter,
  [in] PMDL Mdl,
  [in] PVOID MapRegisterBase,
  [in] ULONGLONG Offset,
  [in] ULONG Length,
  [in] BOOLEAN WriteToDevice
)
{...}

パラメーター

[in] DmaAdapter

DMA_ADAPTER構造体へのポインター。 この構造体は、ドライバーのシステム DMA チャネルまたはバス マスター デバイスを表すアダプター オブジェクトです。 呼び出し元は、 IoGetDmaAdapter ルーチンの以前の呼び出しからこのポインターを取得しました。

[in] Mdl

フラッシュされるメモリのページを記述する MDL チェーンへのポインター。 DMA 転送に使用された MDL チェーンを指すこのパラメーターを設定します。 詳細については、GetScatterGatherListEx、BuildScatterGatherListEx、または MapTransferExMdl パラメーターの説明を参照してください。

[in] MapRegisterBase

アダプター オブジェクトに対して以前に割り当てられたマップ レジスタへのハンドル。

[in] Offset

フラッシュ操作に使用する MDL チェーンの開始位置を基準とした開始オフセット。 このパラメーターを、DMA 転送の開始オフセットとして使用された値に設定します。 詳細については、GetScatterGatherListEx、BuildScatterGatherListExまたは MapTransferExOffset パラメーターの説明を参照してください。

[in] Length

フラッシュするデータのバイト数。 このパラメーターを、DMA 転送の転送長として使用された値に設定します。 詳細については、GetScatterGatherListEx、BuildScatterGatherListExまたは MapTransferExLength パラメーターの説明を参照してください。

[in] WriteToDevice

DMA 転送の方向。 このパラメーターを、DMA 転送の転送方向として使用された値に設定します。 詳細については、GetScatterGatherListEx、BuildScatterGatherListEx、または MapTransferExWriteToDevice パラメーターの説明を参照してください。

戻り値

FlushAdapterBuffersEx は、呼び出しが成功した場合にSTATUS_SUCCESSを返します。 考えられるエラーの戻り値には、次の状態コードが含まれます。

リターン コード 説明
STATUS_INVALID_PARAMETERS
呼び出し元によって渡されたパラメーター値が無効であるため、ルーチンは失敗しました。

注釈

FlushAdapterBuffersEx は、名前で直接呼び出すことができるシステム ルーチンではありません。このルーチンは、DMA_OPERATIONS構造体で返されるアドレスからのポインターによってのみ呼び出すことができます ドライバーは、DeviceDescription パラメーターの Version メンバーを DEVICE_DESCRIPTION_VERSION3 に設定して IoGetDmaAdapter を呼び出すことによって、このルーチンのアドレスを取得します。 IoGetDmaAdapterNULL を返す場合、ルーチンはプラットフォームで使用できません。

FlushAdapterBuffersEx を使用すると、ハードウェアによって強制されるキャッシュコヒーレンシー (バス スヌーピング) を実装しないハードウェア プラットフォームでプロセッサ キャッシュの一貫性を実現できます。 さらに、システム DMA 転送の場合、 FlushAdapterBuffersEx は 、システム DMA コントローラーの内部キャッシュに残っているデータをすべてフラッシュします。

分散/収集 DMA 転送を開始するドライバーは、転送が完了した後、転送されたすべてのデータがキャッシュからフラッシュされるようにする必要があります。 ドライバーは、ドライバーが DMA 転送を要求した IRP を完了する前に、およびドライバーがマップ レジスタを解放する前に FlushAdapterBuffersEx を呼び出す必要があります。 詳細については、「 DMA 操作中にキャッシュされたデータをフラッシュする」を参照してください。

FlushAdapterBuffersEx は、 FlushAdapterBuffers ルーチンの拡張バージョンです。 FlushAdapterBuffersEx は 、1 回の呼び出しで散布/収集リスト全体をフラッシュできます。 これに対し、 FlushAdapterBuffers を使用して散布図/収集リストをフラッシュするには、MDL チェーン内の MDL ごとに個別の呼び出しが必要です。

FlushAdapterBuffersExFlushAdapterBuffers の代わりに使用して、1 パケット DMA 転送のバッファーをフラッシュできます。 この場合、Mdl パラメーターが指す MDL チェーンには、1 つの MDL のみが含まれます。 この方法で FlushAdapterBuffersEx を使用する利点は、呼び出し元が MDL へのオフセットを指定できることです。

DMA 転送操作が完了する前に FlushAdapterBuffersEx が呼び出された場合、この呼び出しが完了する前に転送が取り消されるか、未定義の動作が発生する可能性があります。

要件

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

こちらもご覧ください

BuildScatterGatherListEx

DMA_ADAPTER

DMA_OPERATIONS

FlushAdapterBuffers

GetScatterGatherListEx

IoGetDmaAdapter

MapTransferEx