Compartir a través de


Macro ExAllocatePoolWithQuota (classpnp.h)

La rutina ExAllocatePoolWithQuota está obsoleta y solo se exporta para archivos binarios de controladores existentes. Use ExAllocatePoolWithQuotaTag en su lugar.

ExAllocatePoolWithQuota asigna memoria del grupo, cargando cuota en el proceso actual.

Sintaxis

PVOID ExAllocatePoolWithQuota(
  _In_ POOL_TYPE a,
  _In_ SIZE_T b
);

Parámetros

a

Especifica el 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 un (PoolType) mediante un or 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 paginan 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 para Windows XP y versiones posteriores del sistema operativo Windows.

b

Especifica el número de bytes para asignar.

Valor devuelto

None

Observaciones

Los controladores de nivel superior llaman a esta rutina que asignan memoria para satisfacer una solicitud en el contexto del proceso que originalmente realizó la solicitud de E/S. Los controladores de nivel inferior llaman a ExAllocatePoolWithTag en su lugar.

Si b (NumberOfBytes) es PAGE_SIZE o superior, se asigna un búfer alineado con páginas. La cuota no se cobra al proceso para las asignaciones de PAGE_SIZE o superior.

Las asignaciones de memoria de menos de PAGE_SIZE se asignan dentro de una página y no cruzan los límites de la página. Las asignaciones de memoria de PAGE_SIZE o menos no están necesariamente alineadas con páginas, pero están alineadas con límites de 8 bytes en sistemas de 32 bits y con límites de 16 bytes en sistemas de 64 bits.

Nota

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.

Nota

La memoria que asigna ExAllocatePoolWithQuota 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).

Los autores de llamadas de ExAllocatePoolWithQuota 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 irQL y el entorno para determinar el tipo de grupo.

Requisitos

Requisito Value
Cliente mínimo compatible Obsoleto. Esta rutina solo se exporta para archivos binarios de controladores existentes. Use ExAllocatePoolWithQuotaTag en su lugar.
Plataforma de destino Universal
Encabezado classpnp.h (include Wdm.h, Ntddk.h, Ntifs.h, Classpnp.h)
Library NtosKrnl.lib
Archivo DLL NtosKrnl.exe
IRQL <= DISPATCH_LEVEL (consulte la sección Comentarios)
Reglas de cumplimiento de DDI HwStorPortProhibitedDDIs(storport), SpNoWait(storport), StorPortStartIo(storport), UnsafeAllocatePool(kmdf)

Consulte también

ExAllocatePoolWithTag

ExAllocatePoolWithQuotaTag

ExFreePool

POOL_TYPE