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 を呼び出します。 このルーチンを呼び出すと、コンピューター内のすべてのプロセッサに影響します。
ReadOperation が TRUE の場合、ドライバーはデバイスからシステム メモリに情報を読み取っているので、有効なデータはプロセッサ命令とデータ キャッシュに残っている可能性があります。 KeFlushIoBuffers は、呼び出し元が実行されているプロセッサを含め、すべてのプロセッサのキャッシュからシステム メモリにデータをフラッシュします。
ReadOperation が FALSE の場合、ドライバーはシステム メモリからデバイスにデータを書き込むため、有効なデータはプロセッサのデータ キャッシュに存在する可能性がありますが、まだデバイスに転送されていない可能性があります。 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) |