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 。
傳回值
無
備註
驅動程式會呼叫 KeFlushIoBuffers ,以在 DMA 或 PIO 裝置傳輸作業期間維護數據完整性。 呼叫此例程會影響計算機中的所有處理器。
如果 ReadOperation 為 TRUE,驅動程式會從裝置讀取資訊到系統記憶體,因此有效的數據可能仍位於處理器指令和數據快取中。 KeFlushIoBuffers 會將所有處理器快取的數據排清到系統記憶體,包括呼叫端執行所在的處理器。
如果 ReadOperation 為 FALSE,驅動程式會將數據從系統記憶體寫入裝置,因此有效的數據可能位於處理器的數據快取中,但尚未傳輸至裝置。 KeFlushIoBuffers 會排清所有處理器的數據快取,包括呼叫端執行所在的處理器。
根據一般規則,驅動程式應該在開始 DMA 傳輸作業之前,或緊接在任何 PIO 讀取作業之後呼叫 KeFlushIoBuffers 。
KeFlushIoBuffers 只會排清 Mdl 參數指向的 MDL 所描述的記憶體區域。 若要排清 MDL 鏈結所描述的所有記憶體區域,需要鏈結中每個 MDL 的個別 KeFlushIoBuffers 呼叫。
如需詳細資訊,請參閱下列主題:
排清 DMA 作業期間的快取數據排清 PIO 作業期間的快取數據
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | 從 Windows 2000 開始提供。 |
目標平台 | Universal |
標頭 | 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) |