Функция KeMemoryBarrier (wdm.h)

Подпрограмма KeMemoryBarrier создает барьер на своем месте в коде, через который компилятор и процессор не могут перемещать никакие операции.

Синтаксис

void KeMemoryBarrier();

Возвращаемое значение

None

Remarks

Подпрограмма 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 Любой уровень

См. также раздел

KeMemoryBarrierWithoutFence