Функция 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 | Любой уровень |