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 结构中包含其 DrvEnablePDEV、 DrvDisablePDEV 和 DrvResetPDEV 函数的地址,但呈现插件会显式导出 EnablePDEV、 DisablePDEV 和 ResetPDEV 作为 IPrintOemUni 接口的方法,并且不会将其地址放在 DRVENABLEDATA 结构中。
如果 IPrintOemUni::EnableDriver 方法由多个呈现插件导出,则按照为安装指定插件的顺序调用这些方法。
每个图形 DDI 函数只能由一个呈现插件挂钩。 如果多个插件尝试挂接相同的图形 DDI 函数,则忽略第一个插件之后的所有挂钩。
有关创建和安装呈现插件的详细信息,请参阅 自定义 Microsoft 的打印机驱动程序。
要求
要求 | 值 |
---|---|
目标平台 | 桌面 |
标头 | prcomoem.h (包括 Prcomoem.h) |