使用 WSD 挑战程序挑战断开连接的扫描仪

重要

WSD 挑战者功能已弃用,所有与 WSD 质询器相关的文档都将存档到以前的版本文档。

当扫描仪重新联机时,Web服务扫描仪驱动程序可能会请求断开连接的扫描仪重新建立与设备的通信。 为了质询断开连接的扫描程序,驱动程序使用随 Windows Vista 一起提供的 WSD 质询程序 DLL (WSDCHNGR.DLL)。 Windows 图像采集(WIA)服务还使用 WSDCHNGR.DLL 主动监控所有 WSDScan 扫描设备,使驱动程序能够在设备通信故障后响应质询请求。

一类设备的质询由 WSDCHNGRChallengeDeviceClass WSD 质询函数启动。 WIA 驱动程序通常不必直接调用此函数,因为 WIA 服务会为所有 WIA 设备调用它。

由于 WIA 驱动程序在设备断开连接后很快被卸载,因此驱动程序本身无法保持 WSDCHNGR.DLL 保持加载。 因此,驱动程序无法继续监视 WSD,因为这非常具有挑战性,并且在设备重新联机时不能重新连接设备。 相反,使用 WSDScan.sys 内核模式驱动程序安装的 WIA 驱动程序可以利用 WIA 服务来验证设备类,并允许在卸载驱动程序后继续进行监视。

通常,使用WSDScan.sys 的 WIA 驱动程序仅使用以下 WSD 质询函数:

WSDCHNGRInitialize
初始化 WIA 驱动程序客户端所用的 WSD 挑战者接口。 加载驱动程序时调用此函数。

WSDCHNGRShutdown
关闭 WIA 驱动程序客户端使用的 WSD 挑战者接口。 卸载驱动程序时调用此函数。

发生此关闭时,如果设备是 WSDScan 类设备,WIA 服务会在驱动程序卸载并终止其 Web 服务质询接口后继续对设备运行 WSD 质询监视。

WSDCHNGRRegisterDeviceToChallenge
注册需要验证的设备。 在驱动程序遇到任何潜在的通信失败后调用此函数。 可以多次为挑战注册同一设备。 如果成功注册第一个设备,WSDCHNGRRegisterDeviceToChallenge 将返回S_OK。 当调用已注册为待质询设备时,此函数将返回S_FALSE。

以下代码示例演示如何使用这些 WSD 挑战函数来初始化 WSD 挑战器,以及如何在发生潜在通信故障后注册扫描设备以进行挑战。

筛选错误代码的宏示例

质疑可能断开设备的代码示例

实现帮助程序方法的代码示例

有关这些示例中使用的定义和变量的详细信息,请参阅 示例中使用的定义和变量