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();
Retornar valor
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 exibida 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 o __asm palavra-chave 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 movam operações através da barreira. Para impedir que apenas o compilador mova operações, chame KeMemoryBarrierWithoutFence.
Requisitos
Requisito | Valor |
---|---|
Plataforma de Destino | Área de Trabalho |
Cabeçalho | wdm.h (include Wdm.h, Ntddk.h, Ntifs.h) |
IRQL | Qualquer nível |