Freigeben über


FREE_FUNCTION_EX Rückruffunktion (wdm.h)

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

Syntax

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 Suchliste beschreibt. Diese Struktur wurde zuvor von der ExInitializeLookasideListEx-Routine initialisiert.

Rückgabewert

Keine

Bemerkungen

Ein Treiber, der eine Lookaside-Liste erstellt, kann eine LookasideListFreeEx-Routine implementieren, um zuvor zugeordnete Puffer freizusetzen, wenn die Liste voll ist und keine Puffer mehr enthalten kann. Ein Puffer, der nicht verwendet wird, wird als Eintrag in der Liste gespeichert. Alle Einträge in einer Lookaside-Liste sind Puffer einer einheitlichen Größe, die der Treiber angibt, wenn 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 Standardroutine für die Zuordnung.

Ein Treiber ruft die ExFreeToLookasideListEx-Routine auf, um einen zuvor zugeordneten Eintrag in eine Suchliste einzufügen. Wenn die Liste voll ist (d. h. wenn die Liste bereits die vom System festgelegte maximale Anzahl von Einträgen enthält), ruft ExFreeToLookasideListExLookasideListFreeEx auf, 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 Verwenden von Lookaside-Listen.

Die LookasideListFreeEx-Routine wird bei derselben IRQL wie der Aufruf von ExFreeToLookasideListEx aufgerufen, 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 auslagerten Arbeitsspeicher befindet, muss der Aufrufer IRQL <= DISPATCH_LEVEL ausführen.

Beispiele

Um eine LookasideListFreeEx-Rückrufroutine zu definieren, müssen Sie zunächst eine Funktionsdeklaration bereitstellen, die den Typ der Rückrufroutine identifiziert, die Sie definieren. Windows bietet eine Reihe von Rückruffunktionstypen für Treiber. Das Deklarieren einer Funktion mithilfe der Rückruffunktionstypen hilft der Codeanalyse für Treiber, der statischen Treiberüberprüfung (Static Driver Verifier , SDV) und anderen Überprüfungstools, Fehler zu finden, und es ist eine Voraussetzung für das Schreiben von Treibern für das Windows-Betriebssystem.

Um beispielsweise eine LookasideListFreeEx-Rückrufroutine mit dem Namen MyLookasideListFreeExzu definieren, verwenden Sie den typ FREE_FUNCTION_EX, wie in diesem Codebeispiel gezeigt:

FREE_FUNCTION_EX MyLookasideListFreeEx;

Implementieren Sie dann Ihre Rückrufroutine wie folgt:

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

Der FREE_FUNCTION_EX Funktionstyp ist in der Wdm.h-Headerdatei definiert. Um Fehler beim Ausführen der Codeanalysetools genauer zu identifizieren, fügen Sie die _Use_decl_annotations_ Anmerkung ihrer Funktionsdefinition hinzu. Die _Use_decl_annotations_ Anmerkung stellt sicher, dass die Anmerkungen verwendet werden, die auf den FREE_FUNCTION_EX Funktionstyp in der Headerdatei angewendet 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 Verhalten von Funktionen mit Anmerkungen.

Anforderungen

Anforderung Wert
Zielplattform Desktop
Header wdm.h (einschließlich Wdm.h, Ntddk.h, Ntifs.h)
IRQL Weitere Informationen finden Sie im Abschnitt mit den Hinweisen.

Weitere Informationen

ExFreeToLookasideListEx

ExInitializeLookasideListEx

LOOKASIDE_LIST_EX