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 参数指向的缓冲区的内容是否对指定的查询有效。
有关 Microsoft 保留的转义代码的详细信息,请参阅 DrvEscape。
DrvDrawEscape 对于所有驱动程序都是可选的。
要求
目标平台 | 桌面 |
标头 | winddi.h (包括 Winddi.h) |