KeFlushIoBuffers 函式 (wdm.h)
KeFlushIoBuffers 例程會從所有處理器的快取中清除 MDL 所描述的記憶體區域。
語法
void KeFlushIoBuffers(
[in] PMDL Mdl,
[in] BOOLEAN ReadOperation,
[in] BOOLEAN DmaOperation
);
參數
[in] Mdl
描述 I/O 緩衝區範圍的 MDL 指標。
[in] ReadOperation
針對讀取作業執行排清,並針對寫入作業 FALSE,指定 TRUE。 如需詳細資訊,請參閱下列一節。
[in] DmaOperation
指定 DMA 傳輸 TRUE,PIO 的 FALSE。
傳回值
沒有
言論
驅動程式呼叫 KeFlushIoBuffers,以在 DMA 或 PIO 裝置傳輸作業期間維護數據完整性。 呼叫此例程會影響計算機中的所有處理器。
如果 ReadOperationTRUE,驅動程式會從裝置讀取資訊到系統記憶體,因此有效的數據可能仍位於處理器指令和數據快取中。 KeFlushIoBuffers 將所有處理器快取的數據排清到系統記憶體,包括呼叫端執行所在的處理器。
如果 ReadOperationFALSE,驅動程式會將數據從系統記憶體寫入裝置,因此有效的數據可能位於處理器的數據快取中,但尚未傳輸至裝置。 KeFlushIoBuffers 排清所有處理器的數據快取,包括呼叫端執行所在的處理器。
一般情況下,驅動程式應該先呼叫 KeFlushIoBuffers,再開始 DMA 傳輸作業,或緊接在任何 PIO 讀取作業之後。
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) |