Функция 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 (include Wdm.h, Ntddk.h, Ntifs.h) |
IRQL | Любой уровень |