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 MyLookasideListFreeEx
zu 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. |