Compartir a través de


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

El LookasideListFreeEx rutina libera el almacenamiento de una entrada de lista de lookaside 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 búsqueda. Esta estructura se inicializó anteriormente mediante la rutina ExInitializeLookasideListEx.

Valor devuelto

Ninguno

Observaciones

Un controlador que crea una lista de aspecto puede implementar una rutina de 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 búsqueda son búferes de un tamaño uniforme, que el controlador especifica cuando se inicializa la lista.

El controlador proporciona un puntero a una rutina de LookasideListFree Ex personalizada como parámetro de entrada en el ExInitializeLookasideListEx llamada 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 búsqueda. 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 búsqueda, vea Using Lookaside Lists.

La rutina lookasideListFreeEx se llama a la misma 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 que una llamada libere una entrada que resida en memoria no paginada, el autor de la llamada debe ejecutar IRQL <= DISPATCH_LEVEL.

Ejemplos

Para definir un LookasideListFreeEx rutina de devolución de llamada, 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 un LookasideListFreeEx rutina de devolución de llamada denominada MyLookasideListFreeEx, use el tipo FREE_FUNCTION_EX tal 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 mayor precisión los errores al ejecutar las herramientas de análisis de código, asegúrese de agregar la anotación _Use_decl_annotations_ a la definición de función. La anotación _Use_decl_annotations_ 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 Valor
de la plataforma de destino de Escritorio
encabezado de wdm.h (include Wdm.h, Ntddk.h, Ntifs.h)
irQL Consulte la sección Comentarios.

Consulte también

ExFreeToLookasideListEx

ExInitializeLookasideListEx

LOOKASIDE_LIST_EX