Fungsi ExInitializeNPagedLookasideList (wdm.h)
Rutinitas ExInitializeNPagedLookasideList menginisialisasi daftar lookaside untuk entri yang tidak disebarkan dari ukuran yang ditentukan.
Sintaks
void ExInitializeNPagedLookasideList(
[out] PNPAGED_LOOKASIDE_LIST Lookaside,
[in, optional] PALLOCATE_FUNCTION Allocate,
[in, optional] PFREE_FUNCTION Free,
[in] ULONG Flags,
[in] SIZE_T Size,
[in] ULONG Tag,
[in] USHORT Depth
);
Parameter
[out] Lookaside
Penunjuk ke struktur NPAGED_LOOKASIDE_LIST untuk diinisialisasi. Pemanggil harus menggunakan ruang sistem yang tidak disebarkan untuk struktur. Pada platform 64-bit, struktur ini harus selaras 16 byte.
[in, optional] Allocate
Penunjuk ke fungsi yang disediakan penelepon untuk mengalokasikan entri saat daftar lookaside kosong, atau ke NULL. Jika non-NULL, penunjuk adalah ke fungsi dengan prototipe:
PVOID XxxAllocate(
__in POOL_TYPE PoolType, // NonPagedPool
__in SIZE_T NumberOfBytes, // value of Size
__in ULONG Tag // value of Tag
);
Jika parameter Alokasikan adalah NULL, panggilan berikutnya ke ExAllocateFromNPagedLookasideList secara otomatis mengalokasikan entri setiap kali daftar lookaside kosong.
[in, optional] Free
Penunjuk ke fungsi yang disediakan penelepon untuk membebaskan entri setiap kali daftar lookaside penuh, atau ke NULL. Jika non-NULL, penunjuk adalah ke fungsi dengan prototipe:
VOID XxxFree(
__in PVOID Buffer
);
Jika parameter Gratisadalah NULL, panggilan berikutnya ke ExFreeToNPagedLookasideList secara otomatis merilis entri yang diberikan kembali ke kumpulan yang tidak disebarkan setiap kali daftar penuh, yaitu, saat ini memegang jumlah entri maksimum yang ditentukan sistem.
[in] Flags
Mulai dari Windows 8, parameter ini menentukan nilai bendera opsional untuk memodifikasi perilaku default rutinitas ExInitializeNPagedLookasideList. Bit bendera yang kompatibel mencakup yang berikut ini.
Bit bendera | Makna | Nilai |
---|---|---|
POOL_RAISE_IF_ALLOCATION_FAILURE | Jika alokasi gagal, ajukan pengecualian. | 16 |
POOL_NX_ALLOCATION | Alokasikan memori yang tidak dapat dieksekusi. | 512 |
Sebelum Windows 8, parameter ini tidak digunakan dan harus nol.
[in] Size
Menentukan ukuran, dalam byte, untuk setiap entri yang tidak dialokasikan kemudian. Parameter ini tidak boleh kurang dari ukuran minimum yang diperlukan, LOOKASIDE_MINIMUM_BLOCK_SIZE, yang ditentukan dalam file header Wdm.h.
[in] Tag
Menentukan tag kumpulan yang akan digunakan saat mengalokasikan entri daftar lookaside. Untuk informasi selengkapnya tentang tag kumpulan, lihat Parameter tagExAllocatePoolWithTag.
[in] Depth
Dicadangkan. Harus nol.
Nilai kembali
Tidak ada
Keterangan
Setelah memanggil ExInitializeNPagedLookasideList, blok memori dari Ukuran yang ditentukan pemanggil dapat dialokasikan dari dan dibebaskan ke daftar lookaside dengan panggilan ke ExAllocateFromNPagedLookasideList dan ExFreeToNPagedLookasideList. Entri yang dialokasikan dan dikosongkan secara dinamis dapat berupa struktur data atau buffer ukuran tetap yang digunakan pemanggil saat sistem berjalan, terutama jika pemanggil tidak dapat menentukan berapa banyak entri tersebut yang akan digunakan pada saat tertentu. Tata letak dan konten setiap entri ukuran tetap ditentukan pemanggil.
ExInitializeNPagedLookasideList menginisialisasi status sistem untuk melacak penggunaan daftar lookaside yang diberikan, sebagai berikut:
Menginisialisasi penghitung yang akan dipertahankan untuk entri.
Menyimpan titik masuk rutin XxxAllocate dan XxxFree yang disediakan pemanggil, jika ada, atau menetapkan titik masuk ini ke ExAllocatePoolWithTag dan ExFreePool.
Menginisialisasi kunci putar sistem untuk mengontrol alokasi dari dan membebaskan ke daftar lookaside dengan cara multiproscessor-aman jika perlu.
Menyimpan entri yang disediakan penelepon Ukuran dan daftar Tag.
Menyiapkan batas yang ditentukan sistem (minimum dan maksimum) pada jumlah entri yang akan ditahan dalam daftar tampilan, yang kemudian dapat disesuaikan jika permintaan seluruh sistem untuk entri lebih tinggi atau lebih rendah dari yang diantisipasi.
Menyiapkan bendera yang ditentukan sistem, yang mengontrol jenis memori tempat entri akan dialokasikan kemudian.
Sistem mempertahankan sekumpulan semua daftar lookaside yang saat ini digunakan. Karena permintaan untuk entri daftar lookaside dan pada memori yang tidak disebarkan yang tersedia bervariasi saat sistem berjalan, sistem menyesuaikan batasnya untuk jumlah entri yang akan ditahan di setiap daftar lookaside yang tidak disebarkan secara dinamis.
Driver harus selalu secara eksplisit membebaskan daftar tampilan apa pun yang mereka buat sebelum membongkar. Untuk melakukan sebaliknya adalah kesalahan pemrograman yang serius. Gunakan ExDeleteNPagedLookasideList untuk membebaskan daftar.
ExInitializeNPagedLookasideList menyiapkan kepala daftar buram di lokasi yang disediakan pemanggil tetapi tidak mengalokasikan memori untuk entri daftar. Selanjutnya, entri awal dialokasikan secara dinamis sebagai panggilan ke ExAllocateFromNPagedLookasideList terjadi, dan entri awal ini disimpan dalam daftar lookaside sebagai panggilan timbal balik ke ExFreeToNPagedLookasideList terjadi. Entri dikumpulkan dalam daftar lookaside yang diberikan sampai maksimum yang ditentukan sistem tercapai, di mana entri tambahan dikembalikan ke kumpulan yang tidak disebarkan saat dikosongkan. Jika daftar menjadi kosong, alokasikan permintaan dipenuhi oleh fungsi Alokasi Xxx yang ditentukan pada inisialisasi daftar atau oleh ExAllocatePoolWithTag.
Lebih efisien untuk meneruskan pointer NULL untuk parameter Alokasi dan GratisexInitializeNPagedLookasideList setiap kali pengguna daftar lookaside tidak lebih dari mengalokasikan dan merilis entri ukuran tetap. Namun, komponen apa pun yang menggunakan daftar tampilan mungkin menyediakan fungsi-fungsi ini untuk melakukan pemrosesan tambahan yang ditentukan pemanggil, seperti melacak penggunaan memori dinamisnya sendiri dengan mempertahankan status tentang jumlah entri yang dialokasikan dan gratis.
Jika pemanggil ExInitializeNPagedLookasideList memasok fungsi Alokasi Xxx, rutinitas tersebut harus mengalokasikan entri untuk daftar lookaside menggunakan parameter input yang diberikan saat memanggil ExAllocatePoolWithTag.
Dimulai dengan Windows Vista, rutinitas serupa, ExInitializeLookasideListEx, menginisialisasi daftar lookaside yang dijelaskan oleh struktur LOOKASIDE_LIST_EX . Tidak seperti rutinitas XxxAllocate dan XxxFree untuk daftar lookaside yang menggunakan struktur NPAGED_LOOKASIDE_LIST , rutinitas alokasi dan dealokasi untuk daftar lookaside yang menggunakan struktur LOOKASIDE_LIST_EX menerima pointer konteks sebagai parameter input. Rutinitas ini dapat menggunakan konteks ini untuk menyimpan data privat untuk daftar pencarian. Jika driver Anda hanya dimaksudkan untuk berjalan di Windows Vista dan versi Windows yang lebih baru, pertimbangkan untuk menggunakan ExInitializeLookasideListEx alih-alih ExInitializeNPagedLookasideList. Untuk informasi selengkapnya, lihat Menggunakan Lists Lookaside.
Penelepon ExInitializeNPagedLookasideList dapat berjalan di IRQL <= DISPATCH_LEVEL, tetapi biasanya berjalan di IRQL = PASSIVE_LEVEL.
Persyaratan
Persyaratan | Nilai |
---|---|
Target Platform | Universal |
Header | wdm.h (termasuk Wdm.h, Ntddk.h, Ntifs.h) |
Pustaka | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | IRQL <= DISPATCH_LEVEL (lihat bagian Keterangan) |
Lihat juga
ExAllocateFromNPagedLookasideList