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 刷新所有处理器的数据缓存,包括调用方正在运行的处理器的缓存。

作为一般规则,驱动程序应在开始 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)

另请参阅

FlushAdapterBuffers