Problembehandlung für WIA-Minidriver

Standardmäßig protokolliert der WIA-Dienst Fehler in einer Datei mit dem Namen wiadebug.log im % Verzeichnis windir%. Die Informationen, die der WIA-Dienst in dieser Datei speichert, können während der Treiberentwicklung sehr hilfreich sein. Das folgende Beispiel zeigt ein typisches Problem und zeigt, wie die Informationen in der wiadebug.log-Datei verwendet werden können, um eine Lösung für das Problem zu finden.

Ein Entwickler schreibt eine Anwendung, um einen Scannertreiber zu testen, der sich in der Entwicklung befindet. Als einer der Tests versucht der Entwickler, die Punkte pro Zoll (dpi) des Scanners auf 1200 festzulegen, bemerkt jedoch, dass diese Aktion einen Fehler erzeugt. Ein Blick auf die Wiadebug.log-Datei zeigt Folgendes:

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)

Diese Protokolleinträge geben an, dass der Treiber meldet, dass die Anwendung einen ungültigen Wert geschrieben hat. Aus diesen Informationen ist nicht ersichtlich, was das genaue Problem ist. Wenn der Entwickler die WIA-Protokollierungsebene erhöht, um Warnungen und Fehler zu melden, erzeugt wiadebug.log eine Ausgabe ähnlich der folgenden:

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)

Die Ausgabe zeigt, dass die Horizontale Auflösungseigenschaft den Fehler verursacht. Die Anwendung versucht, die Auflösung auf 1200 festzulegen, aber die Liste der unterstützten Lösungen enthält nicht 1200. Daher lehnt das WIA-Dienstüberprüfungshilfsprogramm wiasValidateItemProperties die Anforderung zum Festlegen dieses Werts ab.

Nachdem das Problem erkannt wurde, muss der Entwickler entscheiden, ob es sich um den Treiber oder die Anwendung handelt, die überarbeitet werden muss. Wenn die Spezifikationen des Scanners erlauben, alle Auflösungen zwischen 100 und 1400 dpi zu unterstützen, sollte der Treiber in der Lage sein, eine Anforderung für 1200 dpi zu verarbeiten. Wenn der Scanner diese Einstellung nicht unterstützt, sollte die Anwendung geändert werden, damit sie nicht versucht, die horizontale Auflösung auf einen Wert festzulegen, der für diese Eigenschaft ungültig ist. In diesem Fall sollte die Anwendung dann überprüfen, ob ein Wert gültig ist, bevor sie versucht, eine Eigenschaft auf diesen Wert festzulegen.

Die Protokollierungsebene wird durch einen Eintrag in der Registrierung gesteuert. Für WIA befindet sich dieser Schlüssel in:

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

In diesem Beispiel ist MODULE_NAME der Name des entsprechenden Binärmoduls. Für den WIA-Dienst ist dies wiaservc.dll. Der Wert in DebugFlags steuert die Protokollierungsebene. Drei der Einstellungen sind in der folgenden Tabelle angegeben:

Wert Bedeutung
0x00000001 Anzeigen von Fehlermeldungen
0x00000002 Anzeigen von Warnmeldungen
0x00000004 Anzeigen von Ablaufverfolgungsmeldungen

Der Wert in DebugFlags ist ein Flagwert (das heißt, verschiedene Einstellungen können mit einem bitweisen OR-Operator kombiniert werden). Um die Protokollierung für Fehler, Warnungen und Ablaufverfolgungen gleichzeitig zu aktivieren, legen Sie DebugFlags auf 0x0000007 fest.

Damit eine Änderung des Werts von DebugFlags wirksam wird, muss der WIA-Dienst (stisvc) beendet und dann neu gestartet werden. Weitere Informationen finden Sie unter Starten und Beenden des Still Image-Diensts .

Eine übermäßige Protokollierung kann zu einer erheblichen Leistungsminderung führen. Sie sollten die Protokollierungsebene nur erhöhen, wenn Sie versuchen, ein bestimmtes Problem zu lösen. Nachdem Sie das Problem behoben haben, legen Sie die Protokollierung auf die ursprüngliche Ebene fest. Die Standardprotokollierungsebene ist 1. Erhöhen Sie die Protokollierungsstufe nicht über drei, da dies zu einem Absturz führen kann.