IPrintTicketProvider2::BindPrinter 方法 (prdrvcom.h)
IPrintTicketProvider2::BindPrinter 方法将打印机或打印队列绑定到打印票证架构的特定版本,从而使核心驱动程序能够将一组专用命名空间统一资源标识符(URI)与设备相关联。
语法
HRESULT BindPrinter(
[in] IN HANDLE hPrinter,
[in] IN INT version,
[out] OUT PSHIMOPTS pOptions,
[out] OUT DWORD *pDevModeFlags,
[out] OUT INT *cNamespaces,
[out] OUT BSTR **ppNamespaces
);
参数
[in] hPrinter
后台处理程序的打印句柄,由核心驱动程序提供。 提供程序不应随时关闭此句柄,因为提供程序的客户端负责管理此句柄的生存期。 提供程序可以缓存打印句柄;所有未来的调用都与与此句柄关联的打印机相关。
[in] version
打印票证或打印票证管理器请求 OEM 插件提供程序支持的主要版本号或打印票证架构。 Windows Vista 仅支持版本 1。 提供程序应失败的任何尝试绑定到不支持或识别的版本。
[out] pOptions
指向接收以下枚举值的变量的指针:
PTSHIM_DEFAULT
系统将 DEVMODEW 结构的私有部分的二进制编码(BLOB - 二进制大型对象)放置在打印票证中,将 DEVMODEW 转换为打印票证。
PTSHIM_NOSNAPSHOT
系统不会将 DEVMODEW 结构的私有部分的二进制编码(BLOB)放置在打印票证中,将 DEVMODEW 转换为打印票证。 如果打印票证中完全表示所有公共和私有 DEVMODEW 成员,请使用此值。
[out] pDevModeFlags
指向 DWORD 类型的变量的指针,该变量接收一组位标志,该标志指示哪些公共 DEVMODEW 成员不应由 DEVMODEW 到打印票证或打印票证到 DEVMODEW 转换中的打印票证填充码处理。 此参数中存在的位标志指示打印机不支持关联的 DEVMODEW 成员或提供程序处理 DEVMODEW 特征。 例如,如果在 *pDevModeFlags 中设置了DM_MEDIATYPE,则打印机不支持多个媒体类型,或者提供程序负责支持多个媒体类型。 (所有DM_XXX位标志都在 wingdi.h 中定义,并在 Microsoft Windows SDK 中介绍。默认情况下,打印票证填充码处理在默认 DEVMODEW 结构 dmFlags 中表示的所有成员 成员。
[out] cNamespaces
指向接收插件中使用的专用命名空间 URI 数的变量的指针。 此数字表示 ppNamespaces指向的数组中的字符串计数。
[out] ppNamespaces
指向接收 BSTR 数组第一个元素地址的变量的指针。 插件使用命名空间 URI 填充每个数组位置。 有关此参数的详细信息,请参阅以下“备注”部分。
返回值
IPrintTicketProvider2::BindPrinter 应返回以下值之一:
返回代码 | 描述 |
---|---|
S_OK | 作成功。 |
E_VERSION_NOT_SUPPORTED | 插件不支持在 版本 参数中指定的打印架构的版本。 |
言论
绑定到设备后,提供程序可以缓存某些对象,并处理将来在该设备上打印票证或设备功能服务所需的对象。 例如,可以缓存 hPrinter 参数中的打印机句柄。 IPrintTicketProvider2::BindPrinter 方法保证只调用一次。
驱动程序负责分配 ppNamespaces 参数指向的数组的内存,以及命名空间 URI 字符串。 应使用 CoTaskMemAlloc 函数分配数组;应使用 SysAllocString 函数分配命名空间字符串。 Windows SDK 文档中介绍了这两个函数。 ppNamespaces 参数指向的数组不需要包含打印架构关键字或打印架构框架的命名空间。
IPrintTicketProvider2 对象不必多次绑定。 打印票证管理器始终使用不同的 IPrintTicketProvider2 对象实例来绑定到不同的设备。 当 IPrintTicketProvider2 对象的引用计数为零时,应释放成功调用 IPrintTicketProvider2::BindPrinter 的所有资源。 请注意,提供程序不应关闭传递给 BindPrinter调用的句柄。 如果支持多个版本,打印票证管理器可能会在不同版本中为同一设备创建多个提供程序。
要求
要求 | 价值 |
---|---|
标头 | prdrvcom.h (包括 Prdrvcom.h) |
另请参阅
IPrintTicketProvider2::ConvertDevModeToPrintTicket