Fungsi MmLockPagableDataSection (wdm.h)
Rutinitas MmLockPagableDataSection mengunci seluruh bagian data driver ke dalam ruang sistem.
Sintaks
PVOID MmLockPagableDataSection(
[in] PVOID AddressWithinSection
);
Parameter
[in] AddressWithinSection
Menentukan alamat simbolis dari satu item data dalam bagian yang dapat dipakai.
Nilai kembali
MmLockPagableDataSection mengembalikan nilai buram yang mengidentifikasi bagian . Nilai ini harus diteruskan kemudian ke MmLockPagableSectionByHandle atau ke MmUnlockPagableImageSection.
Keterangan
Driver dapat menggunakan rutinitas ini, MmLockPagableSectionByHandle, dan MmUnlockPagableImageSection untuk membuat data pribadi mereka yang biasanya dapat dikunci ke dalam memori.
Data dapat dikunci jika:
Data biasanya diakses di <= APC_LEVEL, tetapi mungkin perlu diakses pada tingkat IRQL yang lebih tinggi untuk waktu yang singkat.
Driver jarang menggunakan data dan dapat diprediksi.
Misalnya, driver untuk perangkat mixer menggunakan bagian data yang dapat di-pageable. Karena driver menggunakan data yang memadai untuk membuat bagian data yang dapat di-pageable dan driver tahu kapan data diperlukan, driver tersebut menggunakan MmLockPagableDataSection, MmLockPagableSectionByHandle dan MmUnlockPagableImageSection untuk membawa bagian data ke ruang sistem saat diperlukan dan membuatnya tersedia untuk di-paged out ketika tidak diperlukan.
Satu panggilan ke MmLockPagableDataSection menyebabkan seluruh bagian, yang berisi data yang direferensikan, dikunci ke dalam ruang sistem.
Ini adalah operasi yang mahal untuk mengunci bagian. Jika bagian pageable-data dikunci di lebih dari satu tempat oleh driver, gunakan MmLockPagableDataSection untuk permintaan pertama. Buat permintaan kunci berikutnya dengan memanggil MmLockPagableSectionByHandle, melewati handel yang dikembalikan oleh MmLockPagableDataSection. Penguncian dengan menangani secara signifikan meningkatkan performa driver. Bagian terkunci tidak terkunci dengan memanggil MmUnlockPagableImageSection.
Manajer memori mempertahankan jumlah referensi pada bagian . Bagian data yang dapat di-pageable hanya tersedia untuk di-page out saat jumlah referensi adalah nol. Setiap permintaan kunci menaikkan jumlah; setiap permintaan pembuka kunci mengurangi hitungan. Driver harus membuka kunci bagian sebanyak mengunci bagian untuk memastikan bahwa bagian seperti itu akan tersedia untuk di-page out ketika bagian tidak diperlukan. Handel selalu valid, tidak peduli berapa hitungannya. Jika jumlah handel adalah nol dan panggilan dilakukan ke MmLockPagableSectionByHandle, jumlah diatur ke satu, dan jika bagian telah di-page out, itu akan di-paged in.
Data di bagian data yang dapat dipertanyakan ditandai dengan direktif pengkompilasi. Untuk membuat bagian data yang dapat di-pageable, gunakan #pragma data_seg ("PAGE"), di awal modul data, dan #pragma data_seg () di akhir modul. HALAMAN kata kunci peka huruf besar/kecil, yaitu, PAGE harus dikapitalisasi.
Perhatikan bahwa ada juga #pragma data_seg("INIT") yang digunakan untuk membuat data dapat dibuang setelah inisialisasi sistem. Kecuali untuk penggunaan INIT daripada PAGE, sintaksnya sama. Namun hasilnya tidak; penggunaan direktif HALAMAN membuat bagian data dapat di-pageable. Ketika arahan INIT digunakan, data di bagian dibuang segera setelah driver kembali dari rutinitas masuk driver atau rutinitas reinisialisasinya jika driver memilikinya.
Untuk informasi selengkapnya tentang data halaman, lihat Membuat Driver Dapat Di-Pageable.
Persyaratan
Persyaratan | Nilai |
---|---|
Klien minimum yang didukung | Tersedia dimulai dengan Windows 2000. |
Target Platform | Universal |
Header | wdm.h (termasuk Wdm.h, Ntddk.h, Ntifs.h) |
Pustaka | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | <=APC_LEVEL |
Aturan kepatuhan DDI | HwStorPortProhibitedDDIs(storport), IrqlMmApcLte(wdm) |