Résolution des problèmes liés au minidriver WIA
Par défaut, le service WIA consigne les erreurs dans un fichier nommé wiadebug.log dans le % répertoire windir%. Les informations que le service WIA place dans ce fichier peuvent être très utiles lors du développement du pilote. L’exemple suivant illustre un problème classique et montre comment les informations contenues dans le fichier wiadebug.log peuvent être utilisées pour trouver une solution au problème.
Un développeur écrit une application pour tester un pilote de scanneur en cours de développement. Dans l’un des tests, le développeur tente de définir les points par pouce (ppp) du scanneur sur 1200, mais remarque que cette action génère une erreur. Un aperçu du fichier Wiadebug.log montre les éléments suivants :
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)
Ces entrées de journal indiquent que le pilote signale que l’application a écrit une valeur non valide. Il n’est pas clair, d’après ces informations, quel est exactement le problème. Si le développeur augmente le niveau de journalisation WIA pour signaler les avertissements ainsi que les erreurs, wiadebug.log produit une sortie similaire à ce qui suit :
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 sortie indique que la propriété Résolution horizontale est à l’origine de l’échec. L’application tente de définir la résolution sur 1200, mais la liste des résolutions prises en charge n’inclut pas 1200. Par conséquent, l’assistant de validation du service WIA wiasValidateItemProperties rejette la demande de définition de cette valeur.
Maintenant que le problème est identifié, il appartient au développeur de déterminer s’il s’agit du pilote ou de l’application qui doit être révisé. Si les spécifications du scanneur lui permettent de prendre en charge toutes les résolutions comprises entre 100 et 1400 ppp, le pilote doit être en mesure de gérer une demande de 1200 ppp. Si le scanneur ne prend pas en charge ce paramètre, l’application doit être modifiée afin qu’elle ne tente pas de définir la résolution horizontale sur une valeur qui n’est pas valide pour cette propriété. Dans ce cas, l’application doit alors case activée qu’une valeur est valide avant d’essayer de définir une propriété sur cette valeur.
Le niveau de journalisation est contrôlé par une entrée dans le Registre. Pour WIA, cette clé réside dans :
HKLM\System\CurrentControlSet\Control\StillImage\Debug\MODULE_NAME\DebugFlags
Dans cet exemple, MODULE_NAME est le nom du module binaire approprié. Pour le service WIA, il s’agit dewiaservc.dll. La valeur dans DebugFlags contrôle le niveau de journalisation. Trois des paramètres sont indiqués dans le tableau suivant :
Valeur | Signification |
---|---|
0x00000001 | Afficher les messages d’erreur. |
0x00000002 | Affichez des messages d’avertissement. |
0x00000004 | Affichez les messages de trace. |
La valeur dans DebugFlags est une valeur d’indicateur (autrement dit, différents paramètres peuvent être combinés avec un opérateur OR au niveau du bit). Pour activer la journalisation des erreurs, des avertissements et des traces à la fois, définissez DebugFlags sur 0x0000007.
Pour qu’une modification de la valeur de DebugFlags prenne effet, le service WIA (stisvc) doit être arrêté, puis redémarré. Pour plus d’informations, consultez Démarrage et arrêt du service d’images fixes .
Une journalisation excessive peut entraîner une baisse significative des performances. Vous devez augmenter le niveau de journalisation uniquement lorsque vous tentez de résoudre un problème particulier. Une fois que vous avez corrigé le problème, définissez la journalisation sur son niveau d’origine. Le niveau de journalisation par défaut est un. N’augmentez pas le niveau de journalisation au-dessus de trois, car cela peut provoquer un blocage.