KeMemoryBarrier 함수(wdm.h)
KeMemoryBarrier 루틴은 컴파일러와 프로세서가 작업을 이동할 수 없는 코드의 위치에 장벽을 만듭니다.
통사론
void KeMemoryBarrier();
반환 값
없음
발언
KeMemoryBarrier 루틴은 코드에 메모리 장벽을 삽입합니다. 이 장벽은 KeMemoryBarrier 호출하기 전에 소스 코드에 표시되는 모든 작업이 호출 후에 나타나기 전에 완료되도록 보장합니다.
KeMemoryBarrier 루틴의 구현은 프로세서 아키텍처에 따라 달라집니다. 예를 들어 x86 프로세서의 경우 Wdm.h 헤더 파일은 KeMemoryBarrier 다음 인라인 함수로 정의합니다.
FORCEINLINE
VOID
KeMemoryBarrier (
VOID
)
{
LONG Barrier;
__asm {
xchg Barrier, eax
}
}
이 정의에서 __asm 키워드 뒤에 오는 중괄호에는 인라인 어셈블리 코드가 포함됩니다. 컴파일러 최적화 프로그램은 인라인 어셈블리 코드 앞의 위치에서 인라인 어셈블리 코드 뒤의 위치로 명령을 이동할 수 없으며 그 반대의 경우도 마찬가지입니다. 또한 xchg 명령에는 잠금 접두사를 암시적으로 포함하며, 이 접두사는 프로세서 하드웨어가 xchg 명령을 따르는 지침에 대한 메모리 작업을 시작하기 전에 xchg 명령 앞에 오는 모든 명령에 대한 메모리 작업을 완료하도록 합니다.
KeMemoryBarrier 컴파일러와 프로세서가 모두 장벽을 넘어 작업을 이동하는 것을 방지합니다. 컴파일러만 작업을 이동하지 못하도록 하려면 KeMemoryBarrierWithoutFence호출합니다.
요구 사항
요구 | 값 |
---|---|
대상 플랫폼 | 바탕 화면 |
헤더 | wdm.h(Wdm.h, Ntddk.h, Ntifs.h 포함) |
IRQL | 모든 수준 |