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 |