FREE_FUNCTION_EX función de devolución de llamada (wdm.h)

La rutina LookasideListFreeEx libera el almacenamiento de una entrada lookaside-list cuando un cliente intenta insertar la entrada en una lista de lookaside llena.

Sintaxis

FREE_FUNCTION_EX FreeFunctionEx;

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

Parámetros

[in] Buffer

Puntero a la entrada lookaside-list que se va a liberar.

[in, out] Lookaside

Puntero a una estructura de LOOKASIDE_LIST_EX que describe la lista de aspecto. Esta estructura se inicializó previamente mediante la rutina ExInitializeLookasideListEx .

Valor devuelto

None

Observaciones

Un controlador que crea una lista de lookaside puede implementar una rutina LookasideListFreeEx para liberar búferes asignados previamente cuando la lista se llena y no puede contener más búferes. Un búfer que no está en uso se almacena como entrada en la lista. Todas las entradas de una lista de aspecto son búferes de un tamaño uniforme, que el controlador especifica cuándo se inicializa la lista.

El controlador proporciona un puntero a una rutina LookasideListFreeEx personalizada como parámetro de entrada en la llamada ExInitializeLookasideListEx que inicializa la lista de lookaside. Si el controlador establece este parámetro en NULL, la lista lookaside usa en su lugar una rutina de desasignación predeterminada.

Un controlador llama a la rutina ExFreeToLookasideListEx para insertar una entrada asignada previamente en una lista de lookaside. Si la lista está completa (es decir, si la lista ya contiene el número máximo de entradas determinada por el sistema), ExFreeToLookasideListEx llama a LookasideListFreeEx para liberar el almacenamiento de la entrada.

La rutina LookasideListFreeEx puede usar el parámetro Lookaside para acceder a los datos de contexto privado que el controlador ha asociado a la lista de lookaside. Para obtener más información, vea el ejemplo de código en ExInitializeLookasideListEx.

Para obtener más información sobre las listas de lookaside, vea Uso de lookaside Listas.

La rutina LookasideListFreeEx se llama en el mismo IRQL que la llamada a ExFreeToLookasideListEx que libera la entrada. Para que una llamada libere una entrada que reside en la memoria paginada, el autor de la llamada debe ejecutar IRQL <= APC_LEVEL. Para una llamada para liberar una entrada que reside en memoria no paginada, el autor de la llamada debe ejecutar IRQL <= DISPATCH_LEVEL.

Ejemplos

Para definir una rutina de devolución de llamada LookasideListFreeEx , primero debe proporcionar una declaración de función que identifique el tipo de rutina de devolución de llamada que está definiendo. Windows proporciona un conjunto de tipos de función de devolución de llamada para controladores. Declarar una función mediante los tipos de función de devolución de llamada ayuda a Análisis de código para controladores, Comprobador de controladores estáticos (SDV) y otras herramientas de comprobación encuentran errores y es un requisito para escribir controladores para el sistema operativo Windows.

Por ejemplo, para definir una rutina de devolución de llamada LookasideListFreeEx denominada MyLookasideListFreeEx, use el tipo FREE_FUNCTION_EX como se muestra en este ejemplo de código:

FREE_FUNCTION_EX MyLookasideListFreeEx;

A continuación, implemente la rutina de devolución de llamada de la siguiente manera:

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

El tipo de función FREE_FUNCTION_EX se define en el archivo de encabezado Wdm.h. Para identificar con más precisión los errores al ejecutar las herramientas de análisis de código, asegúrese de agregar la anotación a la _Use_decl_annotations_ definición de la función. La _Use_decl_annotations_ anotación garantiza que se usen las anotaciones que se aplican al tipo de función FREE_FUNCTION_EX en el archivo de encabezado. Para obtener más información sobre los requisitos de las declaraciones de función, vea Declarar funciones mediante tipos de rol de función para controladores WDM. Para obtener información sobre _Use_decl_annotations_, vea Anotación del comportamiento de la función.

Requisitos

Requisito Value
Plataforma de destino Escritorio
Encabezado wdm.h (incluya Wdm.h, Ntddk.h, Ntifs.h)
IRQL vea la sección Comentarios.

Consulte también

ExFreeToLookasideListEx

ExInitializeLookasideListEx

LOOKASIDE_LIST_EX