Bagikan melalui


Fungsi ZwAllocateVirtualMemory (ntifs.h)

ZwAllocateVirtualMemory rutin mencadangkan, menerapkan, atau keduanya, wilayah halaman dalam ruang alamat virtual mode pengguna dari proses tertentu.

Sintaks

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 di mana pemetaan harus dilakukan. Gunakan makro NtCurrentProcess , yang ditentukan dalam Ntddk.h, untuk menentukan proses saat ini.

[in, out] BaseAddress

Penunjuk ke variabel yang akan menerima alamat dasar wilayah halaman yang dialokasikan. Jika nilai awal parameter ini bukan NULL, wilayah dialokasikan mulai dari alamat virtual yang ditentukan dibulatkan ke batas alamat ukuran halaman host berikutnya. Jika nilai awal parameter ini adalah NULL, sistem operasi akan menentukan di mana 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 di mana mengalokasikan wilayah, seperti ketika BaseAddressADALAH NULL.

[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 Makna
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 di-nol. Parameter Lindungi tidak digunakan, tetapi harus diatur ke nilai yang valid. Salah satu MEM_COMMIT, MEM_RESET, atau MEM_RESERVE harus ditetapkan; 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 Makna
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 diterapkan menghasilkan pelanggaran akses.
PAGE_READWRITE Membaca, menulis, dan menjalankan akses ke wilayah halaman yang diterapkan 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 diterapkan diizinkan. Upaya untuk menulis ke wilayah yang diterapkan menghasilkan pelanggaran akses.
PAGE_EXECUTE_READWRITE Jalankan, baca, dan tulis akses ke wilayah halaman yang diterapkan diizinkan.
PAGE_GUARD Halaman di wilayah menjadi halaman penjaga. Setiap upaya untuk membaca dari atau menulis ke halaman penjaga menyebabkan sistem menaikkan 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 penggabungan tulis, yaitu menyangga 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 penggandaan tulis, bendera akan diabaikan. Bendera ini adalah pengubah perlindungan halaman, hanya valid saat digunakan dengan salah satu bendera perlindungan halaman selain PAGE_NOACCESS.

Nilai kembali

ZwAllocateVirtualMemory mengembalikan kode status STATUS_SUCCESS atau kesalahan. Kemungkinan kode status kesalahan meliputi yang berikut ini:

Keterangan

ZwAllocateVirtualMemory dapat melakukan operasi berikut:

  • Menerapkan 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.

Provinsi Makna
GRATIS 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 diterapkan. Ini berarti Anda dapat melakukan rentang halaman, terlepas dari apakah halaman tersebut telah diterapkan, dan fungsinya tidak akan gagal. ZwFreeVirtualMemory dapat menonaktifkan halaman yang diterapkan, 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.

Catatan

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

Untuk panggilan dari driver mode kernel, versi NtXxx dan ZwXxx dari rutinitas Windows Native System Services dapat berperilaku berbeda dalam cara mereka menangani dan menafsirkan 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)
Pustaka NtosKrnl.lib
DLL NtosKrnl.exe
IRQL PASSIVE_LEVEL
Aturan kepatuhan DDI HwStorPortProhibitedDDIs(storport), PowerIrpDDis(wdm), SpNoWait(storport), StorPortStartIo(storport)

Lihat juga

Menggunakan Versi Nt dan Zw dari Rutinitas Layanan Sistem Asli

ZwFreeVirtualMemory