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 |