Bagikan melalui


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

ExAllocatePoolWithTag

ExDeleteNPagedLookasideList

ExFreePool

ExFreeToNPagedLookasideList

ExInitializeLookasideListEx

ExInitializePagedLookasideList

LOOKASIDE_LIST_EX

NPAGED_LOOKASIDE_LIST