Fungsi ZwSetInformationVirtualMemory (ntifs.h)

Rutinitas ZwSetInformationVirtualMemory melakukan operasi pada daftar rentang alamat tertentu di ruang alamat pengguna proses.

Sintaks

NTSYSAPI NTSTATUS ZwSetInformationVirtualMemory(
  [in] HANDLE                           ProcessHandle,
  [in] VIRTUAL_MEMORY_INFORMATION_CLASS VmInformationClass,
  [in] ULONG_PTR                        NumberOfEntries,
  [in] PMEMORY_RANGE_ENTRY              VirtualAddresses,
  [in] PVOID                            VmInformation,
  [in] ULONG                            VmInformationLength
);

Parameter

[in] ProcessHandle

Menentukan handel terbuka untuk proses dalam konteks operasi yang akan dilakukan. Handel ini tidak boleh tidak valid. Gunakan makro NtCurrentProcess , yang ditentukan dalam Ntddk.h, untuk menentukan proses saat ini.

[in] VmInformationClass

Menentukan jenis operasi yang akan dilakukan. Atur ke VmPrefetchInformation yang ditentukan dalam enumerasi VIRTUAL_MEMORY_INFORMATION_CLASS , lihat ntddk.h.

[in] NumberOfEntries

Jumlah entri dalam array yang ditujukkan oleh parameter VirtualAddresses . Parameter ini tidak boleh 0.

[in] VirtualAddresses

Penunjuk ke array struktur MEMORY_RANGE_ENTRY di mana setiap entri menentukan rentang alamat virtual yang akan diproses. Rentang alamat virtual dapat mencakup bagian mana pun dari ruang alamat proses yang dapat diakses oleh proses target.

[in] VmInformation

Penunjuk ke buffer yang berisi informasi memori. Format dan konten buffer bergantung pada kelas informasi yang ditentukan.

Jika VmInformationClass adalah VmPrefetchInformation, parameter ini tidak boleh berupa NULL dan harus menunjuk ke variabel ULONG yang diatur ke 0.

[in] VmInformationLength

Ukuran buffer yang diacu oleh VmInformation.

Jika VmInformationClass adalah VmPrefetchInformation, ini harus sizeof (ULONG).

Nilai kembali

ZwSetInformationVirtualMemory mengembalikan STATUS_SUCCESS pada keberhasilan, atau kode kesalahan NTSTATUS yang sesuai tentang kegagalan.

Keterangan

Rutinitas ZwSetInformationVirtualMemory dipanggil oleh driver yang mengetahui serangkaian alamat yang akan mereka akses. Jika kemungkinan alamat ini tidak lagi berada dalam memori (yaitu telah di-page out ke disk), memanggil rutinitas ini pada rentang alamat tersebut sebelum akses mengurangi latensi keseluruhan karena secara efisien membawa rentang alamat tersebut dari disk menggunakan permintaan I/O bersamaan yang besar jika memungkinkan.

ZwSetInformationVirtualMemory memungkinkan driver untuk memanfaatkan perangkat keras disk secara efisien dengan mengeluarkan I/Os bersamaan yang besar jika memungkinkan ketika driver menyediakan daftar rentang alamat proses yang akan diakses. Bahkan untuk rentang alamat tunggal (misalnya pemetaan file), rutinitas dapat memberikan peningkatan performa dengan mengeluarkan satu I/O besar daripada banyak I/Os yang lebih kecil yang akan dikeluarkan melalui kesalahan halaman.

Driver menyebut rutinitas ini murni untuk pengoptimalan performa: prefetching tidak diperlukan untuk mengakses rentang alamat target. Memori yang diambil sebelumnya tidak ditambahkan ke set kerja proses target; di-cache dalam memori fisik. Ketika rentang alamat yang diambil sebelumnya diakses oleh proses target, rentang tersebut ditambahkan ke set kerja.

Karena panggilan ini tidak diperlukan untuk pengoperasian driver yang benar, itu diperlakukan sebagai petunjuk yang kuat oleh sistem dan tunduk pada batasan memori fisik biasa di mana ia dapat sepenuhnya atau sebagian gagal dalam kondisi memori rendah. Ini juga dapat menciptakan tekanan memori jika dipanggil dengan rentang alamat besar, sehingga aplikasi hanya boleh melakukan prefetch rentang alamat yang benar-benar akan mereka gunakan.

Persyaratan

Persyaratan Nilai
Klien minimum yang didukung Windows 10 versi 1511.
Target Platform Universal
Header ntifs.h (termasuk Ntddk.h)
Pustaka NtosKrnl.lib
DLL NtosKrnl.exe
IRQL PASSIVE_LEVEL
Aturan kepatuhan DDI HwStorPortProhibitedDDIs, PowerIrpDDis