EngAllocPrivateUserMem 宏 (winddi.h)

EngAllocPrivateUserMem 函数从指定进程的地址空间中分配用户内存块,并在分配之前插入调用方提供的标记。

语法

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

参数

[in] psl

指向 DD_SURFACE_LOCAL 结构的指针,该结构表示要与之关联的已分配内存的 Microsoft DirectDraw 图面。

[in] cj

指定要分配的内存字节数。

[in] tag

指定一个 4 字节 池标记 ,该标记唯一标识执行内存分配的驱动程序。 有关池标记的详细信息,请参阅 ExAllocatePoolWithTag

返回值

备注

DirectDraw 驱动程序可能需要用户内存“暂存板”来代替真正的视频内存。 尽管这种做法因其性能影响而不建议这样做,但有时是必要的。 此暂存内存通常仅在短时间内分配。 分配内存后,内存将用于预期的图形操作,然后解除分配。

如果在解锁图面之前销毁驱动程序实例,则会出现问题。 当用户按 Ctrl+ALT+DEL 后,系统切换到受保护的桌面时,会发生一种特殊情况。 在这种情况下,模式切换在系统进程上下文上执行。 如果驱动程序具有任何未完成的图面锁,例如在解锁图面之前发生模式切换,则需要驱动程序销毁其他进程上下文中的该图面。 驱动程序无法调用 EngFreeUserMem 来解除分配暂存内存,因为如果在与分配内存时使用的上下文不同的上下文上调用此入口点,则此入口点将失败。

提供 EngAllocPrivateUserMemEngFreePrivateUserMem 来解决此问题。 这两个函数与 EngAllocUserMemEngFreeUserMem 相同,只是它们执行释放不同进程上下文上分配的内存所需的额外工作。 进程上下文信息与 DirectDraw 对象一起存储,该对象拥有 psl 指向的 DirectDraw surface 对象。

要求

要求
最低受支持的客户端 适用于 Windows 2000 及更高版本的 Windows 操作系统。
目标平台 通用
标头 winddi.h (包括 Winddi.h)
Library Win32k.lib
DLL Win32k.sys

另请参阅

DD_SURFACE_GLOBAL

DD_SURFACE_LOCAL

EngAllocUserMem

EngFreePrivateUserMem

EngFreeUserMem