Fungsi ZwFreeVirtualMemory (ntifs.h)
ZwFreeVirtualMemory merilis rutin, menonaktifkan, atau keduanya, wilayah halaman dalam ruang alamat virtual dari proses yang ditentukan.
Sintaks
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 dikosongkan 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 dibebaskan.
Jika bendera MEM_RELEASE diatur dalam parameter FreeType , BaseAddress harus menjadi alamat dasar yang dikembalikan oleh ZwAllocateVirtualMemory saat wilayah tersebut dicadangkan.
[in, out] RegionSize
Pointer ke variabel yang akan menerima ukuran aktual, dalam byte, dari wilayah halaman yang dikosongkan. Rutinitas membulatkan nilai awal variabel ini hingga batas ukuran halaman host berikutnya dan menulis nilai yang dibulatkan 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 (BaseAddress + RegionSize). Ini berarti, misalnya, bahwa jika wilayah memori dua byte menyimpan batas halaman, kedua halaman akan 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.
- <Ukuran Wilayah adalah nol.
[in] FreeType
Bitmask yang berisi bendera yang menjelaskan jenis operasi gratis yang akan dilakukan ZwFreeVirtualMemory untuk wilayah halaman yang ditentukan. Nilai yang mungkin adalah sebagai berikut:
MEM_DECOMMIT
ZwFreeVirtualMemory akan menonaktifkan wilayah halaman yang ditentukan. Halaman memasuki status terpesan.
ZwFreeVirtualMemory tidak gagal jika Anda mencoba menonaktifkan halaman yang tidak dikomit. Ini berarti Anda dapat menonaktifkan rentang halaman tanpa terlebih dahulu menentukan status komitmennya saat ini.
MEM_RELEASE
ZwFreeVirtualMemory akan merilis wilayah halaman yang ditentukan. Halaman memasuki status bebas.
Jika Anda menentukan bendera ini, variabel yang titik RegionSize harus nol, dan BaseAddress harus menunjuk ke alamat dasar yang dikembalikan oleh ZwAllocateVirtualMemory saat wilayah dicadangkan. ZwFreeVirtualMemory gagal jika salah satu kondisi ini tidak terpenuhi.
Jika ada halaman di wilayah yang saat ini diterapkan, ZwFreeVirtualMemory terlebih dahulu menonaktifkan lalu merilisnya.
ZwFreeVirtualMemory tidak gagal jika Anda mencoba merilis halaman yang berada di status yang berbeda, beberapa dicadangkan dan beberapa berkomitmen. Ini berarti Anda dapat merilis berbagai halaman tanpa terlebih dahulu menentukan status komitmennya saat ini.
Nilai kembali
ZwFreeVirtualMemory mengembalikan kode status STATUS_SUCCESS atau kesalahan. Kemungkinan kode status kesalahan termasuk yang berikut ini.
Menampilkan kode | Deskripsi |
---|---|
STATUS_ACCESS_DENIED | Sebuah proses telah meminta akses ke objek, tetapi belum diberikan hak akses tersebut. |
STATUS_INVALID_HANDLE | Nilai ProcessHandle yang 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. |
Keterangan
Setiap halaman di 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 DICADANGKAN
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.
- Nonaktifkan dan rilis wilayah halaman yang diterapkan atau tidak dikomit. Setelah operasi ini, halaman berada dalam status bebas.
ZwFreeVirtualMemory dapat menonaktifkan rentang halaman yang berada di status yang berbeda, beberapa berkomitmen, dan beberapa yang 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 kosongkan memori yang berisi informasi tersebut.
Untuk informasi selengkapnya tentang dukungan manajemen memori untuk driver mode kernel, lihat Manajemen Memori untuk Driver Windows.
Catatan
Jika panggilan ke fungsi ZwFreeVirtualMemory terjadi dalam mode pengguna, Anda harus menggunakan nama "NtFreeVirtualMemory" alih-alih "ZwFreeVirtualMemory".
Untuk panggilan dari driver mode kernel, versi NtXxx dan ZwXxx dari rutinItas Windows Native System Services dapat berperilaku berbeda dalam cara mereka menangani dan menginterpretasikan parameter input. Untuk informasi selengkapnya tentang hubungan antara versi NtXxx dan ZwXxx dari rutinitas, lihat Menggunakan Versi Nt dan Zw dari Rutinitas Layanan Sistem Asli.
Persyaratan
Persyaratan | Nilai |
---|---|
Klien minimum yang didukung | Windows 2000 |
Target Platform | Universal |
Header | ntifs.h (termasuk Ntifs.h, Fltkernel.h) |
Pustaka | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | PASSIVE_LEVEL |
Aturan kepatuhan DDI | HwStorPortProhibitedDDIs(storport), PowerIrpDDis(wdm) |
Lihat juga
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk