Función ExAllocatePoolZero (wdm.h)
Precaución
Microsoft es consciente de un problema con ExAllocatePoolZero que puede provocar que una asignación no se cero en Windows 10, versión 1909. Este problema se ha corregido en una actualización de seguridad del WDK para Windows 10, versión 2004 y Enterprise WDK (EWDK) para Windows 10, versión 2004 el 16 de diciembre de 2020. Para obtener información sobre cómo descargar el WDK más reciente, consulta Descargar el Kit de controladores de Windows (WDK).
Esta rutina es un contenedor para y una opción de reemplazo recomendada para ExAllocatePoolWithTag.
ExAllocatePoolZero asigna memoria de grupo del tipo especificado y devuelve un puntero al bloque asignado. Es idéntico a ExAllocatePoolWithTag , excepto que cero inicializa la memoria asignada.
Sintaxis
PVOID ExAllocatePoolZero(
__drv_strictTypeMatch(__drv_typeExpr)POOL_TYPE PoolType,
SIZE_T NumberOfBytes,
ULONG Tag
);
Parámetros
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 de enumeración realizando una operación OR bit a bit con la marca POOL_RAISE_IF_ALLOCATION_FAILURE definida en wdm.h
. Esta marca hace que se genere una excepción si no se puede satisfacer la solicitud. No se recomienda el uso de esta marca porque es costoso.
Del mismo modo, puede modificar el valor PoolType mediante ORing bit a bit con la marca POOL_COLD_ALLOCATION (también definida en wdm.h
) 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 de POOL_COLD_ALLOCATION solo es aviso.
NumberOfBytes
Número de bytes que se van a asignar.
Tag
Etiqueta de grupo que se va a usar para la memoria asignada. Especifique la etiqueta de grupo como un literal de carácter distinto de cero de uno a cuatro caracteres delimitado por comillas simples (por ejemplo, Tag1
). Normalmente, la cadena se especifica en orden inverso (por ejemplo, 1gaT
). Cada carácter ASCII de la etiqueta debe ser un valor del intervalo 0x20 (espacio) para 0x7E (tilde). Cada ruta de acceso de código de asignación debe usar una etiqueta de grupo única para ayudar a los depuradores y comprobadores a identificar la ruta de acceso del código.
Valor devuelto
ExAllocatePoolZero devuelve NULL si no hay memoria suficiente en el grupo libre para satisfacer la solicitud. De lo contrario, la rutina devuelve un puntero a la memoria asignada.
Comentarios
Esta rutina se usa para la asignación de memoria del grupo general.
Para ejecutarse en versiones de Windows anteriores a Windows 10 versión 2004, el controlador debe definir POOL_ZERO_DOWN_LEVEL_SUPPORT y llamar a ExInitializeDriverRuntime antes de llamar a esta función.
La única diferencia entre esta función y ExAllocatePoolWithTag es que la memoria es cero inicializada. Si no se desea, use ExAllocatePoolUninitialized en su lugar, que es un contenedor para ExAllocatePoolWithTag.
Un controlador solo debe tener acceso a la memoria dentro del intervalo de bytes que asigna. El acceso a la memoria fuera de este intervalo puede dañar el grupo y provocar que el sistema se bloquee.
Consulte la sección Comentarios de ExAllocatePoolWithTag para obtener instrucciones adicionales.
Requisitos
Requisito | Value |
---|---|
Cliente mínimo compatible | Requiere WDK para Windows 10, versión 2004. Tiene como destino Windows 7 y versiones posteriores del sistema operativo Windows. |
Plataforma de destino | Universal |
Encabezado | wdm.h (incluya Wdm.h, Ntddk.h, Ntifs.h) |
Library | NtosKrnl.lib |
IRQL | IRQL <= DISPATCH_LEVEL (consulte la sección Comentarios) |
Reglas de cumplimiento de DDI | CheckDeviceObjectFlags, HwStorPortProhibitedDIs, IrqlExAllocatePool, IrqlExFree1, PowerDownAllocate, PowerUpFail, SpNoWait, StorPortStartIo |