Função KeMemoryBarrier (wdm.h)

A rotina KeMemoryBarrier cria uma barreira em sua posição no código, na qual o compilador e o processador não podem mover nenhuma operação.

Sintaxe

void KeMemoryBarrier();

Valor retornado

Nenhum

Comentários

A rotina KeMemoryBarrier insere uma barreira de memória em seu código. Essa barreira garante que todas as operações exibidas no código-fonte antes da chamada para KeMemoryBarrier sejam concluídas antes de qualquer operação que aparece após a chamada.

A implementação da rotina KeMemoryBarrier depende da arquitetura do processador. Por exemplo, para um processador x86, o arquivo de cabeçalho Wdm.h define KeMemoryBarrier como a seguinte função embutida:

FORCEINLINE
VOID
KeMemoryBarrier (
    VOID
    )
{
    LONG Barrier;

    __asm {
        xchg Barrier, eax
    }
}

Nessa definição, as chaves que seguem a palavra-chave __asm contêm código de assembly embutido. O otimizador do compilador não pode mover uma instrução de uma posição antes do código de assembly embutido para uma posição após o código de assembly embutido e vice-versa. Além disso, a instrução xchg inclui implicitamente o prefixo de bloqueio , que força o hardware do processador a concluir as operações de memória para todas as instruções que precedem a instrução xchg antes de iniciar operações de memória para obter instruções que seguem a instrução xchg .

KeMemoryBarrier impede que o compilador e o processador movem as operações através da barreira. Para impedir que apenas o compilador mova operações, chame KeMemoryBarrierWithoutFence.

Requisitos

   
Plataforma de Destino Desktop
Cabeçalho wdm.h (include Wdm.h, Ntddk.h, Ntifs.h)
IRQL Qualquer nível

Confira também

KeMemoryBarrierWithoutFence