Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Memetakan tampilan pemetaan file ke ruang alamat proses panggilan.
Untuk menentukan alamat dasar yang disarankan untuk tampilan, gunakan fungsi MapViewOfFileEx
Sintaksis
LPVOID MapViewOfFile(
[in] HANDLE hFileMappingObject,
[in] DWORD dwDesiredAccess,
[in] DWORD dwFileOffsetHigh,
[in] DWORD dwFileOffsetLow,
[in] SIZE_T dwNumberOfBytesToMap
);
Parameter
[in] hFileMappingObject
Handel ke objek pemetaan file. Fungsi CreateFileMapping dan OpenFileMapping mengembalikan handel ini.
[in] dwDesiredAccess
Jenis akses ke objek pemetaan file, yang menentukan perlindungan halaman halaman. Parameter ini bisa menjadi salah satu nilai berikut, atau kombinasi bitwise OR dari beberapa nilai jika sesuai.
Dengan menggunakan bitwise OR, Anda dapat menggabungkan nilai di atas dengan nilai-nilai ini.
| Nilai | Arti |
|---|---|
|
Tampilan copy-on-write file dipetakan. Objek pemetaan file harus dibuat dengan perlindungan PAGE_READONLY, PAGE_EXECUTE_READ, PAGE_WRITECOPY, PAGE_EXECUTE_WRITECOPY, PAGE_READWRITE, atau PAGE_EXECUTE_READWRITE.
Ketika proses menulis ke halaman copy-on-write, sistem menyalin halaman asli ke halaman baru yang bersifat privat untuk proses. Halaman baru didukung oleh file halaman. Perlindungan halaman baru berubah dari copy-on-write menjadi baca/tulis. Ketika akses copy-on-write ditentukan, sistem dan biaya penerapan proses yang diambil adalah untuk seluruh tampilan karena proses panggilan berpotensi menulis ke setiap halaman dalam tampilan, membuat semua halaman privat. Konten halaman baru tidak pernah ditulis kembali ke file asli dan hilang saat tampilan tidak dipetakan. |
|
Tampilan file yang dapat dieksekusi dipetakan (memori yang dipetakan dapat dijalankan sebagai kode). Objek pemetaan file harus dibuat dengan perlindungan PAGE_EXECUTE_READ, PAGE_EXECUTE_WRITECOPY, atau PAGE_EXECUTE_READWRITE.
Windows Server 2003 dan Windows XP: Nilai ini tersedia dimulai dengan Windows XP dengan SP2 dan Windows Server 2003 dengan SP1. |
|
Dimulai dengan Windows 10, versi 1703, bendera ini menentukan bahwa tampilan harus dipetakan menggunakan dukungan halaman besar . Ukuran tampilan harus kelipatan ukuran halaman besar yang dilaporkan oleh fungsi GetLargePageMinimum, dan objek pemetaan file harus dibuat menggunakan opsi SEC_LARGE_PAGES. Jika Anda memberikan nilai non-null untuk lpBaseAddress, maka nilainya harus kelipatan GetLargePageMinimum. Catatan: Pada versi OS sebelum Windows 10, versi 1703, bendera FILE_MAP_LARGE_PAGES tidak berpengaruh. Pada rilis ini, tampilan secara otomatis dipetakan menggunakan halaman besar jika bagian dibuat dengan set bendera SEC_LARGE_PAGES. |
|
Mengatur semua lokasi dalam file yang dipetakan sebagai target yang tidak valid untuk Control Flow Guard (CFG). Bendera ini mirip dengan PAGE_TARGETS_INVALID. Gunakan bendera ini dalam kombinasi dengan akses eksekusi tepat FILE_MAP_EXECUTE. Setiap panggilan tidak langsung ke lokasi di halaman tersebut akan gagal pemeriksaan CFG, dan prosesnya akan dihentikan. Perilaku default untuk halaman yang dapat dieksekusi yang dialokasikan adalah ditandai target panggilan yang valid untuk CFG. |
Untuk objek pemetaan file yang dibuat dengan atribut
Untuk informasi selengkapnya tentang akses ke objek pemetaan file, lihat Keamanan Pemetaan File dan Hak Akses.
[in] dwFileOffsetHigh
DWORD
[in] dwFileOffsetLow
DWORD
[in] dwNumberOfBytesToMap
Jumlah byte pemetaan file untuk dipetakan ke tampilan. Semua byte harus dalam ukuran maksimum yang ditentukan oleh CreateFileMapping. Jika parameter ini adalah 0 (nol), pemetaan meluas dari offset yang ditentukan ke akhir pemetaan file.
Mengembalikan nilai
Jika fungsi berhasil, nilai pengembalian adalah alamat awal tampilan yang dipetakan.
Jika fungsi gagal, nilai yang dikembalikan adalah NULL. Untuk mendapatkan informasi kesalahan yang diperluas, panggil GetLastError.
Komentar
Pemetaan file membuat bagian file yang ditentukan terlihat di ruang alamat proses panggilan.
Untuk file yang lebih besar dari ruang alamat, Anda hanya dapat memetakan sebagian kecil data file pada satu waktu. Saat tampilan pertama selesai, Anda dapat membatalkan petanya dan memetakan tampilan baru.
Untuk mendapatkan ukuran tampilan, gunakan fungsi
Beberapa tampilan file (atau objek pemetaan file dan file yang dipetakan) koheren jika berisi data yang identik pada waktu yang ditentukan. Ini terjadi jika tampilan file berasal dari objek pemetaan file apa pun yang didukung oleh file yang sama. Proses dapat menduplikasi handel objek pemetaan file ke proses lain dengan menggunakan fungsi
Dengan satu pengecualian penting, tampilan file yang berasal dari objek pemetaan file apa pun yang didukung oleh file yang sama melekat atau identik pada waktu tertentu. Koherensi dijamin untuk tampilan dalam proses dan untuk tampilan yang dipetakan oleh proses yang berbeda.
Pengecualian terkait dengan file jarak jauh. Meskipun MapViewOfFile bekerja dengan file jarak jauh, itu tidak membuatnya tetap koheren. Misalnya, jika dua komputer memetakan file sebagai dapat ditulis, dan keduanya mengubah halaman yang sama, setiap komputer hanya melihat tulisannya sendiri ke halaman. Ketika data diperbarui pada disk, data tidak digabungkan.
Tampilan file yang dipetakan tidak dijamin koheren dengan file yang sedang diakses oleh ReadFile atau fungsi WriteFile.
Jangan simpan penunjuk dalam file yang dipetakan memori; menyimpan offset dari dasar pemetaan file sehingga pemetaan dapat digunakan di alamat apa pun.
Untuk melindungi dari pengecualian EXCEPTION_IN_PAGE_ERROR, gunakan penanganan pengecualian terstruktur untuk melindungi kode apa pun yang menulis atau membaca dari tampilan file yang dipetakan memori selain file halaman. Untuk informasi selengkapnya, lihat Membaca dan Menulis Dari Tampilan File.
Saat memodifikasi file melalui tampilan yang dipetakan, tanda waktu modifikasi terakhir mungkin tidak diperbarui secara otomatis.
Jika diperlukan, pemanggil harus menggunakan SetFileTime
Jika objek pemetaan file didukung oleh file halaman (
Ketika objek pemetaan file yang didukung oleh file halaman dibuat, pemanggil dapat menentukan apakah MapViewOfFile harus memesan dan menerapkan halaman secara bersamaan (SEC_COMMIT) atau hanya memesan halaman (SEC_RESERVE). Pemetaan file membuat seluruh rentang alamat virtual yang dipetakan tidak tersedia untuk alokasi lain dalam proses. Setelah halaman dari rentang yang dipesan diterapkan, halaman tidak dapat dibebaskan atau dinonaktifkan dengan memanggil VirtualFree. Halaman yang dipesan dan diterapkan dirilis saat tampilan tidak dipetakan dan objek pemetaan file ditutup. Untuk detailnya, lihat fungsi
Untuk memiliki file dengan izin yang dapat dieksekusi, aplikasi harus memanggil
Di Windows Server 2012, fungsi ini didukung oleh teknologi berikut.
| Teknologi | Didukung |
|---|---|
| Protokol Server Message Block (SMB) 3.0 | Ya |
| Failover Transparan (TFO) SMB 3.0 | Ya |
| SMB 3.0 dengan Scale-out File Shares (SO) | Ya |
| Sistem File Volume Bersama Kluster (CsvFS) | Ya |
| Sistem File Tangguh (ReFS) | Ya |
Ketika CsvF dijeda, panggilan ini mungkin gagal dengan kesalahan yang menunjukkan bahwa ada konflik kunci.
Contoh
Misalnya, lihat Membuat Memori Bersama Bernama.
Persyaratan
| Syarat | Nilai |
|---|---|
| klien minimum yang didukung | Windows XP [hanya aplikasi desktop] |
| server minimum yang didukung |
Windows Server 2003 [hanya aplikasi desktop] |
| Platform Target |
Windows |
| Header |
memoryapi.h (termasuk Windows.h, Memoryapi.h) |
| Pustaka |
onecore.lib |
| DLL |
Kernel32.dll |
Lihat juga
Membuat Tampilan File