Auf Englisch lesen

Teilen über


FREE_FUNCTION_EX Rückruffunktion (wdm.h)

Die LookasideListFreeEx Routine gibt den Speicher für einen Lookaside-Listeneintrag frei, wenn ein Client versucht, den Eintrag in eine vollständige Lookaside-Liste einzufügen.

Syntax

C++
FREE_FUNCTION_EX FreeFunctionEx;

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

Parameter

[in] Buffer

Ein Zeiger auf den Lookaside-List-Eintrag, der freigegeben werden soll.

[in, out] Lookaside

Ein Zeiger auf eine LOOKASIDE_LIST_EX Struktur, die die Lookaside-Liste beschreibt. Diese Struktur wurde zuvor von der ExInitializeLookasideListEx Routine initialisiert.

Rückgabewert

Nichts

Bemerkungen

Ein Treiber, der eine Lookaside-Liste erstellt, kann eine LookasideListFreeEx- Routine implementieren, um zuvor zugeordnete Puffer frei zu geben, wenn die Liste voll wird und keine weiteren Puffer enthalten kann. Ein nicht verwendeter Puffer wird als Eintrag in der Liste gespeichert. Alle Einträge in einer Lookaside-Liste sind Puffer einer einheitlichen Größe, die der Treiber angibt, wann die Liste initialisiert wird.

Der Treiber stellt einen Zeiger auf eine benutzerdefinierte LookasideListFreeEx Routine als Eingabeparameter im ExInitializeLookasideListEx Aufruf bereit, der die Lookaside-Liste initialisiert. Wenn der Treiber diesen Parameter auf NULL-festlegt, verwendet die Lookaside-Liste stattdessen eine standardmäßige Deallocation-Routine.

Ein Treiber ruft die ExFreeToLookasideListEx Routine auf, um einen zuvor zugewiesenen Eintrag in eine Lookaside-Liste einzufügen. Wenn die Liste voll ist (d. h., wenn die Liste bereits die vom System festgelegte maximale Anzahl von Einträgen enthält), ExFreeToLookasideListEx aufruft LookasideListFreeEx, um den Speicher für den Eintrag frei zu geben.

Die LookasideListFreeEx Routine kann den Lookaside Parameter verwenden, um auf private Kontextdaten zuzugreifen, die der Treiber der Lookaside-Liste zugeordnet hat. Weitere Informationen finden Sie im Codebeispiel in ExInitializeLookasideListEx.

Weitere Informationen zu Lookaside-Listen finden Sie unter Using Lookaside Lists.

Die LookasideListFreeEx Routine wird an derselben IRQL aufgerufen wie der Aufruf von ExFreeToLookasideListEx, der den Eintrag freigibt. Damit ein Aufruf einen Eintrag freigibt, der sich im ausgelagerten Speicher befindet, muss der Aufrufer IRQL-<= APC_LEVEL ausführen. Damit ein Aufruf einen Eintrag freigibt, der sich im nicht ausseitigen Speicher befindet, muss der Aufrufer IRQL-<= DISPATCH_LEVEL ausführen.

Beispiele

Um eine LookasideListFreeEx- Rückrufroutine zu definieren, müssen Sie zuerst eine Funktionsdeklaration bereitstellen, die den Typ der rückrufroutinen identifiziert, die Sie definieren. Windows stellt eine Reihe von Rückruffunktionstypen für Treiber bereit. Durch das Deklarieren einer Funktion mithilfe der Rückruffunktionstypen können Codeanalyse für Treiber, statische Treiberüberprüfung (SDV) und andere Überprüfungstools Fehler finden, und es ist eine Anforderung zum Schreiben von Treibern für das Windows-Betriebssystem.

Um beispielsweise eine LookasideListFreeEx- Rückrufroutine zu definieren, die MyLookasideListFreeExheißt, verwenden Sie den FREE_FUNCTION_EX Typ, wie in diesem Codebeispiel gezeigt:

C++
FREE_FUNCTION_EX MyLookasideListFreeEx;

Implementieren Sie dann Ihre Rückrufroutine wie folgt:

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

Der FREE_FUNCTION_EX Funktionstyp wird in der Wdm.h-Headerdatei definiert. Um Fehler genauer zu identifizieren, wenn Sie die Codeanalysetools ausführen, müssen Sie der Funktionsdefinition die _Use_decl_annotations_ Anmerkung hinzufügen. Die _Use_decl_annotations_ Anmerkung stellt sicher, dass die Anmerkungen, die auf den FREE_FUNCTION_EX Funktionstyp in der Headerdatei angewendet werden, verwendet werden. Weitere Informationen zu den Anforderungen für Funktionsdeklarationen finden Sie unter Deklarieren von Funktionen mithilfe von Funktionsrollentypen für WDM-Treiber. Informationen zu _Use_decl_annotations_finden Sie unter Annotating Function Behavior.

Anforderungen

Anforderung Wert
Zielplattform- Desktop
Header- wdm.h (include Wdm.h, Ntddk.h, Ntifs.h)
IRQL- Siehe Abschnitt "Hinweise".

Siehe auch

ExFreeToLookasideListEx

ExInitializeLookasideListEx

LOOKASIDE_LIST_EX