Устранение неполадок с мини-накопителем WIA
По умолчанию служба WIA регистрирует ошибки в файле с именем wiadebug.log в каталоге %windir% . Сведения, которые служба WIA помещает в этот файл, могут быть очень полезны во время разработки драйвера. В следующем примере показана типичная проблема и показано, как можно использовать сведения в файле wiadebug.log для поиска решения проблемы.
Разработчик создает приложение для тестирования разрабатываемого драйвера сканера. В качестве одного из тестов разработчик пытается установить для сканера точки на дюйм (точек на дюйм) значение 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)
В выходных данных показано, что сбой вызывается свойством Horizontal Resolution. Приложение пытается задать разрешение 1200, но список поддерживаемых разрешений не включает 1200. Таким образом, вспомогатель проверки службы WIA wiasValidateItemProperties отклоняет запрос на установка этого значения.
Теперь, когда проблема обнаружена, разработчик должен определить, является ли это драйвером или приложением, которое необходимо пересмотреть. Если спецификации сканера позволяют поддерживать все разрешения от 100 до 1400 точек на дюйм, драйвер должен иметь возможность обрабатывать запрос на 1200 точек на дюйм. Если средство проверки не поддерживает этот параметр, приложение следует изменить, чтобы оно не пыталось задать для параметра Горизонтальное разрешение значение, недопустимое для этого свойства. В этом случае приложение должно проверка, что значение является допустимым, прежде чем пытаться присвоить свойству это значение.
Уровень ведения журнала управляется записью в реестре. Для 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), а затем перезапустить. Дополнительные сведения см. в разделе Запуск и остановка службы неподвижных образов .
Чрезмерное ведение журнала может привести к значительному снижению производительности. Уровень ведения журнала следует увеличивать только при попытке решить определенную проблему. Устранив проблему, задайте для ведения журнала исходный уровень. Уровень ведения журнала по умолчанию — один. Не увеличивайте уровень ведения журнала выше трех, так как это может привести к сбою.