Función KeMemoryBarrier (wdm.h)

La rutina KeMemoryBarrier crea una barrera en su posición en el código, en la que el compilador y el procesador no pueden mover ninguna operación.

Sintaxis

void KeMemoryBarrier();

Valor devuelto

None

Observaciones

La rutina KeMemoryBarrier inserta una barrera de memoria en el código. Esta barrera garantiza que todas las operaciones que aparezcan en el código fuente antes de la llamada a KeMemoryBarrier se completarán antes de cualquier operación que aparezca después de la llamada.

La implementación de la rutina KeMemoryBarrier depende de la arquitectura del procesador. Por ejemplo, para un procesador x86, el archivo de encabezado Wdm.h define KeMemoryBarrier para que sea la siguiente función insertada:

FORCEINLINE
VOID
KeMemoryBarrier (
    VOID
    )
{
    LONG Barrier;

    __asm {
        xchg Barrier, eax
    }
}

En esta definición, las llaves que siguen a la palabra clave __asm contienen código de ensamblado insertado. El optimizador del compilador no puede mover una instrucción de una posición antes del código de ensamblado insertado a una posición después del código de ensamblado insertado y viceversa. Además, la instrucción xchg incluye implícitamente el prefijo de bloqueo , que obliga al hardware del procesador a completar las operaciones de memoria para todas las instrucciones que preceden a la instrucción xchg antes de iniciar operaciones de memoria para obtener instrucciones que sigan la instrucción xchg .

KeMemoryBarrier impide que el compilador y el procesador muevan las operaciones a través de la barrera. Para evitar que solo el compilador mueva operaciones, llame a KeMemoryBarrierWithoutFence.

Requisitos

Requisito Value
Plataforma de destino Escritorio
Encabezado wdm.h (incluya Wdm.h, Ntddk.h, Ntifs.h)
IRQL Cualquier nivel

Consulte también

KeMemoryBarrierWithoutFence