IPrintTicketProvider::BindPrinter 方法 (prdrvcom.h)

IPrintTicketProvider::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

    系统将二进制编码 (BLOB - 二进制大型对象) DEVMODEW 结构的专用部分放入打印票证中,将 DEVMODEW 转换为打印票证。

  • PTSHIM_NOSNAPSHOT

    在 DEVMODEW 到打印票证的转换中,系统不会将二进制编码 (DEVMODEW 结构的专用部分的 BLOB) 放入打印票证中。 如果打印票证中完全表示了所有公共和专用 DEVMODEW 成员,请使用此值。

[out] pDevModeFlags

指向 DWORD 类型变量的指针,该变量接收一组位标志,这些标志指示哪些公共 DEVMODEW 成员不应由 DEVMODEW-print 票证或打印票证到 DEVMODEW 中的打印票证填充码处理。 此参数中存在的位标志指示打印机不支持关联的 DEVMODEW 成员或提供程序处理该 DEVMODEW 特征。 例如,如果在 *pDevModeFlags 中设置了DM_MEDIATYPE,则打印机不支持多种媒体类型,或者提供程序负责支持多种媒体类型。 (所有DM_XXX位标志在 wingdi.h 中定义并在 Microsoft Windows SDK.) 默认情况下进行描述,则打印票证填充码处理默认 DEVMODEW 结构的 dmFlags 成员中表示的所有成员。

[out] cNamespaces

指向变量的指针,该变量接收插件中使用的专用命名空间 URI 的数量。 此数字表示 ppNamespaces 指向的数组中的字符串计数。

[out] ppNamespaces

指向接收 BSTR 数组第一个元素地址的变量的指针。 该插件使用命名空间 URI 填充每个数组位置。 有关此参数的详细信息,请参阅以下“备注”部分。

返回值

IPrintTicketProvider::BindPrinter 应返回以下值之一:

返回代码 说明
S_OK 操作成功。
E_VERSION_NOT_SUPPORTED 插件不支持 版本参数中指定的 打印架构版本。

注解

绑定到设备使提供程序能够缓存某些对象,并处理将来在该设备上打印票证或设备功能服务所需的处理。 例如,可以缓存 hPrinter 参数中的打印机句柄。 IPrintTicketProvider::BindPrinter 方法保证只调用一次。

驱动程序负责为 ppNamespaces 参数指向的数组和命名空间 URI 字符串分配内存。 应使用 CoTaskMemAlloc 函数分配数组;命名空间字符串应使用 SysAllocString 函数进行分配。 Windows SDK 文档中介绍了这两个函数。 ppNamespaces 参数指向的数组不需要包含打印架构关键字或打印架构框架的命名空间。

IPrintTicketProvider 对象不必能够多次绑定。 打印票证管理器始终使用不同的 IPrintTicketProvider 对象实例来绑定到不同的设备。 当 IPrintTicketProvider 对象的引用计数为零时,应在成功调用 IPrintTicketProvider ::BindPrinter 时释放所有资源。 请注意,提供程序不应关闭传递给 BindPrinter 调用的句柄。 如果支持多个版本,打印票证管理器可能会为同一设备在不同版本中创建多个提供程序。

要求

要求
Header prdrvcom.h (包括 Prdrvcom.h)

另请参阅

IPrintTicketProvider

IPrintTicketProvider::ConvertDevModeToPrintTicket

IPrintTicketProvider::ConvertPrintTicketToDevMode

IPrintTicketProvider::GetSupportedVersions