Freigeben über


KeMemoryBarrier-Funktion (wdm.h)

Die KeMemoryBarrier-Routine erzeugt an ihrer Position im Code eine Barriere, über die der Compiler und der Prozessor keine Vorgänge verschieben können.

Syntax

void KeMemoryBarrier();

Rückgabewert

Keine

Bemerkungen

Die KeMemoryBarrier-Routine fügt eine Speicherbarriere in Ihren Code ein. Diese Barriere garantiert, dass jeder Vorgang, der vor dem Aufruf von KeMemoryBarrier im Quellcode angezeigt wird, vor jedem Vorgang abgeschlossen wird, der nach dem Aufruf angezeigt wird.

Die Implementierung der KeMemoryBarrier-Routine hängt von der Prozessorarchitektur ab. Beispielsweise definiert die Wdm.h-Headerdatei für einen x86-Prozessor KeMemoryBarrier als die folgende Inlinefunktion:

FORCEINLINE
VOID
KeMemoryBarrier (
    VOID
    )
{
    LONG Barrier;

    __asm {
        xchg Barrier, eax
    }
}

In dieser Definition enthalten die Klammern, die dem __asm folgen, Schlüsselwort (keyword) Inlineassemblycode. Der Compileroptimierer kann eine Anweisung nicht von einer Position vor dem Inlineassemblycode in eine Position nach dem Inlineassemblycode verschieben und umgekehrt. Darüber hinaus enthält die xchg-Anweisung implizit das Sperrpräfix , das die Prozessorhardware zwingt, die Speichervorgänge für alle Anweisungen abzuschließen, die der xchg-Anweisung vorangehen, bevor sie Speichervorgänge für Anweisungen initiiert, die der xchg-Anweisung folgen.

KeMemoryBarrier verhindert, dass sowohl der Compiler als auch der Prozessor Vorgänge über die Barriere verschieben. Um zu verhindern, dass nur der Compiler Vorgänge verschiebt, rufen Sie KeMemoryBarrierWithoutFence auf.

Anforderungen

Anforderung Wert
Zielplattform Desktop
Header wdm.h (einschließlich Wdm.h, Ntddk.h, Ntifs.h)
IRQL Beliebige Ebene

Weitere Informationen

KeMemoryBarrierWithoutFence