Функция DrvDrawEscape (winddi.h)
Функция DrvDrawEscape — это точка входа, которая обслуживает несколько вызовов функций; конкретная функция зависит от значения параметра iEsc .
Синтаксис
ULONG DrvDrawEscape(
[in] SURFOBJ *pso,
[in] ULONG iEsc,
[in] CLIPOBJ *pco,
[in] RECTL *prcl,
[in] ULONG cjIn,
[in] PVOID pvIn
);
Параметры
[in] pso
Указатель на структуру SURFOBJ , которая определяет поверхность, на которую направлен вызов.
[in] iEsc
Указывает операцию для выполнения. Значения остальных параметров зависят от этого параметра. Этот параметр может иметь следующее значение.
Значение | Значение |
---|---|
ESC_PASSTHROUGH | Передает необработанные данные устройства в драйвер устройства. Количество байт необработанных данных обозначается cjIn. На данные указывает pvIn. Возвращаемое значение — это количество байтов, записанных при успешном выполнении функции. В противном случае значение равно нулю и регистрируется код ошибки. |
[in] pco
Указатель на структуру CLIPOBJ , которую можно запросить, чтобы найти область на поверхности, которую вызывающий объект может перезаписать.
[in] prcl
Указатель на структуру RECTL , которая определяет прямоугольник окна на поверхности. Приложению не известно положение окна на поверхности. GDI предоставляет этот прямоугольник и удерживает блокировку, которая гарантирует стабильность прямоугольника в течение всего вызова. Координаты, полученные от приложения, относятся к верхнему левому углу прямоугольника окна.
[in] cjIn
Указывает размер (в байтах) буфера, на который указывает pvIn.
[in] pvIn
Указатель на входные данные для вызова. Формат входных данных зависит от функции, указанной в iEsc.
Возвращаемое значение
Возвращаемое значение зависит от функции, указанной в iEsc. Драйвер должен вернуть 0xFFFFFFFF, если вызывается неподдерживаемая функция.
Комментарии
Эта точка входа отличается от DrvEscape тем, что предоставляется структура CLIPOBJ. Это позволяет драйверу реализовывать собственные функции рисования в оконной среде.
GDI передает данные непосредственно из клиентского приложения (возможно, вредоносного) в драйвер. Это означает, что функция DrvDrawEscape должна проверять все входные аргументы. В частности, эта функция должна:
- Убедитесь, что значение, полученное в параметре iEsc , представляет допустимый запрос.
- Убедитесь, что размер входного буфера (значение в параметре cjIn ) является допустимым для указанного запроса.
- Убедитесь, что содержимое буфера, на которое указывает параметр pvIn , является допустимым для указанного запроса.
Дополнительные сведения о escape-кодах, зарезервированных корпорацией Майкрософт, см. в статье DrvEscape.
DrvDrawEscape является необязательным для всех драйверов.
Требования
Целевая платформа | Персональный компьютер |
Верхняя часть | winddi.h (включая Winddi.h) |