Share via


WIA ミニドライバーのトラブルシューティング

既定では、WIA サービスは、%windir% ディレクトリ内の wiadebug.logという名前のファイルにエラーを記録します。 WIA サービスがこのファイルに配置する情報は、ドライバーの開発中に非常に役立ちます。 次の例では、一般的な問題を示し、wiadebug.log ファイル内の情報を使用して問題の解決策を見つける方法を示します。

開発者は、開発中のスキャナー ドライバーをテストするアプリケーションを作成します。 テストの 1 つとして、開発者はスキャナーのドット/インチ (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)

この出力は、Horizontal Resolution プロパティがエラーの原因であることを示しています。 アプリケーションは解像度を 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値は、ログ レベルを制御します。 次の表にこれらの設定の3 つを示します。

Value 意味
0x00000001 エラー メッセージを表示する
0x00000002 警告メッセージを表示する
0x00000004 トレースメッセージの表示

DebugFlags値はフラグ値です (つまり、異なる設定をビットごとの OR 演算子と組み合わせることができます)。 エラー、警告、トレースのログ記録を一度に有効にするには、 DebugFlagsを 0x0000007 に設定します。

DebugFlags の値の変更を有効にするには、WIA サービス (stisvc) を停止してから再起動する必要があります。 詳しくは、 「静止画サービスの開始と停止」 を参照してください。

過剰なログ記録は、パフォーマンスの大幅な低下につながる可能性があります。 特定の問題の解決を試みる場合にのみ、ログ 記録レベルを上げる必要があります。 問題を修正したら、ログ記録を元のレベルに設定します。 既定のログ レベルは 1 です。 クラッシュの原因となる可能性があるため、ログ 記録レベルを 3 より上に増やさないでください。