共用方式為


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 裝置傳輸作業期間維護數據完整性。 呼叫此例程會影響計算機中的所有處理器。

如果 ReadOperationTRUE,驅動程式會從裝置讀取資訊到系統記憶體,因此有效的數據可能仍位於處理器指令和數據快取中。 KeFlushIoBuffers 會將所有處理器快取的數據排清到系統記憶體,包括呼叫端執行所在的處理器。

如果 ReadOperationFALSE,驅動程式會將數據從系統記憶體寫入裝置,因此有效的數據可能位於處理器的數據快取中,但尚未傳輸至裝置。 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)

另請參閱

FlushAdapterBuffers