KeMemoryBarrier 함수(wdm.h)

KeMemoryBarrier 루틴은 컴파일러와 프로세서가 작업을 이동할 수 없는 코드의 위치에 장벽을 만듭니다.

구문

void KeMemoryBarrier();

반환 값

없음

설명

KeMemoryBarrier 루틴은 코드에 메모리 장벽을 삽입합니다. 이 장벽은 KeMemoryBarrier 호출 전에 소스 코드에 표시되는 모든 작업이 호출 후에 나타나는 작업 전에 완료되도록 보장합니다.

KeMemoryBarrier 루틴의 구현은 프로세서 아키텍처에 따라 달라집니다. 예를 들어 x86 프로세서의 경우 Wdm.h 헤더 파일은 KeMemoryBarrier 를 다음 인라인 함수로 정의합니다.

FORCEINLINE
VOID
KeMemoryBarrier (
    VOID
    )
{
    LONG Barrier;

    __asm {
        xchg Barrier, eax
    }
}

이 정의에서 __asm 키워드(keyword) 뒤에 오는 중괄호에는 인라인 어셈블리 코드가 포함됩니다. 컴파일러 최적화 프로그램은 인라인 어셈블리 코드 앞의 위치에서 인라인 어셈블리 코드 뒤의 위치로 명령을 이동할 수 없으며 그 반대의 경우도 마찬가지입니다. 또한 xchg 명령에는 xchg 명령을 따르는 지침에 대한 메모리 작업을 시작하기 전에 xchg 명령 앞에 오는 모든 지침에 대해 프로세서 하드웨어가 메모리 작업을 완료하도록 하는 잠금 접두사를 암시적으로 포함합니다.

KeMemoryBarrier 는 컴파일러와 프로세서가 모두 장벽을 넘어 작업을 이동하는 것을 방지합니다. 컴파일러만 작업을 이동하지 못하도록 하려면 KeMemoryBarrierWithoutFence를 호출합니다.

요구 사항

요구 사항
대상 플랫폼 데스크톱
헤더 wdm.h(Wdm.h, Ntddk.h, Ntifs.h 포함)
IRQL 모든 수준

추가 정보

KeMemoryBarrierWithoutFence