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 开始可用。 |
目标平台 | 通用 |
标头 | 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) |