Partager via


KeMemoryBarrier, fonction (wdm.h)

La routine KeMemoryBarrier crée une barrière à sa position dans le code, sur laquelle le compilateur et le processeur ne peuvent pas déplacer d’opérations.

Syntaxe

void KeMemoryBarrier();

Valeur de retour

Aucun

Remarques

La routine KeMemoryBarrier insère une barrière de mémoire dans votre code. Cette barrière garantit que chaque opération qui apparaît dans le code source avant l’appel à KeMemoryBarrier se termine avant toute opération qui apparaît après l’appel.

L’implémentation de la routine KeMemoryBarrier dépend de l’architecture du processeur. Par exemple, pour un processeur x86, le fichier d’en-tête Wdm.h définit KeMemoryBarrier être la fonction inline suivante :

FORCEINLINE
VOID
KeMemoryBarrier (
    VOID
    )
{
    LONG Barrier;

    __asm {
        xchg Barrier, eax
    }
}

Dans cette définition, les accolades qui suivent le mot clé __asm contiennent du code d’assembly inline. L’optimiseur du compilateur ne peut pas déplacer une instruction d’une position avant le code d’assembly inline vers une position après le code d’assembly inline, et vice versa. En outre, l’instruction xchg inclut implicitement le préfixe de verrou, ce qui force le matériel du processeur à effectuer les opérations de mémoire pour toutes les instructions qui précèdent l’instruction xchg avant de lancer des opérations de mémoire pour les instructions qui suivent l’instruction xchg.

KeMemoryBarrier empêche le compilateur et le processeur de déplacer les opérations à travers la barrière. Pour empêcher uniquement le compilateur de déplacer des opérations, appelez KeMemoryBarrierWithoutFence.

Exigences

Exigence Valeur
plateforme cible Bureau
d’en-tête wdm.h (include Wdm.h, Ntddk.h, Ntifs.h)
IRQL N’importe quel niveau

Voir aussi

KeMemoryBarrierWithoutFence