Compartir a través de


Macro EngAllocUserMem (winddi.h)

La función EngAllocUserMem asigna un bloque de memoria desde el espacio de direcciones del proceso actual e inserta una etiqueta proporcionada por el autor de la llamada antes de la asignación.

Sintaxis

void EngAllocUserMem(
  [in]  cj,
  [in]  tag
);

Parámetros

[in] cj

Especifica el número de bytes para asignar.

[in] tag

Especifica una etiqueta de grupo de 4 bytes que identifica de forma única el controlador que realiza la asignación de memoria. Para obtener más información sobre las etiquetas de grupo, consulte ExAllocatePoolWithTag.

Valor devuelto

None

Observaciones

Un proceso en un sistema operativo basado en NT tiene 4 GB de espacio de direcciones virtuales. Los 2 GB superiores son memoria del sistema que solo es accesible para subprocesos en modo kernel; este espacio es idéntico en todos los procesos. Los 2 GB inferiores son la memoria de usuario que es accesible tanto para los subprocesos en modo de usuario como para los subprocesos en modo kernel; este espacio es único para su proceso. La memoria asignada por EngAllocUserMem se asigna a partir de los 2 GB únicos de memoria de usuario y, por tanto, solo es accesible cuando se llama al controlador de gráficos en el contexto del subproceso en el que se asignó la memoria. Los controladores gráficos siempre se ejecutan en el contexto del autor de la llamada; es decir, los controladores de gráficos no pueden cambiar los contextos de proceso.

EngAllocUserMem es especialmente útil para un controlador de impresora con mapas de bits grandes que solo usará el proceso actual. En lugar de asignar desde el grupo de sistemas, este controlador puede asignar espacio desde el espacio de direcciones del proceso actual. Los controladores deben tener cuidado con la memoria asignada por EngAllocUserMem, ya que es posible que la aplicación modifique esta memoria. EngAllocUserMem solo se debe usar para asignar fragmentos de memoria relativamente grandes, ya que cada asignación toma al menos 64 KB de espacio de direcciones virtuales. Las estructuras de datos confidenciales nunca se deben asignar mediante esta función. Además, el controlador de impresora no puede pasar la memoria de usuario asignada por esta función a EngWritePrinter .

Cuando la memoria ya no es necesaria, se puede liberar mediante una llamada a la función EngFreeUserMem .

Para asignar memoria de usuario desde el espacio de direcciones de un proceso diferente, use EngAllocPrivateUserMem.

Requisitos

Requisito Value
Cliente mínimo compatible Disponible en Windows 2000 y versiones posteriores de los sistemas operativos Windows.
Plataforma de destino Universal
Encabezado winddi.h (incluya Winddi.h)
Library Win32k.lib
Archivo DLL Win32k.sys

Consulte también

EngAllocPrivateUserMem

EngFreeUserMem