次の方法で共有


KeFlushIoBuffers 関数 (wdm.h)

KeFlushIoBuffers ルーチンは、MDL によって記述されたメモリ領域を、すべてのプロセッサのキャッシュからフラッシュします。

構文

void KeFlushIoBuffers(
  [in] PMDL    Mdl,
  [in] BOOLEAN ReadOperation,
  [in] BOOLEAN DmaOperation
);

パラメーター

[in] Mdl

I/O バッファーの範囲を記述する MDL へのポインター。

[in] ReadOperation

読み取り操作に対してフラッシュを実行する場合は TRUE 、書き込み操作の場合は FALSE を 指定します。 詳細については、「解説」を参照してください。

[in] DmaOperation

DMA 転送の 場合は TRUE 、PIO の 場合は FALSE を 指定します。

戻り値

なし

解説

ドライバーは、DMA または PIO デバイス転送操作中にデータの整合性を維持するために KeFlushIoBuffers を呼び出します。 このルーチンを呼び出すと、コンピューター内のすべてのプロセッサに影響します。

ReadOperationTRUE の場合、ドライバーはデバイスからシステム メモリに情報を読み取っているので、有効なデータはプロセッサ命令とデータ キャッシュに残っている可能性があります。 KeFlushIoBuffers は、呼び出し元が実行されているプロセッサを含め、すべてのプロセッサのキャッシュからシステム メモリにデータをフラッシュします。

ReadOperationFALSE の場合、ドライバーはシステム メモリからデバイスにデータを書き込むため、有効なデータはプロセッサのデータ キャッシュに存在する可能性がありますが、まだデバイスに転送されていない可能性があります。 KeFlushIoBuffers は、呼び出し元が実行されているプロセッサを含め、すべてのプロセッサのデータ キャッシュをフラッシュします。

一般的な規則として、ドライバーは DMA 転送操作を開始する直前、または PIO 読み取り操作の直後に KeFlushIoBuffers を呼び出す必要があります。

KeFlushIoBuffers は、Mdl パラメーターが指す MDL によって記述されたメモリ領域のみをフラッシュします。 MDL チェーンで記述されているすべてのメモリ領域をフラッシュするには、チェーン内の MDL ごとに個別の KeFlushIoBuffers 呼び出しが必要です。

詳細については、次のトピックを参照してください。

DMA 操作中にキャッシュされたデータをフラッシュする PIO 操作中にキャッシュされたデータをフラッシュする

要件

要件
サポートされている最小のクライアント Windows 2000 以降で使用できます。
対象プラットフォーム ユニバーサル
Header wdm.h (Wdm.h、Ntddk.h、Ntifs.h を含む)
Library NtosKrnl.lib
[DLL] NtosKrnl.exe
IRQL <= DISPATCH_LEVEL
DDI コンプライアンス規則 MdlAfterReqCompletedIntIoctlA(kmdf)MdlAfterReqCompletedIoctlA(kmdf)MdlAfterReqCompletedReadA(kmdf)MdlAfterReqCompletedWriteA(kmdf)

こちらもご覧ください

FlushAdapterBuffers