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