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 开始可用。
目标平台 通用
标头 wdm.h(包括 Wdm.h、Ntddk.h、Ntifs.h)
Library NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= DISPATCH_LEVEL
DDI 符合性规则 MdlAfterReqCompletedIntIoctlA (kmdf) MdlAfterReqCompletedIoctlA (kmdf) MdlAfterReqCompletedReadA (kmdf) MdlAfterReqCompletedWriteA (kmdf)

另请参阅

FlushAdapterBuffers