Compartir a través de


Función ExInitializePagedLookasideList (wdm.h)

La rutina ExInitializePagedLookasideList inicializa una lista de lookaside para las entradas paginables del tamaño especificado.

Sintaxis

void ExInitializePagedLookasideList(
  [out]          PPAGED_LOOKASIDE_LIST Lookaside,
  [in, optional] PALLOCATE_FUNCTION    Allocate,
  [in, optional] PFREE_FUNCTION        Free,
  [in]           ULONG                 Flags,
  [in]           SIZE_T                Size,
  [in]           ULONG                 Tag,
  [in]           USHORT                Depth
);

Parámetros

[out] Lookaside

Puntero a la estructura PAGED_LOOKASIDE_LIST que se va a inicializar. El autor de la llamada debe usar espacio del sistema no paginado para la estructura, aunque las entradas de esta lista de aspecto se asignarán desde la memoria paginable. En las plataformas de 64 bits, esta estructura debe estar alineada con 16 bytes.

[in, optional] Allocate

Puntero a una función proporcionada por el autor de la llamada para asignar una entrada cuando la lista de lookaside está vacía o a NULL. Si no es NULL, el puntero es a una función con el prototipo:

PVOID XxxAllocate(
  __in POOL_TYPE  PoolType,           // PagedPool 
  __in SIZE_T  NumberOfBytes,         // value of Size
  __in ULONG  Tag                     // value of Tag
);

Si el parámetro Allocate es NULL, las llamadas posteriores a ExAllocateFromPagedLookasideList asignan automáticamente entradas cada vez que la lista de lookaside está vacía.

[in, optional] Free

Puntero a una función proporcionada por el autor de la llamada para liberar una entrada cada vez que la lista de lookaside está llena o en NULL. Si no es NULL, el puntero es a una función con el prototipo:

VOID XxxFree(
  __in PVOID  Buffer
);

Si el parámetro Free es NULL, las llamadas posteriores a ExFreeToPagedLookasideList liberan automáticamente la entrada especificada al grupo paginado cada vez que la lista está llena, es decir, que contiene actualmente el número máximo de entradas determinado por el sistema.

[in] Flags

A partir de Windows 8, este parámetro especifica un valor de marca opcional para modificar el comportamiento predeterminado de la rutina ExInitializePagedLookasideList. Los bits de marca compatibles incluyen lo siguiente.

Bit de marca Significado
POOL_RAISE_IF_ALLOCATION_FAILURE Si se produce un error en la asignación, genere una excepción.

Especificar la marca POOL_NX_ALLOCATION no tiene ningún efecto. Toda la memoria paginable se asigna como NX.

Antes de Windows 8, este parámetro no se usa y debe ser cero.

[in] Size

Especifica el tamaño en bytes de cada entrada de la lista de lookaside.

[in] Tag

Especifica la etiqueta de grupo que se va a usar al asignar entradas de lista de lookaside. Para obtener más información sobre las etiquetas de grupo, consulte el parámetro Tag de ExAllocatePoolWithTag.

[in] Depth

Reservado. Debe ser cero.

Valor devuelto

None

Observaciones

Después de llamar a ExInitializePagedLookasideList, los bloques del tamaño especificado por el autor de la llamada se pueden asignar y liberar a la lista de lookaside con llamadas a ExAllocateFromPagedLookasideList y ExFreeToPagedLookasideList, respectivamente. Estas entradas asignadas y liberados dinámicamente pueden ser cualquier estructura de datos o búfer de tamaño fijo que el autor de la llamada use mientras se ejecuta el sistema, especialmente si el autor de la llamada no puede predeterminar cuántas entradas de este tipo se usarán en un momento dado. El diseño y el contenido de cada entrada de tamaño fijo están determinados por el autor de la llamada.

ExInitializePagedLookasideList inicializa el estado del sistema para realizar un seguimiento del uso de la lista de lookaside especificada, como se indica a continuación:

  • Inicializa cero los contadores que se van a mantener para las entradas.

  • Almacena los puntos de entrada de las rutinas XxxAllocate y XxxFree proporcionadas por el autor de la llamada, si las hay, o establece estos puntos de entrada en ExAllocatePoolWithTag y ExFreePool, respectivamente.

  • Inicializa un bloqueo de número del sistema para controlar las asignaciones de y libera a la lista de aspecto de forma segura para varios procesadores si es necesario.

  • Almacena el tamaño y la etiqueta de lista proporcionados por el autor de la llamada.

  • Configura los límites definidos por el sistema (mínimo y máximo) en el número de entradas que se van a mantener en la lista de lookaside, que se pueden ajustar posteriormente si la demanda de entradas para todo el sistema es superior o inferior a la prevista.

  • Configura las marcas determinadas por el sistema, que controlan el tipo de memoria desde la que se asignarán las entradas posteriormente.

El sistema mantiene un conjunto de todas las listas de aspecto en uso. A medida que la demanda de entradas de lista de búsqueda y en la memoria paginada disponible varía mientras se ejecuta el sistema, el sistema ajusta sus límites para el número de entradas que se deben mantener en cada lista de búsqueda paginada dinámicamente.

Los controladores siempre deben usar explícitamente las listas de lookaside que creen antes de descargarse. De lo contrario, es un error de programación grave. Use ExDeletePagedLookasideList para liberar la lista.

ExInitializePagedLookasideList configura el encabezado de lista opaco en la ubicación proporcionada por el autor de la llamada, pero no asigna previamente memoria para las entradas de lista. Posteriormente, las entradas iniciales se asignan dinámicamente a medida que se producen llamadas a ExAllocateFromPagedLookasideList y estas entradas iniciales se mantienen en la lista lookaside como llamadas recíprocas a ExFreeToPagedLookasideList . Las entradas se recopilan en la lista de lookaside dada hasta que se alcanza el máximo determinado por el sistema, donde se devuelven todas las entradas adicionales al grupo paginado a medida que se liberan. Si la lista está vacía, la función XxxAllocate especificada en la inicialización de lista o exAllocatePoolWithTag satisface las solicitudes de asignación.

Es más eficaz pasar punteros NULL para los parámetros Allocate y Free de ExInitializePagedLookasideList siempre que el usuario de una lista de lookaside no haga nada más que asignar y liberar entradas de tamaño fijo. Sin embargo, cualquier componente que use una lista de lookaside puede proporcionar estas funciones para realizar un procesamiento adicional determinado por el autor de la llamada, como el seguimiento de su propio uso de memoria dinámica manteniendo el estado sobre el número de entradas que asigna y libera.

Si el autor de la llamada de ExInitializePagedLookasideList proporciona una función XxxAllocate , esa función debe asignar entradas para la lista de lookaside mediante los parámetros de entrada especificados cuando llama a ExAllocatePoolWithTag.

A partir de Windows Vista, una rutina similar, ExInitializeLookasideListEx, inicializa una lista de aspecto descrita por una estructura de LOOKASIDE_LIST_EX . A diferencia de las rutinas XxxAllocate y XxxFree para una lista de aspecto que usa una estructura de PAGED_LOOKASIDE_LIST , las rutinas de asignación y desasignación de una lista de aspecto que usa la estructura LOOKASIDE_LIST_EX reciben un puntero de contexto como parámetro de entrada. Estas rutinas pueden usar este contexto para almacenar datos privados para la lista de lookaside. Si el controlador está pensado para ejecutarse solo en Windows Vista y versiones posteriores de Windows, considere la posibilidad de usar ExInitializeLookasideListEx en lugar de ExInitializePagedLookasideList. Para obtener más información, consulte Uso de lookaside Listas.

Requisitos

Requisito Value
Plataforma de destino Universal
Encabezado wdm.h (incluya Wdm.h, Ntddk.h, Ntifs.h)
Library NtosKrnl.lib
Archivo DLL NtosKrnl.exe
IRQL <= APC_LEVEL
Reglas de cumplimiento de DDI HwStorPortProhibitedDIs(storport), IrqlExApcLte2(wdm)

Consulte también

ExAllocateFromPagedLookasideList

ExAllocatePoolWithTag

ExDeletePagedLookasideList

ExFreePool

ExFreeToPagedLookasideList

ExInitializeLookasideListEx

ExInitializeNPagedLookasideList

LOOKASIDE_LIST_EX

PAGED_LOOKASIDE_LIST