Fungsi MapUserPhysicalPages (memoryapi.h)

Peta halaman memori fisik yang dialokasikan sebelumnya pada alamat tertentu di wilayah Address Windowing Extensions (AWE).

Untuk melakukan pemetaan batch dan pembukaan beberapa wilayah, gunakan fungsi MapUserPhysicalPagesScatter .

Windows 64-bit pada sistem berbasis Itanium: Karena perbedaan ukuran halaman, MapUserPhysicalPages tidak didukung untuk aplikasi 32-bit.

Sintaks

BOOL MapUserPhysicalPages(
  [in] PVOID      VirtualAddress,
  [in] ULONG_PTR  NumberOfPages,
  [in] PULONG_PTR PageArray
);

Parameter

[in] VirtualAddress

Penunjuk ke alamat awal wilayah memori yang akan di-remap.

Nilai lpAddress harus berada dalam rentang alamat yang dikembalikan fungsi VirtualAlloc saat wilayah Address Windowing Extensions (AWE) dialokasikan.

[in] NumberOfPages

Ukuran memori fisik dan ruang alamat virtual untuk membuat terjemahan, di halaman.

Rentang alamat virtual bersebelahan dimulai dari lpAddress. Bingkai fisik ditentukan oleh UserPfnArray.

Jumlah total halaman tidak dapat diperluas dari alamat awal di luar akhir rentang yang ditentukan dalam AllocateUserPhysicalPages.

[in] PageArray

Penunjuk ke array nomor bingkai halaman fisik.

Bingkai ini dipetakan oleh argumen lpAddress saat dikembalikan dari fungsi ini. Ukuran memori yang dialokasikan harus setidaknya NumberOfPages kali ukuran jenis data ULONG_PTR.

Jangan coba mengubah buffer ini. Ini berisi data sistem operasi, dan kerusakan bisa menjadi bencana. Informasi dalam buffer tidak berguna untuk aplikasi.

Jika parameter ini ADALAH NULL, rentang alamat yang ditentukan tidak dipetakan. Selain itu, halaman fisik yang ditentukan tidak dibebaskan, dan Anda harus memanggil FreeUserPhysicalPages untuk membebaskannya.

Mengembalikan nilai

Jika fungsi berhasil, nilai yang dikembalikan adalah TRUE.

Jika fungsi gagal, nilai yang dikembalikan adalah FALSE dan tidak ada pemetaan yang dilakukan—parsial atau sebaliknya. Untuk mendapatkan informasi kesalahan yang diperluas, hubungi GetLastError.

Keterangan

Halaman fisik tidak dipetakan tetapi tidak dibebaskan. Anda harus memanggil FreeUserPhysicalPages untuk membebaskan halaman fisik.

Sejumlah halaman memori fisik dapat ditentukan, tetapi memori tidak boleh meluas di luar ruang alamat virtual yang dialokasikan VirtualAlloc . Setiap peta alamat yang ada secara otomatis ditimpa dengan terjemahan baru, dan terjemahan lama tidak dipetakan.

Anda tidak dapat memetakan halaman memori fisik di luar rentang yang ditentukan dalam AllocateUserPhysicalPages. Anda dapat memetakan beberapa wilayah secara bersamaan, tetapi tidak dapat tumpang tindih.

Halaman fisik dapat ditemukan di alamat fisik apa pun, tetapi jangan membuat asumsi tentang kesamaan halaman fisik.

Untuk membatalkan peta rentang alamat saat ini, tentukan NULL sebagai parameter array halaman memori fisik. Setiap halaman yang saat ini dipetakan tidak dipetakan, tetapi tidak dibebaskan. Anda harus memanggil FreeUserPhysicalPages untuk membebaskan halaman fisik.

Dalam lingkungan multiprosem, fungsi ini mempertahankan koherensi buffer terjemahan perangkat keras. Saat kembali dari fungsi ini, semua utas pada semua prosesor dijamin untuk melihat pemetaan yang benar.

Untuk mengkompilasi aplikasi yang menggunakan fungsi ini, tentukan makro _WIN32_WINNT sebagai 0x0500 atau yang lebih baru. Untuk informasi selengkapnya, lihat Menggunakan Header Windows.

Contoh

Misalnya, lihat Contoh AWE.

Persyaratan

Persyaratan Nilai
Klien minimum yang didukung Windows XP [hanya aplikasi desktop]
Server minimum yang didukung Windows Server 2003 [hanya aplikasi desktop]
Target Platform Windows
Header memoryapi.h (termasuk Windows.h, Memoryapi.h)
Pustaka onecore.lib
DLL Kernel32.dll

Lihat juga

Ekstensi Windowing Alamat

AllocateUserPhysicalPages

FreeUserPhysicalPages

MapUserPhysicalPagesScatter

Fungsi Manajemen Memori