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