Fungsi KeMemoryBarrier (wdm.h)

Rutinitas KeMemoryBarrier menciptakan penghalang pada posisinya dalam kode—di mana pengkompilasi dan prosesor tidak dapat memindahkan operasi apa pun.

Sintaks

void KeMemoryBarrier();

Mengembalikan nilai

Tidak ada

Keterangan

Rutinitas KeMemoryBarrier menyisipkan penghalang memori ke dalam kode Anda. Penghalang ini menjamin bahwa setiap operasi yang muncul dalam kode sumber sebelum panggilan ke KeMemoryBarrier akan selesai sebelum operasi apa pun yang muncul setelah panggilan.

Implementasi rutin KeMemoryBarrier tergantung pada arsitektur prosesor. Misalnya, untuk prosesor x86, file header Wdm.h menentukan KeMemoryBarrier menjadi fungsi sebaris berikut:

FORCEINLINE
VOID
KeMemoryBarrier (
    VOID
    )
{
    LONG Barrier;

    __asm {
        xchg Barrier, eax
    }
}

Dalam definisi ini, kurung kurawal yang mengikuti kata kunci __asm berisi kode rakitan sebaris. Pengoptimal kompilator tidak dapat memindahkan instruksi dari posisi sebelum kode rakitan sebaris ke posisi setelah kode rakitan sebaris, dan sebaliknya. Selain itu, instruksi xchg secara implisit mencakup awalan kunci , yang memaksa perangkat keras prosesor untuk menyelesaikan operasi memori untuk semua instruksi yang mendahului instruksi xchg sebelum memulai operasi memori untuk instruksi yang mengikuti instruksi xchg .

KeMemoryBarrier mencegah pengkompilasi dan prosesor memindahkan operasi melintasi pembatas. Untuk mencegah hanya pengkompilasi memindahkan operasi, panggil KeMemoryBarrierWithoutFence.

Persyaratan

Persyaratan Nilai
Target Platform Desktop
Header wdm.h (termasuk Wdm.h, Ntddk.h, Ntifs.h)
IRQL Tingkat apa pun

Lihat juga

KeMemoryBarrierWithoutFence