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