Compartir a través de


Función ExAllocatePoolWithTagPriority (wdm.h)

La rutina ExAllocatePoolWithTagPriority asigna memoria de grupo del tipo especificado.

Advertencia

ExAllocatePoolWithTagPriority ha quedado en desuso en Windows 10, versión 2004 y se ha reemplazado por ExAllocatePool3. Para obtener más información, consulte Actualización de llamadas exAllocatePool en desuso a ExAllocatePool2 y ExAllocatePool3.

Sintaxis

PVOID ExAllocatePoolWithTagPriority(
  [in] __drv_strictTypeMatch(__drv_typeCond)POOL_TYPE        PoolType,
  [in] SIZE_T                                                NumberOfBytes,
  [in] ULONG                                                 Tag,
  [in] __drv_strictTypeMatch(__drv_typeExpr)EX_POOL_PRIORITY Priority
);

Parámetros

[in] PoolType

Tipo de memoria del grupo que se va a asignar. Para obtener una descripción de los tipos de memoria del grupo disponibles, consulte POOL_TYPE.

Puede modificar el valor PoolType mediante ORing bit a bit con la marca POOL_RAISE_IF_ALLOCATION_FAILURE. Esta marca hace que se genere una excepción si no se puede satisfacer la solicitud.

Del mismo modo, puede modificar el valor PoolType mediante ORing bit a bit con la marca POOL_COLD_ALLOCATION como una sugerencia al kernel para asignar la memoria de las páginas que probablemente se van a paginar rápidamente. Para reducir la cantidad de memoria del grupo residente tanto como sea posible, no debe hacer referencia a estas asignaciones con frecuencia. La marca POOL_COLD_ALLOCATION solo es aviso y está disponible a partir de Windows XP.

[in] NumberOfBytes

Número de bytes que se van a asignar.

[in] Tag

Etiqueta de grupo que se va a usar para la memoria asignada. Para obtener más información, vea el parámetro Tag de ExAllocatePoolWithTag.

[in] Priority

Prioridad de esta solicitud. Establezca este parámetro en uno de los siguientes EX_POOL_PRIORITY valores de enumeración.

Valor de prioridad Descripción
LowPoolPriority Especifica que el sistema puede producir un error en la solicitud cuando se ejecuta poco en los recursos. Las asignaciones de controladores que pueden recuperarse de un error de asignación usan esta prioridad.
NormalPoolPriority Especifica que el sistema puede producir un error en la solicitud cuando se ejecuta muy poco en los recursos. La mayoría de los controladores deben usar este valor.
HighPoolPriority Especifica que el sistema no debe producir un error en la solicitud, a menos que esté completamente fuera de los recursos. Los controladores solo usan este valor cuando es fundamental que la solicitud se realice correctamente.

La enumeración EX_POOL_PRIORITY define las variantes XxxSpecialPoolOverrun y XxxSpecialPoolUnderrun para especificar cómo se debe asignar la memoria cuando esté habilitado el Comprobador de controladores (o grupo especial). Si el controlador especifica XxxSpecialPoolUnderrun, cuando el administrador de memoria asigna memoria del grupo especial, la asigna al principio de una página física. Si el controlador especifica XxxSpecialPoolOverrun, el administrador de memoria lo asigna al final de una página física.

Valor devuelto

ExAllocatePoolWithTagPriority devuelve NULL si no hay suficiente memoria en el grupo libre para satisfacer la solicitud a menos que se especifique POOL_RAISE_IF_ALLOCATION_FAILURE. De lo contrario, la rutina devuelve un puntero a la memoria asignada.

Comentarios

Los autores de llamadas de ExAllocatePoolWithTagPriority deben ejecutarse en IRQL <= DISPATCH_LEVEL. Un llamador que se ejecuta en DISPATCH_LEVEL debe especificar un valor NonPagedXxx para PoolType. Un llamador que se ejecuta en IRQL <= APC_LEVEL puede especificar cualquier valor de POOL_TYPE , pero también se debe tener en cuenta el IRQL y el entorno para determinar el tipo de página.

Si NumberOfBytes es PAGE_SIZE o superior, se asigna un búfer alineado con páginas. Las asignaciones de memoria de PAGE_SIZE o menos se asignan dentro de una página y no cruzan los límites de la página. Las asignaciones de memoria de menos de PAGE_SIZE no están necesariamente alineadas con páginas, pero están alineadas con límites de 8 bytes en sistemas de 32 bits y en límites de 16 bytes en sistemas de 64 bits.

No establezca NumberOfBytes = 0. Evite las asignaciones de longitud cero porque desperdician el espacio de encabezado del grupo y, en muchos casos, indican un posible problema de validación en el código de llamada. Por este motivo, el Comprobador de controladores marca tales asignaciones como posibles errores.

El sistema establece automáticamente determinados objetos de evento estándar cuando la cantidad de grupo (paginada o no paginada) es alta o baja. Los controladores pueden esperar a que estos eventos ajusten el uso del grupo. Para obtener más información, vea Objetos de eventos estándar.

En una arquitectura de varios procesadores de acceso a memoria no uniforme (NUMA), ExAllocatePoolWithTagPriority intenta asignar memoria local al procesador que llama a ExAllocatePoolWithTagPriority. Si no hay memoria local disponible, ExAllocatePoolWithTagPriority asigna la memoria disponible más cercana.

La memoria que asigna ExAllocatePoolWithTagPriority no está inicializada. Un controlador en modo kernel primero debe cero esta memoria si va a hacer que sea visible para el software en modo de usuario (para evitar la pérdida de contenido potencialmente con privilegios).

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 IRQL <= DISPATCH_LEVEL (consulte la sección Comentarios)
Reglas de cumplimiento de DDI HwStorPortProhibitedDDIs(storport), IrqlExAllocatePool(wdm), IrqlExFree2(wdm), SpNoWait(storport), StorPortStartIo(storport), UnsafeAllocatePool(kmdf), UnsafeAllocatePool(wdm)

Consulte también

ExAllocatePoolWithTag

ExFreePool

POOL_TYPE