Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
La rutina ExAllocatePool es obsoletay solo se exporta para archivos binarios existentes. Use exAllocatePoolWithTag en su lugar.
ExAllocatePool asigna memoria de grupo del tipo especificado y devuelve un puntero al bloque asignado.
Sintaxis
PVOID ExAllocatePool(
_In_ POOL_TYPE a,
_In_ SIZE_T b
);
Parámetros
a
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 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 es solo aviso y está disponible para Windows XP y versiones posteriores del sistema operativo Windows.
b
Número de bytes que se van a asignar.
Valor devuelto
Ninguno
Observaciones
Esta rutina se usa para la asignación de memoria del grupo general.
Si b (NumberOfBytes) es PAGE_SIZE o superior, se asigna un búfer alineado con páginas. Las asignaciones de memoria de PAGE_SIZE o menos no cruzan los límites de página. Las asignaciones de memoria de menos de PAGE_SIZE no están necesariamente alineadas con páginas, pero se alinean con límites de 8 bytes en sistemas de 32 bits y hasta límites de 16 bytes en sistemas de 64 bits.
Una asignación correcta que solicita NumberOfBytes< PAGE_SIZE del grupo no paginado proporciona al autor de la llamada exactamente el número de bytes solicitados de memoria. Si una solicitud de asignación para NumberOfBytes> PAGE_SIZE se realiza correctamente y numberOfBytes no es un múltiplo exacto de PAGE_SIZE, la última página de la asignación contiene bytes que no forman parte de la asignación del autor de la llamada. Si es posible, el asignador de grupo usa estos bytes. Para evitar daños en los datos que pertenecen a otros componentes del modo kernel, los controladores deben acceder solo a las direcciones de almacenamiento que hayan asignado explícitamente.
Si ExAllocatePool devuelve NULL, el autor de la llamada debe devolver el valor NTSTATUS STATUS_INSUFFICIENT_RESOURCES o retrasar el procesamiento a otro momento dado.
Los autores de llamadas de ExAllocatePool deben ejecutarse en IRQL <= DISPATCH_LEVEL. Un autor de llamada que se ejecuta en DISPATCH_LEVEL debe especificar un valor NonPagedXxx para PoolType. Un autor de llamada 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.
Nota
No establezca NumberOfBytes = 0. Evite las asignaciones de longitud cero porque desperdician 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, comprobador de controladores marcas 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 Standard Event Objects.
Nota
La memoria que exAllocatePool asigna no se inicializa. 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 | Valor |
|---|---|
| cliente mínimo admitido | Obsoleto. Esta rutina solo se exporta para los archivos binarios existentes. Use ExAllocatePoolWithTag en su lugar. |
| de la plataforma de destino de | Universal |
| encabezado de | classpnp.h (include Wdm.h, Ntddk.h, Ntifs.h, Classpnp.h, Smcnt.h) |
| biblioteca de | NtosKrnl.lib |
| DLL de | NtosKrnl.exe |
| irQL | <= DISPATCH_LEVEL (consulte la sección Comentarios) |
| reglas de cumplimiento de DDI | CheckDeviceObjectFlags(wdm), HwStorPortProhibitedDIs(storport), IrqlExAllocatePool(wdm), PowerDownAllocate(wdm), powerUpFail(wdm), SpNoWait(storport), StorPortStartIo(storport), UnsafeAllocatePool(kmdf), UnsafeAllocatePool(wdm) |