Condividi tramite


Risoluzione dei problemi relativi al minidriver WIA

Per impostazione predefinita, il servizio WIA registra errori in un file denominato wiadebug.log nella % directory windir%. Le informazioni che il servizio WIA inserisce in questo file può essere molto utile durante lo sviluppo del driver. Nell'esempio seguente viene illustrato un problema tipico e viene illustrato come è possibile usare le informazioni nel file wiadebug.log per trovare una soluzione al problema.

Uno sviluppatore scrive un'applicazione per testare un driver scanner in fase di sviluppo. Come uno dei test, lo sviluppatore tenta di impostare i punti dello scanner per pollice (dpi) su 1200, ma si noti che questa azione genera un errore. Un'occhiata al file di Wiadebug.log mostra quanto segue:

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)

Queste voci di log indicano che il driver segnala che l'applicazione ha scritto un valore non valido. Non è chiaro da queste informazioni qual è il problema esatto. Se lo sviluppatore aumenta il livello di registrazione WIA per segnalare avvisi e gli errori, wiadebug.log produce output simile al seguente:

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)

L'output mostra che la proprietà Risoluzione orizzontale causa l'errore. L'applicazione sta tentando di impostare la risoluzione su 1200, ma l'elenco delle risoluzioni supportate non include 1200. Pertanto, l'helper di convalida del servizio WIA wiasValidateItemProperties rifiuta la richiesta di impostare questo valore.

Ora che il problema viene identificato, lo sviluppatore deve determinare se è il driver o l'applicazione che deve essere modificata. Se le specifiche dello scanner consentono di supportare tutte le risoluzioni tra 100 e 1400 dpi, il driver deve essere in grado di gestire una richiesta per 1200 dpi. Se lo scanner non supporta questa impostazione, l'applicazione deve essere modificata in modo da non tentare di impostare La risoluzione orizzontale su un valore non valido per questa proprietà. In questo caso, l'applicazione deve quindi verificare che un valore sia valido prima di tentare di impostare una proprietà su questo valore.

Il livello di registrazione è controllato da una voce del Registro di sistema. Per WIA, questa chiave si trova in:

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

In questo esempio, MODULE_NAME è il nome del modulo binario appropriato. Per il servizio WIA, si tratta diwiaservc.dll. Il valore in DebugFlags controlla il livello di registrazione. Nella tabella seguente vengono fornite tre delle impostazioni:

Valore Significato
0x00000001 Visualizzare i messaggi di errore.
0x00000002 Visualizzare i messaggi di avviso.
0x00000004 Visualizzare i messaggi di traccia.

Il valore in DebugFlags è un valore di flag, ovvero impostazioni diverse possono essere combinate con un operatore OR bit per bit. Per attivare la registrazione per errori, avvisi e tracce tutte contemporaneamente, impostare DebugFlags su 0x0000007.

Per modificare il valore di DebugFlags , è necessario arrestare il servizio WIA (stisvc) e quindi riavviare. Per informazioni dettagliate, vedere Avvio e arresto del servizio immagini ancora .

La registrazione eccessiva può causare una riduzione significativa delle prestazioni. È consigliabile aumentare il livello di registrazione solo quando si tenta di risolvere un problema specifico. Dopo aver corretto il problema, impostare la registrazione sul relativo livello originale. Il livello di registrazione predefinito è uno. Non aumentare il livello di registrazione superiore a tre perché potrebbe causare un arresto anomalo.