Funzione KeMemoryBarrier (wdm.h)
La routine KeMemoryBarrier crea una barriera nella posizione nel codice, attraverso la quale 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 venga 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 forza l'hardware del processore a 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 al compilatore e al processore di spostare le operazioni attraverso la barriera. Per impedire solo al compilatore di spostare operazioni, chiamare KeMemoryBarrierWithoutFence.
Requisiti
Requisito | Valore |
---|---|
Piattaforma di destinazione | Desktop |
Intestazione | wdm.h (include Wdm.h, Ntddk.h, Ntifs.h) |
IRQL | Qualsiasi livello |