Funzione KeMemoryBarrier (wdm.h)

La routine KeMemoryBarrier crea una barriera nella sua posizione nel codice, in cui il compilatore e il processore non possono spostare alcuna operazione.

Sintassi

void KeMemoryBarrier();

Valore restituito

nessuno

Osservazioni

La routine KeMemoryBarrier inserisce una barriera di memoria nel codice. Questa barriera garantisce che ogni operazione visualizzata nel codice sorgente prima della chiamata a KeMemoryBarrier verrà completata prima di qualsiasi operazione visualizzata dopo la chiamata.

L'implementazione della routine KeMemoryBarrier dipende dall'architettura del processore. Ad esempio, per un processore x86, il file di intestazione Wdm.h definisce KeMemoryBarrier come funzione inline seguente:

FORCEINLINE
VOID
KeMemoryBarrier (
    VOID
    )
{
    LONG Barrier;

    __asm {
        xchg Barrier, eax
    }
}

In questa definizione le parentesi graffe che seguono la parola chiave __asm contengono codice assembly inline. L'utilità di ottimizzazione del compilatore non può spostare un'istruzione da una posizione prima del codice assembly inline a una posizione dopo il codice assembly inline e viceversa. Inoltre, l'istruzione xchg include implicitamente il prefisso di blocco , che impone all'hardware del processore di completare le operazioni di memoria per tutte le istruzioni che precedono l'istruzione xchg prima di avviare operazioni di memoria per istruzioni che seguono l'istruzione xchg .

KeMemoryBarrier impedisce sia al compilatore che al processore di spostare le operazioni attraverso la barriera. Per impedire solo al compilatore di spostare operazioni, chiamare KeMemoryBarrierWithoutFence.

Requisiti

   
Piattaforma di destinazione Desktop
Intestazione wdm.h (include Wdm.h, Ntddk.h, Ntifs.h)
IRQL Qualsiasi livello

Vedi anche

KeMemoryBarrierWithoutFence