WIA 迷你驅動程式疑難解答
根據預設,WIA 服務會將錯誤記錄至 windir% 目錄中名為 wiadebug.log 的%檔案。 WIA 服務在此檔案中放置的資訊在驅動程式開發期間可能會很有説明。 下列範例描述一般問題,並示範如何使用 wiadebug.log 檔案中的資訊來尋找問題的解決方案。
開發人員會撰寫應用程式來測試開發中的掃描器驅動程式。 身為其中一項測試,開發人員會嘗試將掃描器的每英吋點 (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 中的值會控制記錄層級。 下表提供三個設定:
值 | 意義 |
---|---|
0x00000001 | 顯示錯誤訊息。 |
0x00000002 | 顯示警告訊息。 |
0x00000004 | 顯示追蹤訊息。 |
DebugFlags 中的值是旗標值 (,也就是說,不同的設定可能會與位 OR 運算符結合) 。 若要一次開啟錯誤、警告和追蹤的記錄,請將 DebugFlags 設定為 0x0000007。
為了讓 DebugFlags 的值變更生效,必須停止然後重新啟動WIA服務 (stisvc) 。 如需詳細資訊 ,請參閱啟動和停止仍然映像服務 。
過多的記錄可能會導致效能大幅降低。 只有在嘗試解決特定問題時,才應該增加記錄層級。 修正問題之後,請將記錄設定為其原始層級。 默認記錄層級為一。 請勿增加上述三個記錄層級,因為這可能會導致當機。