Поделиться через


Макрос 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.

Возвращаемое значение

None

Remarks

Драйверу DirectDraw может потребоваться "снимок" пользовательской памяти вместо реальной видеопамять. Хотя эта практика не рекомендуется из-за ее влияния на производительность, иногда это необходимо. Эта временная память обычно выделяется только в течение короткого периода времени. После выделения памяти она используется для предполагаемых графических операций, а затем освобождается.

Проблема возникает, если экземпляр драйвера уничтожается до разблокировки поверхности. Особый случай происходит, когда система переключается на защищенный рабочий стол в результате нажатия пользователем клавиш CTRL+ALT+DEL. В этом случае переключение режима выполняется в контексте системного процесса. Если драйвер имеет какие-либо незамеченные блокировки поверхности, например при переключении режима до разблокировки поверхности, драйвер должен будет уничтожить ее в другом контексте процесса. Драйвер не может вызвать EngFreeUserMem для освобождения временной памяти, так как эта точка входа завершится ошибкой при вызове в контексте, отличном от используемого при выделении памяти.

Для решения этой проблемы предоставляются EngAllocPrivateUserMem и EngFreePrivateUserMem. Эти две функции идентичны EngAllocUserMem и EngFreeUserMem, за исключением того, что они выполняют дополнительную работу, необходимую для освобождения памяти, выделенной в другом контексте процесса. Сведения о контексте процесса хранятся вместе с объектом DirectDraw, которому принадлежит объект поверхности DirectDraw, на который указывает psl .

Требования

Требование Значение
Минимальная версия клиента Доступно в Windows 2000 и более поздних версиях операционных систем Windows.
Целевая платформа Универсальное
Верхняя часть winddi.h (включая Winddi.h)
Библиотека Win32k.lib
DLL Win32k.sys

См. также раздел

DD_SURFACE_GLOBAL

DD_SURFACE_LOCAL

EngAllocUserMem

EngFreePrivateUserMem

EngFreeUserMem