Fungsi ZwAllocateVirtualMemory (ntifs.h)
ZwAllocateVirtualMemory cadangan rutin, penerapan, atau keduanya, wilayah halaman dalam ruang alamat virtual mode pengguna dari proses tertentu.
Sintaksis
NTSYSAPI NTSTATUS ZwAllocateVirtualMemory(
[in] HANDLE ProcessHandle,
[in, out] PVOID *BaseAddress,
[in] ULONG_PTR ZeroBits,
[in, out] PSIZE_T RegionSize,
[in] ULONG AllocationType,
[in] ULONG Protect
);
Parameter
[in] ProcessHandle
Handel untuk proses yang pemetaannya harus dilakukan. Gunakan makro
[in, out] BaseAddress
Penunjuk ke variabel yang akan menerima alamat dasar wilayah halaman yang dialokasikan. Jika nilai awal parameter ini bukanNULL, wilayah dialokasikan mulai dari alamat virtual yang ditentukan dibulatkan ke bawah ke batas alamat ukuran halaman host berikutnya. Jika nilai awal parameter ini NULL, sistem operasi akan menentukan tempat untuk mengalokasikan wilayah.
[in] ZeroBits
Jumlah bit alamat berurutan tinggi yang harus nol di alamat dasar tampilan bagian. Nilai ini harus kurang dari 21 dan hanya digunakan ketika sistem operasi menentukan tempat untuk mengalokasikan wilayah, seperti ketika BaseAddressNULL.
[in, out] RegionSize
Penunjuk ke variabel yang akan menerima ukuran aktual, dalam byte, dari wilayah halaman yang dialokasikan. Nilai awal parameter ini menentukan ukuran, dalam byte, dari wilayah dan dibulatkan ke batas ukuran halaman host berikutnya. * RegionSize tidak boleh nol pada input.
[in] AllocationType
Bitmask yang berisi bendera yang menentukan jenis alokasi yang akan dilakukan. Tabel berikut ini menjelaskan bendera ini.
Bendera | Arti |
---|---|
MEM_COMMIT | Wilayah halaman yang ditentukan akan diterapkan. Salah satu MEM_COMMIT, MEM_RESET, atau MEM_RESERVE harus diatur. |
MEM_PHYSICAL | Alokasikan memori fisik. Bendera ini hanya untuk digunakan dengan memori Address Windowing Extensions (AWE). Jika MEM_PHYSICAL diatur, MEM_RESERVE juga harus diatur, tidak ada bendera lain yang dapat diatur, dan Lindungi harus diatur ke PAGE_READWRITE. |
MEM_RESERVE | Wilayah halaman yang ditentukan akan dicadangkan. Salah satu MEM_COMMIT, MEM_RESET, atau MEM_RESERVE harus diatur. |
MEM_RESET | Reset status wilayah yang ditentukan sehingga jika halaman berada dalam file halaman, halaman tersebut dibuang dan halaman nol dibawa masuk. Jika halaman dalam memori dan dimodifikasi, halaman ditandai sebagai tidak dimodifikasi sehingga tidak akan ditulis ke file halaman. Isinya tidak nol. Parameter Protect tidak digunakan, tetapi harus diatur ke nilai yang valid. Salah satu MEM_COMMIT, MEM_RESET, atau MEM_RESERVE harus diatur; jika MEM_RESET diatur, tidak ada bendera lain yang dapat diatur. |
MEM_TOP_DOWN | Wilayah yang ditentukan harus dibuat pada alamat virtual tertinggi yang mungkin berdasarkan ZeroBits. |
[in] Protect
Bitmask yang berisi bendera perlindungan halaman yang menentukan perlindungan yang diinginkan untuk wilayah halaman yang diterapkan. Tabel berikut ini menjelaskan bendera ini.
Bendera | Arti |
---|---|
PAGE_NOACCESS | Tidak ada akses ke wilayah halaman yang diterapkan yang diizinkan. Upaya untuk membaca, menulis, atau menjalankan wilayah yang diterapkan mengakibatkan pengecualian pelanggaran akses, yang disebut kesalahan perlindungan umum (GP). |
PAGE_READONLY | Akses baca-saja dan jalankan ke wilayah halaman yang diterapkan diizinkan. Upaya untuk menulis wilayah yang berkomitmen menghasilkan pelanggaran akses. |
PAGE_READWRITE | Membaca, menulis, dan menjalankan akses ke wilayah halaman yang berkomitmen diizinkan. Jika akses tulis ke bagian yang mendasar diizinkan, maka satu salinan halaman dibagikan. Jika tidak, halaman dibagikan baca saja/salin saat menulis. |
PAGE_EXECUTE | Jalankan akses ke wilayah halaman yang diterapkan diizinkan. Upaya untuk membaca atau menulis ke wilayah yang diterapkan menghasilkan pelanggaran akses. |
PAGE_EXECUTE_READ | Jalankan dan baca akses ke wilayah halaman yang berkomitmen diizinkan. Upaya untuk menulis ke wilayah yang diterapkan menghasilkan pelanggaran akses. |
PAGE_EXECUTE_READWRITE | Akses jalankan, baca, dan tulis ke wilayah halaman yang berkomitmen diizinkan. |
PAGE_GUARD | Halaman di wilayah tersebut menjadi halaman penjaga. Setiap upaya untuk membaca dari atau menulis ke halaman penjaga menyebabkan sistem memunculkan pengecualian STATUS_GUARD_PAGE. Halaman penjaga dengan demikian bertindak sebagai alarm akses satu bidikan. Bendera ini adalah pengubah perlindungan halaman, hanya valid saat digunakan dengan salah satu bendera perlindungan halaman selain PAGE_NOACCESS. Ketika upaya akses mengarahkan sistem untuk menonaktifkan status halaman penjaga, perlindungan halaman yang mendasar mengambil alih. Jika pengecualian halaman penjaga terjadi selama layanan sistem, layanan biasanya mengembalikan indikator status kegagalan. |
PAGE_NOCACHE | Wilayah halaman harus dialokasikan sebagai tidak dapat di-cache. PAGE_NOCACHE tidak diperbolehkan untuk bagian. |
PAGE_WRITECOMBINE | Memungkinkan pengkombinasi tulisan, yaitu, menyaring penulisan dari cache ke memori utama, di mana perangkat keras mendukungnya. Bendera ini digunakan terutama untuk memori buffer bingkai sehingga menulis ke baris cache yang sama digabungkan jika memungkinkan sebelum ditulis ke perangkat. Ini dapat sangat mengurangi penulisan di seluruh bus ke (misalnya) memori video. Jika perangkat keras tidak mendukung pengkombinasi tulis, bendera diabaikan. Bendera ini adalah pengubah perlindungan halaman, hanya valid saat digunakan dengan salah satu bendera perlindungan halaman selain PAGE_NOACCESS. |
Mengembalikan nilai
ZwAllocateVirtualMemory mengembalikan kode status STATUS_SUCCESS atau kesalahan. Kemungkinan kode status kesalahan meliputi yang berikut ini:
Komentar
ZwAllocateVirtualMemory dapat melakukan operasi berikut:
Terapkan wilayah halaman yang dicadangkan oleh panggilan sebelumnya ke ZwAllocateVirtualMemory.
Pesan wilayah halaman gratis.
Pesan dan terapkan wilayah halaman gratis.
Driver mode kernel dapat menggunakan ZwAllocateVirtualMemory untuk memesan berbagai alamat virtual yang dapat diakses aplikasi dalam proses yang ditentukan dan kemudian melakukan panggilan tambahan ke ZwAllocateVirtualMemory untuk menerapkan halaman individual dari rentang yang dipesan. Ini memungkinkan proses untuk memesan berbagai ruang alamat virtualnya tanpa mengkonsumsi penyimpanan fisik sampai diperlukan.
Setiap halaman dalam ruang alamat virtual proses berada di salah satu dari tiga status yang dijelaskan dalam tabel berikut.
Negara | Arti |
---|---|
BEBAS | Halaman tidak diterapkan atau dicadangkan dan tidak dapat diakses oleh proses. ZwAllocateVirtualMemory dapat memesan, atau secara bersamaan memesan dan menerapkan, halaman gratis. |
DIPESAN | Rentang alamat tidak dapat digunakan oleh fungsi alokasi lain, tetapi halaman tidak dapat diakses oleh proses dan tidak memiliki penyimpanan fisik yang terkait dengannya. ZwAllocateVirtualMemory dapat menerapkan halaman yang dipesan, tetapi tidak dapat memesannya untuk kedua kalinya. ZwFreeVirtualMemory dapat merilis halaman yang dipesan, menjadikannya halaman gratis. |
BERKOMITMEN | Penyimpanan fisik 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 atau menulis ke halaman tersebut. Ketika proses berakhir, sistem merilis penyimpanan untuk halaman yang diterapkan. ZwAllocateVirtualMemory dapat menerapkan halaman yang sudah dilakukan. Ini berarti Anda dapat menerapkan rentang halaman, terlepas dari apakah halaman tersebut telah diterapkan, dan fungsi tidak akan gagal. ZwFreeVirtualMemory dapat menonaktifkan halaman berkomitmen, merilis penyimpanan halaman, atau secara bersamaan dapat menonaktifkan dan merilis halaman yang diterapkan. |
Memori yang dialokasikan dengan memanggil ZwAllocateVirtualMemory harus dibebaskan dengan memanggil ZwFreeVirtualMemory.
Untuk informasi selengkapnya tentang manajemen memori, 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) |
Pustaka |
NtosKrnl.lib |
DLL |
NtosKrnl.exe |
IRQL | PASSIVE_LEVEL |
aturan kepatuhan DDI |
HwStorPortProhibitedDIs (storport), PowerIrpDDis(wdm), SpNoWait(storport), StorPortStartIo (storport) |
Lihat juga
Menggunakan Versi Nt dan Zw dari Rutinitas Layanan Sistem Asli