Bagikan melalui


Membuat Driver Dapat Dipaginasi

Secara default, linker menetapkan nama seperti ".text" dan ".data" ke bagian kode dan data dari file gambar driver. Ketika driver dimuatkan, manajer I/O membuat bagian ini menjadi non-halaman. Bagian nonpaged selalu terletak di memori.

Pengembang driver memiliki opsi untuk membuat bagian yang ditunjuk dari driver dapat di-pageable sehingga Windows dapat memindahkan bagian-bagian ini ke file halaman saat tidak digunakan. Untuk membuat kode atau bagian data bisa dipindahkan ke memori sekunder, pengembang driver menetapkan nama yang dimulai dengan "PAGE" pada bagian tersebut. Manajer I/O memeriksa nama bagian saat memuat driver. Jika nama bagian dimulai dengan "PAGE", manajer I/O membuat bagian dapat di-pageable.

Kode yang berjalan di IRQL >= DISPATCH_LEVEL harus bersifat residen memori. Artinya, kode ini harus berada di segmen yang tidak dapat dipindahkan, atau di segmen yang dapat dipindahkan yang dikunci dalam memori. Jika kode yang berjalan di IRQL >= DISPATCH_LEVEL menyebabkan kesalahan halaman, pemeriksaan kesalahan (bug check) terjadi. Driver dapat menggunakan makro PAGED_CODE untuk memverifikasi bahwa fungsi yang dapat di-pageable hanya dipanggil pada IRQL yang sesuai.

Jika bagian kode atau data bersifat pageable, driver dapat mengunci bagian tersebut dalam memori dengan memanggil rutinitas MmLockPagableCodeSection atau MmLockPagableDataSection. Bagian tetap terkunci sampai driver memanggil rutinitas MmUnlockPagableImageSection untuk membuka kuncinya. Saat bagian yang dapat dipaginasikan dikunci, bagian tersebut berfungsi sama dengan bagian yang tidak dipaginasikan.

Untuk informasi tentang cara menetapkan nama ke bagian kode dan data, lihat MmLockPagableCodeSection dan MmLockPagableDataSection.

Bagian ini mencakup topik berikut:

Kapan Kode dan Data Harus Dapat Di-pageable?

Membuat Kode Driver atau Data Dapat Di-Pageable