FREE_FUNCTION_EX funzione di callback (wdm.h)

La routine LookasideListFreeEx libera l'archiviazione per una voce lookaside-list quando un client tenta di inserire la voce in un elenco lookaside completo.

Sintassi

FREE_FUNCTION_EX FreeFunctionEx;

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

Parametri

[in] Buffer

Puntatore alla voce lookaside-list che deve essere liberata.

[in, out] Lookaside

Puntatore a una struttura LOOKASIDE_LIST_EX che descrive l'elenco lookaside. Questa struttura è stata inizializzata in precedenza dalla routine ExInitializeLookasideListEx .

Valore restituito

nessuno

Osservazioni

Un driver che crea un elenco lookaside può implementare una routine LookasideListFreeEx per liberare buffer precedentemente allocati quando l'elenco diventa pieno e non può contenere più buffer. Un buffer che non è in uso viene archiviato come voce nell'elenco. Tutte le voci di un elenco lookaside sono buffer di dimensioni uniformi, che il driver specifica quando l'elenco viene inizializzato.

Il driver fornisce un puntatore a una routine LookasideListFreeEx personalizzata come parametro di input nella chiamata ExInitializeLookasideListEx che inizializza l'elenco lookaside. Se il driver imposta questo parametro su NULL, l'elenco lookaside usa invece una routine deallocation predefinita.

Un driver chiama la routine ExFreeToLookasideListEx per inserire una voce allocata in precedenza in un elenco lookaside. Se l'elenco è completo ,ovvero se l'elenco contiene già il numero massimo determinato dal sistema, ExFreeToLookasideListEx chiama LookasideListFreeEx per liberare l'archiviazione per la voce.

La routine LookasideListFreeEx può usare il parametro Lookaside per accedere ai dati del contesto privato associati all'elenco lookaside. Per altre informazioni, vedere l'esempio di codice in ExInitializeLookasideListEx.

Per altre informazioni sugli elenchi lookaside, vedere Uso di Lookaside Elenchi.

La routine LookasideListFreeEx viene chiamata allo stesso IRQL della chiamata a ExFreeToLookasideListEx che libera la voce. Per una chiamata a liberare una voce che risiede nella memoria in pagina, il chiamante deve eseguire IRQL <= APC_LEVEL. Per una chiamata a liberare una voce che risiede nella memoria non in pagina, il chiamante deve eseguire IRQL <= DISPATCH_LEVEL.

Esempio

Per definire una routine di callback LookasideListFreeEx , è prima necessario specificare una dichiarazione di funzione che identifica il tipo di routine di callback che si sta definendo. Windows fornisce un set di tipi di funzione di callback per i driver. La dichiarazione di una funzione usando i tipi di funzione callback consente l'analisi del codice per i driver, il verifica driver statico (SDV) e altri strumenti di verifica trovano errori ed è un requisito per la scrittura di driver per il sistema operativo Windows.

Ad esempio, per definire una routine di callback LookasideListFreeEx denominataMyLookasideListFreeEx, usare il tipo di FREE_FUNCTION_EX come illustrato nell'esempio di codice seguente:

FREE_FUNCTION_EX MyLookasideListFreeEx;

Implementare quindi la routine di callback come indicato di seguito:

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

Il tipo di funzione FREE_FUNCTION_EX è definito nel file di intestazione Wdm.h. Per identificare in modo più accurato gli errori quando si eseguono gli strumenti di analisi del codice, assicurarsi di aggiungere l'annotazione _Use_decl_annotations_ alla definizione della funzione. L'annotazione _Use_decl_annotations_ garantisce che vengano usate le annotazioni applicate al tipo di funzione FREE_FUNCTION_EX nel file di intestazione. Per altre informazioni sui requisiti per le dichiarazioni di funzione, vedere Dichiarazione di funzioni tramite tipi di ruolo per i driver WDM. Per informazioni su _Use_decl_annotations_, vedere Annotazione del comportamento della funzione.

Requisiti

Requisito Valore
Piattaforma di destinazione Desktop
Intestazione wdm.h (include Wdm.h, Ntddk.h, Ntifs.h)
IRQL Vedere La sezione Osservazioni.

Vedi anche

ExFreeToLookasideListEx

ExInitializeLookasideListEx

LOOKASIDE_LIST_EX