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 以降で使用できます。 |
ターゲット プラットフォーム の | 万国 |
ヘッダー | wdm.h (Wdm.h、Ntddk.h、Ntifs.h を含む) |
ライブラリ | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | <= DISPATCH_LEVEL |
DDI コンプライアンス規則 を する | MdlAfterReqCompletedIntIoctlA(kmdf), MdlAfterReqCompletedIoctlA(kmdf), MdlAfterReqCompletedReadA(kmdf), MdlAfterReqCompletedWriteA(kmdf) |