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 传输指定 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) |
库 | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | <= DISPATCH_LEVEL |
DDI 符合性规则 | MdlAfterReqCompletedIntIoctlA(kmdf),MdlAfterReqCompletedIoctlA(kmdf),MdlAfterReqCompletedReadA(kmdf),MdlAfterReqCompletedWriteA(kmdf) |