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 | 任何層級 |