共用方式為


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 傳輸 TRUEPIO 的 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)

另請參閱

FlushAdapterBuffers