Bagikan melalui


Fungsi ZwFreeVirtualMemory (ntifs.h)

ZwFreeVirtualMemory rilis rutin, penonaktifan, atau keduanya, wilayah halaman dalam ruang alamat virtual dari proses tertentu.

Sintaksis

NTSYSAPI NTSTATUS ZwFreeVirtualMemory(
  [in]      HANDLE  ProcessHandle,
  [in, out] PVOID   *BaseAddress,
  [in, out] PSIZE_T RegionSize,
  [in]      ULONG   FreeType
);

Parameter

[in] ProcessHandle

Handel untuk proses dalam konteks halaman yang akan dibebaskan berada. Gunakan makro NtCurrentProcess, yang ditentukan dalam Ntddk.h, untuk menentukan proses saat ini.

[in, out] BaseAddress

Penunjuk ke variabel yang akan menerima alamat virtual wilayah halaman yang dibeberkan.

Jika bendera MEM_RELEASE diatur dalam parameter FreeType, baseAddress harus menjadi alamat dasar yang dikembalikan oleh ZwAllocateVirtualMemory ketika wilayah dicadangkan.

[in, out] RegionSize

Pointer ke variabel yang akan menerima ukuran aktual, dalam byte, dari wilayah halaman yang dibeberkan. Rutinitas membulatkan nilai awal variabel ini hingga batas ukuran halaman host berikutnya dan menulis nilai bulat kembali ke variabel ini.

Jika bendera MEM_RELEASE diatur dalam parameter FreeType, variabel yang ditujukkan oleh RegionSize harus nol. ZwFreeVirtualMemory membebaskan seluruh wilayah yang dicadangkan dalam panggilan alokasi awal ke ZwAllocateVirtualMemory.

Jika bendera MEM_DECOMMIT diatur dalam parameter FreeType , ZwFreeVirtualMemory menonaktifkan semua halaman memori yang berisi satu atau beberapa byte dalam rentang dari parameter BaseAddress ke (BaseAddressRegionSize). Ini berarti, misalnya, bahwa jika wilayah dua byte memori melekat batas halaman, kedua halaman dinonaktifkan.

ZwFreeVirtualMemory menonaktifkan seluruh wilayah yang dicadangkan oleh ZwAllocateVirtualMemory. Jika tiga kondisi berikut terpenuhi, seluruh wilayah memasuki status dipesan:

  • Bendera MEM_DECOMMIT diatur.
  • baseAddress adalah alamat dasar yang dikembalikan oleh ZwAllocateVirtualMemory ketika wilayah tersebut dicadangkan.
  • RegionSize< adalah nol.

[in] FreeType

Bitmask yang berisi bendera yang menjelaskan jenis operasi gratis yang ZwFreeVirtualMemory akan dilakukan untuk wilayah halaman yang ditentukan. Nilai yang mungkin adalah sebagai berikut:

  • MEM_DECOMMIT

    • ZwFreeVirtualMemory akan menonaktifkan wilayah halaman yang ditentukan. Halaman memasuki status yang dipesan.

    • ZwFreeVirtualMemory tidak gagal jika Anda mencoba menonaktifkan halaman yang tidak dikomit. Ini berarti Anda dapat menonaktifkan rentang halaman tanpa terlebih dahulu menentukan status komitmen mereka saat ini.

  • MEM_RELEASE

    ZwFreeVirtualMemory akan merilis wilayah halaman yang ditentukan. Halaman memasuki status bebas.

    Jika Anda menentukan bendera ini, Variabel yang titik Ukuran Wilayah harus nol, dan BaseAddress harus menunjuk ke alamat dasar yang dikembalikan oleh ZwAllocateVirtualMemory ketika wilayah dicadangkan. ZwFreeVirtualMemory gagal jika salah satu kondisi ini tidak terpenuhi.

    Jika ada halaman di wilayah yang saat ini diterapkan, ZwFreeVirtualMemory penonaktifan terlebih dahulu lalu merilisnya.

ZwFreeVirtualMemory tidak gagal jika Anda mencoba merilis halaman yang berada di berbagai status, beberapa dicadangkan dan beberapa berkomitmen. Ini berarti Anda dapat merilis berbagai halaman tanpa terlebih dahulu menentukan status komitmen mereka saat ini.

Mengembalikan nilai

ZwFreeVirtualMemory mengembalikan kode status STATUS_SUCCESS atau kesalahan. Kemungkinan kode status kesalahan mencakup yang berikut ini.

Mengembalikan kode Deskripsi
STATUS_ACCESS_DENIED Proses telah meminta akses ke objek, tetapi belum diberikan hak akses tersebut.
STATUS_INVALID_HANDLE Nilai ProcessHandle tidak valid ditentukan.
STATUS_OBJECT_TYPE_MISMATCH Ada ketidakcocokan antara jenis objek yang diperlukan oleh operasi yang diminta dan jenis objek yang ditentukan dalam permintaan.

Komentar

Setiap halaman dalam ruang alamat virtual proses berada di salah satu dari tiga status yang dijelaskan sebagai berikut.

  • Status GRATIS

    Halaman tidak diterapkan atau dicadangkan. Halaman tidak dapat diakses oleh proses. Mencoba membaca dari atau menulis ke halaman gratis menghasilkan pengecualian pelanggaran akses.

    Anda dapat menggunakan ZwFreeVirtualMemory untuk menempatkan halaman yang dipesan atau diterapkan ke dalam status bebas.

  • Status adalah RESERVED

    Halaman dicadangkan. Rentang alamat tidak dapat digunakan oleh fungsi alokasi lainnya. Halaman tidak dapat diakses oleh proses dan tidak memiliki penyimpanan fisik yang terkait dengannya. Mencoba membaca dari atau menulis ke halaman yang dipesan menghasilkan pengecualian pelanggaran akses.

    Anda dapat menggunakan ZwFreeVirtualMemory untuk menempatkan halaman memori yang diterapkan ke dalam status cadangan, dan untuk menempatkan halaman memori yang dipesan ke dalam status bebas.

  • Status BERKOMITMEN

    Halaman diterapkan. Penyimpanan fisik dalam memori atau dalam file halaman pada disk dialokasikan untuk halaman, dan akses dikontrol oleh kode perlindungan.

    Sistem menginisialisasi dan memuat setiap halaman yang diterapkan ke dalam memori fisik hanya pada upaya pertama untuk membaca dari atau menulis ke halaman tersebut.

    Ketika proses berakhir, sistem merilis semua penyimpanan untuk halaman yang diterapkan.

    Anda dapat menggunakan ZwAllocateVirtualMemory untuk menempatkan halaman memori yang diterapkan ke dalam status dicadangkan atau gratis.

ZwFreeVirtualMemory dapat melakukan operasi berikut:

  • Nonaktifkan wilayah halaman yang diterapkan atau tidak dikomit. Setelah operasi ini, halaman berada dalam status dicadangkan.
  • Merilis wilayah halaman yang dipesan. Setelah operasi ini, halaman berada dalam status bebas.
  • Menonaktifkan dan merilis wilayah halaman yang diterapkan atau tidak diterapkan. Setelah operasi ini, halaman berada dalam status bebas.

ZwFreeVirtualMemory dapat menonaktifkan berbagai halaman yang berada dalam status yang berbeda, beberapa berkomitmen dan beberapa tidak dikomit. Ini berarti Anda dapat menonaktifkan rentang halaman tanpa terlebih dahulu menentukan status komitmen saat ini dari setiap halaman. Menonaktifkan halaman akan merilis penyimpanan fisiknya, baik dalam memori atau di file halaman pada disk.

Jika halaman dinonaktifkan tetapi tidak dirilis, statusnya berubah menjadi dicadangkan. Anda kemudian dapat memanggil ZwFreeVirtualMemory untuk menerapkannya, atau ZwFreeVirtualMemory untuk merilisnya. Mencoba membaca dari atau menulis ke halaman yang dipesan menghasilkan pengecualian pelanggaran akses.

ZwFreeVirtualMemory dapat merilis berbagai halaman yang berada di berbagai status, beberapa dicadangkan dan beberapa berkomitmen. Ini berarti Anda dapat merilis rentang halaman tanpa terlebih dahulu menentukan status komitmen saat ini dari setiap halaman. Seluruh rentang halaman yang awalnya dicadangkan oleh ZwAllocateVirtualMemory harus dirilis pada saat yang sama.

Jika halaman dirilis, statusnya berubah menjadi gratis, dan tersedia untuk operasi alokasi berikutnya. Setelah memori dirilis atau dinonaktifkan, Anda tidak akan pernah dapat merujuk ke memori lagi. Setiap informasi yang mungkin ada dalam memori itu hilang selamanya. Mencoba membaca dari atau menulis ke halaman gratis menghasilkan pengecualian pelanggaran akses. Jika Anda memerlukan informasi, jangan nonaktifkan atau memori gratis yang berisi informasi tersebut.

Untuk informasi selengkapnya tentang dukungan manajemen memori untuk driver mode kernel, lihat Manajemen Memori untuk Driver Windows.

Nota

Jika panggilan ke fungsi ZwFreeVirtualMemory terjadi dalam mode pengguna, Anda harus menggunakan nama "NtFreeVirtualMemory" alih-alih "ZwFreeVirtualMemory".

Untuk panggilan dari driver mode kernel, NtXxx dan ZwXxx versi rutin Windows Native System Services dapat berperilaku berbeda dalam cara mereka menangani dan menginterpretasikan parameter input. Untuk informasi selengkapnya tentang hubungan antara NtXxx dan versi ZwXxx rutin, lihat Menggunakan Versi Nt dan Zw dari Rutinitas Layanan Sistem Asli.

Persyaratan

Syarat Nilai
klien minimum yang didukung Windows 2000
Platform Target Universal
Header ntifs.h (termasuk Ntifs.h, Fltkernel.h)
Pustaka NtosKrnl.lib
DLL NtosKrnl.exe
IRQL PASSIVE_LEVEL
aturan kepatuhan DDI HwStorPortProhibitedDIs (storport), PowerIrpDDis(wdm)

Lihat juga

ZwAllocateVirtualMemory