添加双向通信
后台处理程序支持应用程序或驱动程序与打印机之间的双向 (“双向”) 通信。 此支持使应用程序或驱动程序能够向打印机发送一个或多个请求,使打印机能够响应这些请求。
双向通信要求
在应用程序或驱动程序可以使用双向通信之前,它必须实现双向通信接口:IBidiSpl COM 接口或以一个至少一个 IBidiRequest 和 IBidiRequestContainer COM 接口一起实现 IBidiSpl2 COM 接口。 此外,以下一项或两项都必须为 true:
SendRecvBidiData 函数在打印提供程序 DLL 中实现。
SendRecvBidiDataFromPort 函数在语言监视服务器 DLL 或端口监视器服务器 DLL 中实现。
若要向打印机发送单个请求,应用程序或打印机驱动程序必须先编写请求,然后调用 IBidiSpl::SendRecv 方法。 若要发送多个请求,应用程序或驱动程序会编写请求列表,然后调用 IBidiSpl::MultiSendRecv 方法。
收到请求后,后台处理程序的客户端部分 (Winspool.drv) 将其传递给服务器端后台处理程序 (spoolsv.exe) 。 服务器端后台处理程序可以位于本地计算机或远程网络打印服务器上。 当服务器端后台处理程序收到请求时,它会分析请求中的数据,并填充 BIDI_REQUEST_CONTAINER 结构的成员。
然后,服务器端后台处理程序调用 SendRecvBidiData 或 SendRecvBidiDataFromPort。 当任一函数返回时,其 ppResData 参数指向一个内存位置,该位置包含包含打印机响应的已填充 BIDI_RESPONSE_CONTAINER 结构的地址。 服务器端后台处理程序将此结构中的数据转换为适合应用程序或驱动程序使用的形式,并将其传递回客户端后台处理程序,最后传回请求的发起方。