Compartir a través de


Solución de problemas de minidriver wia

De forma predeterminada, el servicio WIA registra errores en un archivo denominado wiadebug.log en el % directorio windir%. La información que el servicio WIA coloca en este archivo puede ser muy útil durante el desarrollo del controlador. En el ejemplo siguiente se muestra un problema típico y se muestra cómo se puede usar la información del archivo wiadebug.log para encontrar una solución al problema.

Un desarrollador escribe una aplicación para probar un controlador de escáner que está en desarrollo. Como una de las pruebas, el desarrollador intenta establecer los puntos del escáner por pulgada (ppp) en 1200, pero observa que esta acción produce un error. Un vistazo al archivo Wiadebug.log muestra lo siguiente:

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)

Estas entradas de registro indican que el controlador informa de que la aplicación escribió un valor no válido. No está claro de esta información cuál es el problema exacto. Si el desarrollador aumenta el nivel de registro de WIA para notificar advertencias, así como los errores, wiadebug.log genera una salida similar a la siguiente:

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)

La salida muestra que la propiedad Resolución horizontal está causando el error. La aplicación está intentando establecer la resolución en 1200, pero la lista de resoluciones admitidas no incluye 1200. Por lo tanto, el asistente de validación del servicio WIA wiasValidateItemProperties rechaza la solicitud para establecer este valor.

Ahora que se identifica el problema, el desarrollador debe determinar si es el controlador o la aplicación que se debe revisar. Si las especificaciones del escáner permiten admitir todas las resoluciones entre 100 y 1400 ppp, el controlador debe poder controlar una solicitud de 1200 ppp. Si el analizador no admite esta configuración, se debe cambiar la aplicación para que no intente establecer la resolución horizontal en un valor que no sea válido para esta propiedad. En este caso, la aplicación debe comprobar que un valor es válido antes de intentar establecer una propiedad en este valor.

El nivel de registro se controla mediante una entrada del Registro. Para WIA, esta clave reside en:

HKLM\System\CurrentControlSet\Control\StillImage\Debug\MODULE_NAME\DebugFlags

En este ejemplo, MODULE_NAME es el nombre del módulo binario adecuado. Para el servicio WIA, se wiaservc.dll. El valor de DebugFlags controla el nivel de registro. En la tabla siguiente se proporcionan tres de las opciones de configuración:

Valor Significado
0x00000001 Mostrar mensajes de error.
0x00000002 Mostrar mensajes de advertencia.
0x00000004 Mostrar mensajes de seguimiento.

El valor de DebugFlags es un valor de marca (es decir, una configuración diferente se puede combinar con un operador OR bit a bit). Para activar el registro de errores, advertencias y seguimientos a la vez, establezca DepurarFlags en 0x0000007.

Para que un cambio en el valor de DebugFlags surta efecto, se debe detener y reiniciar el servicio WIA (stisvc). Consulte Inicio y detención del servicio Still Image para obtener más información.

El registro excesivo puede provocar una disminución significativa del rendimiento. Solo debe aumentar el nivel de registro al intentar resolver un problema determinado. Después de corregir el problema, establezca el registro en su nivel original. El nivel de registro predeterminado es uno. No aumente el nivel de registro por encima de tres, ya que esto puede provocar un bloqueo.