Compartir a través de


Función KeMemoryBarrier (wdm.h)

El KeMemoryBarrier rutina 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

Ninguno

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 de 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 de, lo 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 las instrucciones de xchg.

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

Requisitos

Requisito Valor
de la plataforma de destino de Escritorio
encabezado de wdm.h (include Wdm.h, Ntddk.h, Ntifs.h)
irQL Cualquier nivel

Consulte también

keMemoryBarrierWithoutFence