KeMemoryBarrier 函数 (wdm.h)
KeMemoryBarrier 例程在代码中的位置创建一个屏障,编译器和处理器无法通过该屏障移动任何操作。
语法
void KeMemoryBarrier();
返回值
无
备注
KeMemoryBarrier 例程将内存屏障插入代码中。 此屏障保证在调用 KeMemoryBarrier 之前源代码中显示的每个操作都将在调用后出现的任何操作之前完成。
KeMemoryBarrier 例程的实现取决于处理器体系结构。 例如,对于 x86 处理器,Wdm.h 头文件将 KeMemoryBarrier 定义为以下内联函数:
FORCEINLINE
VOID
KeMemoryBarrier (
VOID
)
{
LONG Barrier;
__asm {
xchg Barrier, eax
}
}
在此定义中,__asm后面的大括号关键字 (keyword) 包含内联程序集代码。 编译器优化器无法将指令从内联程序集代码之前的位置移动到内联程序集代码之后的位置,反之亦然。 此外, xchg 指令隐式包含 锁 前缀,这会强制处理器硬件在针对 xchg 指令之后的指令启动内存操作之前完成 xchg 指令之前的所有指令的内存操作。
KeMemoryBarrier 阻止编译器和处理器跨屏障移动操作。 若要仅防止编译器移动操作,请调用 KeMemoryBarrierWithoutFence。
要求
要求 | 值 |
---|---|
目标平台 | 桌面 |
标头 | wdm.h(包括 Wdm.h、Ntddk.h、Ntifs.h) |
IRQL | 任何级别 |