FREE_FUNCTION_EX fonction de rappel (wdm.h)
La routine LookasideListFreeEx libère le stockage d’une entrée de liste lookaside lorsqu’un client tente d’insérer l’entrée dans une liste de lookaside complète.
Syntaxe
FREE_FUNCTION_EX FreeFunctionEx;
void FreeFunctionEx(
[in] PVOID Buffer,
[in, out] PLOOKASIDE_LIST_EX Lookaside
)
{...}
Paramètres
[in] Buffer
Pointeur vers l’entrée lookaside-list à libérer.
[in, out] Lookaside
Pointeur vers une structure LOOKASIDE_LIST_EX qui décrit la liste de choix. Cette structure a été précédemment initialisée par la routine ExInitializeLookasideListEx.
Valeur de retour
Aucun
Remarques
Un pilote qui crée une liste lookaside peut implémenter un LookasideListFreeEx routine pour libérer des mémoires tampons précédemment allouées lorsque la liste devient complète et ne peut contenir plus de mémoires tampons. Une mémoire tampon qui n’est pas utilisée est stockée en tant qu’entrée dans la liste. Toutes les entrées d’une liste lookaside sont des mémoires tampons d’une taille uniforme, que le pilote spécifie quand la liste est initialisée.
Le pilote fournit un pointeur vers une routine LookasideListFreeEx personnalisée en tant que paramètre d’entrée dans l'ExInitializeLookasideListEx appel qui initialise la liste lookaside. Si le pilote définit ce paramètre sur NULL, la liste lookaside utilise plutôt une routine de désallocation par défaut.
Un pilote appelle la routine ExFreeToLookasideListEx pour insérer une entrée précédemment allouée dans une liste de choix. Si la liste est complète (autrement dit, si la liste contient déjà le nombre maximal déterminé par le système d’entrées), ExFreeToLookasideListEx appelle LookasideListFreeEx pour libérer le stockage de l’entrée.
La routine LookasideListFreeEx peut utiliser le paramètre Lookaside pour accéder aux données de contexte privé que le pilote a associées à la liste lookaside. Pour plus d’informations, consultez l’exemple de code dans ExInitializeLookasideListEx.
Pour plus d’informations sur les listes lookaside, consultez Using Lookaside Lists.
La routine LookasideListFreeEx est appelée au même IRQL que l’appel à ExFreeToLookasideListEx qui libère l’entrée. Pour qu’un appel libère une entrée qui réside dans la mémoire paginée, l’appelant doit exécuter IRQL <= APC_LEVEL. Pour qu’un appel libère une entrée qui réside dans la mémoire non paginé, l’appelant doit exécuter IRQL <= DISPATCH_LEVEL.
Exemples
Pour définir une routine de rappel LookasideListFreeEx, vous devez d’abord fournir une déclaration de fonction qui identifie le type de routine de rappel que vous définissez. Windows fournit un ensemble de types de fonctions de rappel pour les pilotes. La déclaration d’une fonction à l’aide des types de fonctions de rappel permet d'Analyse du code pour les pilotes, static Driver Verifier (SDV) et d’autres outils de vérification recherchent des erreurs, et il est nécessaire d’écrire des pilotes pour le système d’exploitation Windows.
Par exemple, pour définir une routine de rappel LookasideListFreeEx nommée MyLookasideListFreeEx
, utilisez le type FREE_FUNCTION_EX comme illustré dans cet exemple de code :
FREE_FUNCTION_EX MyLookasideListFreeEx;
Ensuite, implémentez votre routine de rappel comme suit :
_Use_decl_annotations_
VOID
MyLookasideListFreeEx(
PVOID Buffer,
PLOOKASIDE_LIST_EX Lookaside
)
{
// Function body
}
Le type de fonction FREE_FUNCTION_EX est défini dans le fichier d’en-tête Wdm.h. Pour identifier plus précisément les erreurs lorsque vous exécutez les outils d’analyse du code, veillez à ajouter l’annotation _Use_decl_annotations_
à votre définition de fonction. L’annotation _Use_decl_annotations_
garantit que les annotations appliquées au type de fonction FREE_FUNCTION_EX dans le fichier d’en-tête sont utilisées. Pour plus d’informations sur les exigences relatives aux déclarations de fonction, consultez déclaration de fonctions à l’aide de types de rôles de fonction pour les pilotes WDM. Pour plus d’informations sur _Use_decl_annotations_
, consultez annoter le comportement de la fonction.
Exigences
Exigence | Valeur |
---|---|
plateforme cible | Bureau |
d’en-tête | wdm.h (include Wdm.h, Ntddk.h, Ntifs.h) |
IRQL | Voir la section Remarques. |