IPrintOemUni::EnableDriver 方法 (prcomoem.h)

IPrintOemUni::EnableDriver 方法允许 Unidrv 的呈现插件挂接某些图形 DDI 函数。

语法

HRESULT EnableDriver(
  DWORD          DriverVersion,
  DWORD          cbSize,
  PDRVENABLEDATA pded
);

参数

DriverVersion

调用方提供的接口版本号。 此值由 printoem.h 中的 PRINTER_OEMINTF_VERSION 定义。

cbSize

由 pded 指向的结构的调用方提供的大小(以字节为单位)。

pded

调用方提供的指向 DRVENABLEDATA 结构的指针。

返回值

方法必须返回以下值之一。

返回代码 说明
S_OK 操作成功。
E_FAIL 操作失败

注解

Unidrv 的呈现插件必须实现 IPrintOemUni::EnableDriver 方法。

IPrintOemUni::EnableDriver 方法允许呈现插件执行与打印机图形 DLL 导出的 DrvEnableDriver 函数相同的操作类型。

DrvEnableDriver 函数一样, IPrintOemUni::EnableDriver 方法负责提供内部支持的图形 DDI 函数(称为挂钩函数)的地址。 它还可以执行其他一次性初始化操作。 与 DrvEnableDriver 函数不同, IPrintOemUni::EnableDriver 的实现是可选的。

如果实现 IPrintOemUni::EnableDriver,还必须实现 IPrintOemUni::D isableDriver。 在前一个方法中开始的操作可能需要在后一个方法中完成。 例如,如果在 IPrintOemUni::EnableDriver 中分配了较大的缓冲区,但在 IPrintOemUni::D isableDriver 中未解除分配,则可能发生内存泄漏。

方法应填充提供的 DRVENABLEDATA 结构并分配 DRVFN 结构的数组。 它应使用指向挂钩函数的指针以及用于标识挂钩图形 DDI 函数的 winddi.h 定义的索引值填充数组。

仅当 Unidrv 驱动程序定义该函数时,Unidrv 的呈现插件才能挂出图形 DDI 函数。 下图 DDI 函数在 Unidrv 和/或 Pscript5 中定义,因此可以挂钩:

如果提供自定义挂钩函数,它会抢占驱动程序的等效图形 DDI 函数。 挂钩函数还可以调用回驱动程序的图形 DDI 函数。 有关详细信息,请参阅 自定义图形 DDI 函数

自定义挂钩函数具有与等效图形 DDI 函数相同的输入和输出参数,但有一个例外 - 其中图形 DDI 函数接收 PDEV 指针,自定义挂钩函数接收 DEVOBJ 指针。 图形 DDI 函数可通过两种方式接收 PDEV 指针:

  • 作为目标图面的 SURFOBJ 结构的 dhpdev 成员的内容。 对于等效的自定义挂钩函数,目标 SURFOBJ 结构的 dhpdev 成员指向 DEVOBJ 结构,并且必须在引用时转换为 PDEVOBJ 类型。 一个示例图形 DDI 函数是 DrvBitBlt

  • 作为 dhpdev 参数的输入参数。 当引用 PDEVOBJ 时,等效的自定义挂钩函数必须将此输入参数强制转换为类型 PDEVOBJ。 一个示例图形 DDI 函数是 DrvDitherColor

请注意,虽然 打印机图形 DLL 在 DRVENABLEDATA 结构中包含其 DrvEnablePDEVDrvDisablePDEVDrvResetPDEV 函数的地址,但呈现插件会显式导出 EnablePDEVDisablePDEVResetPDEV 作为 IPrintOemUni 接口的方法,并且不会将其地址放在 DRVENABLEDATA 结构中。

如果 IPrintOemUni::EnableDriver 方法由多个呈现插件导出,则按照为安装指定插件的顺序调用这些方法。

每个图形 DDI 函数只能由一个呈现插件挂钩。 如果多个插件尝试挂接相同的图形 DDI 函数,则忽略第一个插件之后的所有挂钩。

有关创建和安装呈现插件的详细信息,请参阅 自定义 Microsoft 的打印机驱动程序

要求

要求
目标平台 桌面
标头 prcomoem.h (包括 Prcomoem.h)