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
[in, out] BaseAddress
Penunjuk ke variabel yang akan menerima alamat virtual wilayah halaman yang dibeberkan.
Jika bendera MEM_RELEASE diatur dalam parameter
[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
Jika bendera MEM_DECOMMIT diatur dalam parameter FreeType
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 olehZwAllocateVirtualMemory 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 |
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
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) |