Fungsi FillVolatileMemory

Fungsi FillVolatileMemory mengisi blok memori dengan nilai isian yang ditentukan.

Penting

Beberapa informasi berkaitan dengan produk prarilis yang mungkin dimodifikasi secara substansial sebelum dirilis secara komersial. Microsoft tidak memberikan jaminan, tersirat maupun tersurat, sehubungan dengan informasi yang diberikan di sini.

Parameter

Tujuan Param [keluar]

Penunjuk ke alamat awal blok memori yang akan diisi.

Panjang Param [in]

Ukuran blok memori yang akan diisi, dalam byte. Nilai ini harus kurang dari ukuran buffer Tujuan .

Param Fill [in]

Nilai byte untuk mengisi blok memori.

Sintaks

volatile void*
  FillVolatileMemory (
    _Out_writes_bytes_all_(Length) volatile void* Destination,
    SIZE_T Length,
    INT Fill
  );

Keterangan

API ini ada untuk memberikan perilaku FillMemory (yaitu, mengatur konten buffer) dalam situasi di mana pengembang perlu memastikan bahwa operasi pengaturan terjadi (yaitu, tidak tunduk pada pengoptimalan kompilator). API memiliki properti berikut:

  • API tidak dikenali sebagai kompilator intrinsik sehingga pengkompilasi tidak akan pernah mengoptimalkan panggilan (baik sepenuhnya atau mengganti panggilan dengan urutan instruksi "setara"). Ini berbeda dari FillMemory yang tunduk pada berbagai pengoptimalan pengkompilasi.
  • Ketika panggilan kembali, buffer telah ditimpa dengan nilai yang diinginkan. Fungsi ini mengakses memori ke Tujuan hanya akan dilakukan dalam fungsi (yaitu pengkompilasi tidak dapat memindahkan akses memori dari fungsi ini).
  • API dapat melakukan akses memori yang tidak ditandatangani jika platform mengizinkannya.
  • API dapat mengakses lokasi memori lebih dari sekali sebagai bagian dari operasinya.

Catatan

Fungsi ini berfungsi pada semua versi Windows, bukan hanya yang terbaru. Anda perlu menggunakan SDK terbaru untuk mendapatkan deklarasi fungsi dari winbase.h header. Anda juga memerlukan pustaka (volatileaccessu.lib) dari SDK terbaru. Namun, biner yang dihasilkan akan berjalan dengan baik pada versi Windows yang lebih lama.

Contoh

UCHAR SensitiveData[100];

// Imagine we temporarily store some sensitive cryptographic
// material in a buffer.

StoreCryptographicKey(&SensitiveData);
DoCryptographicOperation(&SensitiveData);

// Now that we are done using the sensitive data we want to
// erase it from the stack. We cannot call FillMemory because
// if the compiler realizes that "SensitiveData" is not
// referenced again the compiler can remove the call to FillMemory.
// Instead we can call SecureZeroMemory2, ZeroVolatileMemory, or FillVolatileMemory
// (the former two are convenience wrappers around the latter). These
// calls will not be optimized away by the compiler.
// Note that SecureZeroMemory2 performs better than the old
// SecureZeroMemory API.

FillVolatileMemory(&SensitiveData, sizeof(SensitiveData), 0);

Persyaratan

Klien minimum yang didukung: Windows 11 Insider Preview Build TBD

Header: winbase.h (termasuk Winbase.h)

Pustaka mode kernel: volatileaccessk.lib

Pustaka mode pengguna: volatileaccessu.lib

Baca juga