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


Функция 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.

Дополнительные сведения о escape-кодах, зарезервированных корпорацией Майкрософт, см. в статье DrvEscape.

DrvDrawEscape является необязательным для всех драйверов.

Требования

   
Целевая платформа Персональный компьютер
Верхняя часть winddi.h (включая Winddi.h)

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

CLIPOBJ

DrvEnableDriver

DrvEscape