WIA 微型驱动程序故障排除
默认情况下,WIA 服务会将错误记录到 windir% 目录中名为 wiadebug.log% 的文件。 WIA 服务在此文件中放置的信息在驱动程序开发过程中非常有用。 以下示例描述了一个典型问题,并演示如何使用 wiadebug.log 文件中的信息来查找问题的解决方案。
开发人员编写应用程序来测试正在开发的扫描程序驱动程序。 作为其中一项测试,开发人员尝试将扫描仪的每英寸点数 (dpi) 设置为 1200,但注意到此操作会产生错误。 查看 Wiadebug.log 文件会显示以下内容:
wiasGetChangedValueLong, validate prop 6147 failed hr: 0x80070057
wiasUpdateScanRect, CheckXResAndUpdate failed (0x80070057)
CDrvWrap::WIA_drvValidateItemProperties, Error calling driver:
drvValidateItemProperties with hr = 0x80070057 (This is normal if the app wrote an invalid value)
这些日志条目指示驱动程序报告应用程序写入了无效值。 从这些信息中还不清楚确切的问题是什么。 如果开发人员提高 WIA 日志记录级别来报告警告和错误, wiadebug.log 生成如下所示的输出:
wiasValidateItemProperties, invalid LIST value for :
(propID) Horizontal Resolution, value = 1200
Valid values are:
75
100
150
200
300
600
wiasGetChangedValueLong, validate prop 6147 failed hr: 0x80070057
wiasUpdateScanRect, CheckXResAndUpdate failed (0x80070057)
CDrvWrap::WIA_drvValidateItemProperties, Error calling driver:
drvValidateItemProperties with hr = 0x80070057 (This is normal if the app wrote an invalid value)
输出显示“水平分辨率”属性导致失败。 应用程序尝试将分辨率设置为 1200,但支持的分辨率列表不包括 1200。 因此,WIA 服务验证帮助程序 wiasValidateItemProperties 会拒绝设置此值的请求。
确定问题后,由开发人员确定是必须修改的驱动程序还是应用程序。 如果扫描仪的规格允许它支持 100 到 1400 dpi 之间的所有分辨率,则驱动程序应能够处理 1200 dpi 的请求。 如果扫描程序不支持此设置,则应更改应用程序,以便它不会尝试将水平分辨率设置为对此属性无效的值。 在这种情况下,应用程序在尝试将属性设置为此值之前,应检查值有效。
日志记录级别由注册表中的条目控制。 对于 WIA,此密钥驻留在以下位置:
HKLM\System\CurrentControlSet\Control\StillImage\Debug\MODULE_NAME\DebugFlags
在此示例中,MODULE_NAME 是相应二进制模块的名称。 对于 WIA 服务,这是 wiaservc.dll。 DebugFlags 中的值控制日志记录级别。 下表提供了其中三个设置:
值 | 含义 |
---|---|
0x00000001 | 显示错误消息。 |
0x00000002 | 显示警告消息。 |
0x00000004 | 显示跟踪消息。 |
DebugFlags 中的值是一个标志值, (,即不同的设置可以与按位 OR 运算符) 组合。 若要一次性启用错误、警告和跟踪日志记录,请将 DebugFlags 设置为 0x0000007。
为了使 DebugFlags 的值更改生效,必须停止 WIA 服务 (stisvc) ,然后重新启动。 有关详细信息 ,请参阅启动和停止静止图像服务 。
过多的日志记录可能会导致性能显著降低。 仅当尝试解决特定问题时,才应提高日志记录级别。 更正问题后,将日志记录设置为其原始级别。 默认日志记录级别为 1。 不要将日志记录级别提高到 3 以上,否则可能会导致崩溃。