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 参数指向的缓冲区的内容是否对指定的查询有效。
设备支持的转义由对 DrvEscape 的调用确定。

有关 Microsoft 保留的转义代码的详细信息,请参阅 DrvEscape

DrvDrawEscape 对于所有驱动程序都是可选的。

要求

   
目标平台 桌面
标头 winddi.h (包括 Winddi.h)

另请参阅

CLIPOBJ

DrvEnableDriver

DrvEscape