FREE_FUNCTION_EX fungsi panggilan balik (wdm.h)

Rutinitas LookasideListFreeEx membebaskan penyimpanan untuk entri lookaside-list saat klien mencoba menyisipkan entri ke dalam daftar lookaside yang penuh.

Sintaks

FREE_FUNCTION_EX FreeFunctionEx;

void FreeFunctionEx(
  [in]      PVOID Buffer,
  [in, out] PLOOKASIDE_LIST_EX Lookaside
)
{...}

Parameter

[in] Buffer

Penunjuk ke entri daftar lookaside yang akan dibebaskan.

[in, out] Lookaside

Penunjuk ke struktur LOOKASIDE_LIST_EX yang menjelaskan daftar lookaside. Struktur ini sebelumnya diinisialisasi oleh rutinitas ExInitializeLookasideListEx .

Nilai kembali

Tidak ada

Keterangan

Driver yang membuat daftar lookaside dapat mengimplementasikan rutinitas LookasideListFreeEx untuk membebaskan buffer yang dialokasikan sebelumnya ketika daftar menjadi penuh dan tidak dapat berisi lebih banyak buffer. Buffer yang tidak digunakan disimpan sebagai entri dalam daftar. Semua entri dalam daftar tampilan adalah buffer dengan ukuran seragam, yang ditentukan driver ketika daftar diinisialisasi.

Driver menyediakan pointer ke rutinitas LookasideListFreeEx kustom sebagai parameter input dalam panggilan ExInitializeLookasideListEx yang menginisialisasi daftar lookaside. Jika driver mengatur parameter ini ke NULL, daftar lookaside menggunakan rutinitas dealokasi default sebagai gantinya.

Driver memanggil rutinitas ExFreeToLookasideListEx untuk menyisipkan entri yang dialokasikan sebelumnya ke dalam daftar lookaside. Jika daftar penuh (yaitu, jika daftar sudah berisi jumlah entri maksimum yang ditentukan sistem), ExFreeToLookasideListEx memanggil LookasideListFreeEx untuk membebaskan penyimpanan untuk entri tersebut.

Rutinitas LookasideListFreeEx dapat menggunakan parameter Lookaside untuk mengakses data konteks privat yang telah dikaitkan driver dengan daftar lookaside. Untuk informasi selengkapnya, lihat contoh kode di ExInitializeLookasideListEx.

Untuk informasi selengkapnya tentang daftar lookaside, lihat Menggunakan lookaside Lists.

Rutinitas LookasideListFreeEx dipanggil pada IRQL yang sama dengan panggilan ke ExFreeToLookasideListEx yang membebaskan entri. Agar panggilan membebaskan entri yang berada dalam memori halaman, pemanggil harus menjalankan IRQL <= APC_LEVEL. Agar panggilan membebaskan entri yang berada dalam memori yang tidak disebarkan, pemanggil harus menjalankan IRQL <= DISPATCH_LEVEL.

Contoh

Untuk menentukan rutinitas panggilan balik LookasideListFreeEx , Anda harus terlebih dahulu memberikan deklarasi fungsi yang mengidentifikasi jenis rutinitas panggilan balik yang Anda tentukan. Windows menyediakan sekumpulan tipe fungsi panggilan balik untuk driver. Mendeklarasikan fungsi menggunakan jenis fungsi panggilan balik membantu Analisis Kode untuk Driver, Pemverifikasi Driver Statis (SDV), dan alat verifikasi lainnya menemukan kesalahan, dan itu adalah persyaratan untuk menulis driver untuk sistem operasi Windows.

Misalnya, untuk menentukan rutinitas panggilan balik LookasideListFreeEx yang diberi nama MyLookasideListFreeEx, gunakan jenis FREE_FUNCTION_EX seperti yang ditunjukkan dalam contoh kode ini:

FREE_FUNCTION_EX MyLookasideListFreeEx;

Kemudian, terapkan rutinitas panggilan balik Anda sebagai berikut:

_Use_decl_annotations_
VOID
  MyLookasideListFreeEx(
    PVOID  Buffer,
    PLOOKASIDE_LIST_EX  Lookaside
    )
  {
      // Function body
  }

Jenis fungsi FREE_FUNCTION_EX didefinisikan dalam file header Wdm.h. Untuk mengidentifikasi kesalahan secara lebih akurat saat Anda menjalankan alat analisis kode, pastikan untuk menambahkan _Use_decl_annotations_ anotasi ke definisi fungsi Anda. Anotasi _Use_decl_annotations_ memastikan bahwa anotasi yang diterapkan ke jenis fungsi FREE_FUNCTION_EX dalam file header digunakan. Untuk informasi selengkapnya tentang persyaratan untuk deklarasi fungsi, lihat Mendeklarasikan Fungsi dengan Menggunakan Jenis Peran Fungsi untuk Driver WDM. Untuk informasi tentang _Use_decl_annotations_, lihat Menganotasi Perilaku Fungsi.

Persyaratan

Persyaratan Nilai
Target Platform Desktop
Header wdm.h (termasuk Wdm.h, Ntddk.h, Ntifs.h)
IRQL Lihat bagian Keterangan.

Lihat juga

ExFreeToLookasideListEx

ExInitializeLookasideListEx

LOOKASIDE_LIST_EX