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


Функция DrvEscape (winddi.h)

Функция DrvEscape используется для получения сведений с устройства, недоступного в интерфейсе драйвера устройства, независимого от устройства; конкретный запрос зависит от значения параметра iEsc .

Синтаксис

ULONG DrvEscape(
  [in]  SURFOBJ *pso,
  [in]  ULONG   iEsc,
  [in]  ULONG   cjIn,
  [in]  PVOID   pvIn,
  [in]  ULONG   cjOut,
  [out] PVOID   pvOut
);

Параметры

[in] pso

Указатель на структуру SURFOBJ , описывающую поверхность, на которую направлен вызов.

[in] iEsc

Задает запрос. Значение других параметров зависит от этого значения. QUERYESCSUPPORT — это единственное предопределенное значение; он запрашивает, поддерживает ли драйвер определенную escape-функцию. В этом случае pvIn указывает на escape-номер функции; CjOut и pvOut игнорируются. Если указанная функция поддерживается, возвращаемое значение не равно нулю.

[in] cjIn

Указывает размер (в байтах) буфера, на который указывает pvIn.

[in] pvIn

Указатель на входные данные для вызова. Формат входных данных зависит от запроса, заданного параметром iEsc .

[in] cjOut

Указывает размер (в байтах) буфера, на который указывает pvOut.

[out] pvOut

Указатель на выходной буфер. Формат выходных данных зависит от запроса, заданного параметром iEsc .

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

Возвращаемое значение зависит от запроса, заданного параметром iEsc . Если функция, указанная в запросе, не поддерживается, возвращаемое значение равно нулю.

Комментарии

Рисование на устройстве запрещено в этой функции. DrvDrawEscape будет использоваться для специализированной поддержки рисования.

GDI передает данные непосредственно из клиентского приложения (возможно, вредоносного) в драйвер. Это означает, что функция DrvEscape должна проверять все входные аргументы. В частности, эта функция должна:

  • Убедитесь, что значение, полученное в параметре iEsc , представляет допустимый запрос.
  • Убедитесь, что размер входного буфера (значение в параметре cjIn ) является допустимым для указанного запроса.
  • Убедитесь, что содержимое буфера, на которое указывает параметр pvIn , является допустимым для указанного запроса.
  • Убедитесь, что размер указанного выходного буфера (значение в параметре cjOut ) является допустимым для указанного запроса.
Корпорация Майкрософт резервирует диапазон 0 для 0X10000 для своих escape-кодов. Сторонние поставщики могут свободно выбирать escape-коды для собственного использования, превышающие этот диапазон. Так как зависящие от драйвера escape-коды могут конфликтовать с кодами, используемыми в других драйверах дисплея, важно, чтобы драйвер дисплея проверял параметры escape-экрана перед обработкой escape-экрана. Один из способов сделать это — проверить размеры входных и выходных блоков, а также параметры входного блока. Для дополнительной безопасности драйверы также должны включать "магическое" значение, которое должно быть задано соответствующим образом в каждом блоке ввода, чтобы гарантировать, что входной блок находится из надежного источника.

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

Требования

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

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

DrvDrawEscape

SURFOBJ