Compartir a través de


Macro EngAllocPrivateUserMem (winddi.h)

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

Sintaxis

void EngAllocPrivateUserMem(
  [in]  psl,
  [in]  cj,
  [in]  tag
);

Parámetros

[in] psl

Puntero a la estructura DD_SURFACE_LOCAL que representa la superficie de Microsoft DirectDraw con la que se va a asociar la memoria asignada.

[in] cj

Especifica el número de bytes de memoria que se van a 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 controlador de DirectDraw puede requerir un "panel temporal" de memoria del usuario en lugar de una memoria de vídeo verdadera. Aunque se desaconseja esta práctica debido a sus implicaciones de rendimiento, en ocasiones es necesario. Normalmente, esta memoria temporal se asigna solo durante un breve período de tiempo. Una vez asignada la memoria, se usa para las operaciones de gráficos deseadas y, a continuación, se desasigna.

Se produce un problema si la instancia del controlador se destruye antes de que se desbloquee la superficie. Un caso concreto se produce cuando el sistema cambia a un escritorio protegido como resultado de que un usuario presione CTRL+ALT+SUPR. En esta situación, el modificador de modo se realiza en un contexto de proceso del sistema. Si el controlador tiene bloqueos de superficie pendientes, como cuando el conmutador de modo se produce antes de que se haya desbloqueado la superficie, el controlador tendrá que destruir esa superficie en un contexto de proceso diferente. El controlador no puede llamar a EngFreeUserMem para desasignar la memoria temporal, ya que se producirá un error en este punto de entrada si se llama en un contexto diferente del usado cuando se asignó la memoria.

EngAllocPrivateUserMem y EngFreePrivateUserMem se proporcionan para solucionar este problema. Estas dos funciones son idénticas a EngAllocUserMem y EngFreeUserMem, salvo que realizan el trabajo adicional necesario para liberar memoria asignada en un contexto de proceso diferente. La información de contexto del proceso se almacena con el objeto DirectDraw que posee el objeto de superficie directDraw al que apunta psl .

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

DD_SURFACE_GLOBAL

DD_SURFACE_LOCAL

EngAllocUserMem

EngFreePrivateUserMem

EngFreeUserMem