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、または MapTransferEx の Mdl パラメーターの説明を参照してください。
[in] MapRegisterBase
アダプター オブジェクトに対して以前に割り当てられたマップ レジスタへのハンドル。
[in] Offset
フラッシュ操作に使用する MDL チェーンの開始位置を基準とした開始オフセット。 このパラメーターを、DMA 転送の開始オフセットとして使用された値に設定します。 詳細については、GetScatterGatherListEx、BuildScatterGatherListEx、または MapTransferEx の Offset パラメーターの説明を参照してください。
[in] Length
フラッシュするデータのバイト数。 このパラメーターを、DMA 転送の転送長として使用された値に設定します。 詳細については、GetScatterGatherListEx、BuildScatterGatherListEx、または MapTransferEx の Length パラメーターの説明を参照してください。
[in] WriteToDevice
DMA 転送の方向。 このパラメーターを、DMA 転送の転送方向として使用された値に設定します。 詳細については、GetScatterGatherListEx、BuildScatterGatherListEx、または MapTransferEx の WriteToDevice パラメーターの説明を参照してください。
戻り値
FlushAdapterBuffersEx は、呼び出しが成功した場合にSTATUS_SUCCESSを返します。 考えられるエラーの戻り値には、次の状態コードが含まれます。
リターン コード | 説明 |
---|---|
|
呼び出し元によって渡されたパラメーター値が無効であるため、ルーチンは失敗しました。 |
注釈
FlushAdapterBuffersEx は、名前で直接呼び出すことができるシステム ルーチンではありません。このルーチンは、DMA_OPERATIONS構造体で返されるアドレスからのポインターによってのみ呼び出すことができます 。 ドライバーは、DeviceDescription パラメーターの Version メンバーを DEVICE_DESCRIPTION_VERSION3 に設定して IoGetDmaAdapter を呼び出すことによって、このルーチンのアドレスを取得します。 IoGetDmaAdapter が NULL を返す場合、ルーチンはプラットフォームで使用できません。
FlushAdapterBuffersEx を使用すると、ハードウェアによって強制されるキャッシュコヒーレンシー (バス スヌーピング) を実装しないハードウェア プラットフォームでプロセッサ キャッシュの一貫性を実現できます。 さらに、システム DMA 転送の場合、 FlushAdapterBuffersEx は 、システム DMA コントローラーの内部キャッシュに残っているデータをすべてフラッシュします。
分散/収集 DMA 転送を開始するドライバーは、転送が完了した後、転送されたすべてのデータがキャッシュからフラッシュされるようにする必要があります。 ドライバーは、ドライバーが DMA 転送を要求した IRP を完了する前に、およびドライバーがマップ レジスタを解放する前に FlushAdapterBuffersEx を呼び出す必要があります。 詳細については、「 DMA 操作中にキャッシュされたデータをフラッシュする」を参照してください。
FlushAdapterBuffersEx は、 FlushAdapterBuffers ルーチンの拡張バージョンです。 FlushAdapterBuffersEx は 、1 回の呼び出しで散布/収集リスト全体をフラッシュできます。 これに対し、 FlushAdapterBuffers を使用して散布図/収集リストをフラッシュするには、MDL チェーン内の MDL ごとに個別の呼び出しが必要です。
FlushAdapterBuffersEx を FlushAdapterBuffers の代わりに使用して、1 パケット DMA 転送のバッファーをフラッシュできます。 この場合、Mdl パラメーターが指す MDL チェーンには、1 つの MDL のみが含まれます。 この方法で FlushAdapterBuffersEx を使用する利点は、呼び出し元が MDL へのオフセットを指定できることです。
DMA 転送操作が完了する前に FlushAdapterBuffersEx が呼び出された場合、この呼び出しが完了する前に転送が取り消されるか、未定義の動作が発生する可能性があります。
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows 8以降で使用できます。 |
対象プラットフォーム | デスクトップ |
Header | wdm.h (Wdm.h、Ntddk.h、Ntifs.h を含む) |
IRQL | <= DISPATCH_LEVEL |