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 是唯一预定义的值;它会查询驱动程序是否支持特定的转义函数。 在本例中, pvIn 指向转义函数编号; 将忽略 cjOutpvOut 。 如果支持指定的函数,则返回值为非零值。

[in] cjIn

指定 pvIn 指向的缓冲区的大小(以字节为单位)。

[in] pvIn

指向调用的输入数据的指针。 输入数据的格式取决于 iEsc 参数指定的查询。

[in] cjOut

指定 pvOut 指向的缓冲区的大小(以字节为单位)。

[out] pvOut

指向输出缓冲区的指针。 输出数据的格式取决于 iEsc 参数指定的查询。

返回值

返回值取决于 iEsc 参数指定的查询。 如果不支持查询中指定的函数,则返回值为零。

注解

此函数中不允许在设备上绘图。 DrvDrawEscape 用于专门的绘图支持。

GDI 将数据直接从 (可能恶意) 客户端应用程序传递到驱动程序,这意味着 DrvEscape 函数必须验证所有输入参数。 具体而言,此函数必须:

  • 验证 iEsc 参数中收到的值是否表示有效的查询。
  • 验证输入缓冲区的大小 (cjIn 参数中的值) 是否对指定的查询有效。
  • 验证 pvIn 参数指向的缓冲区的内容是否对指定的查询有效。
  • 验证指定输出缓冲区的大小 (cjOut 参数) 中的值是否对指定的查询有效。
Microsoft 保留范围 0 以0X10000其转义代码。 第三方供应商可以自由选择转义码,供自己在此范围以上使用。 由于特定于驱动程序的转义代码可能与其他显示驱动程序中使用的转义代码冲突,因此显示驱动程序在处理转义之前验证转义参数非常重要。 执行此操作的一种方法是验证输入和输出块大小以及输入块参数。 为了提高安全性,驱动程序还应包含一个“magic”值,必须在每个输入块中正确设置该值,以确保输入块来自受信任的源。

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

要求

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

另请参阅

DrvDrawEscape

SURFOBJ