KeMemoryBarrier 函式 (wdm.h)
KeMemoryBarrier 例程會在程序代碼中的位置建立屏障,編譯程式和處理器無法移動任何作業。
Syntax
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 | 任何層級 |