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

None

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 comme la fonction inline suivante :

FORCEINLINE
VOID
KeMemoryBarrier (
    VOID
    )
{
    LONG Barrier;

    __asm {
        xchg Barrier, eax
    }
}

Dans cette définition, les accolades qui suivent la __asm mot clé 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 de l’assembly inline, et vice versa. En outre, l’instruction xchg inclut implicitement le préfixe de verrou , ce qui force le matériel processeur à effectuer les opérations de mémoire pour toutes les instructions qui précèdent l’instruction xchg avant d’initier 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 au-delà de la barrière. Pour empêcher uniquement le compilateur de déplacer des opérations, appelez KeMemoryBarrierWithoutFence.

Configuration requise

Condition requise Valeur
Plateforme cible Desktop (Expérience utilisateur)
En-tête wdm.h (include Wdm.h, Ntddk.h, Ntifs.h)
IRQL N’importe quel niveau

Voir aussi

KeMemoryBarrierWithoutFence