WIA Minidriver 偵錯
WIA 驅動程式會在 WIA 服務程式內執行。 因此,若要執行這些驅動程式的使用者模式偵錯,您必須將偵錯工具連接到 WIA 服務。 有數種不同的方式可以執行此動作;本主題提供其中兩個主題。 (請參閱Microsoft Windows SDK檔中的偵錯服務,以取得其他資訊) 。
您的偵錯工具可以透過下列兩種方式之一啟動:
在偵錯工具下自動啟動 WIA 服務。
在執行時間將偵錯工具附加至適當的進程。
當您對迷你驅動程式進行偵錯時,請記住下列兩點:
如果您需要從偵錯工具記憶體取符號和其他檔案的網路存取,如果您自動在偵錯工具下啟動 WIA 服務,可能無法看到這些檔案。 WIA 會在 Windows XP 中以 LocalSystem 服務的形式執行,以及作為 Microsoft Windows Server 2003 和更新版本的 LocalService,而且沒有適當的許可權可存取網路。 因此,即使您的電腦可以在網路上「查看」所有專案,但執行服務的偵錯工具可能無法執行。 如需 WIA 服務已變更許可權等級的詳細資訊,請參閱 WIA 驅動程式的安全性問題。
例如,如果在驅動程式載入或初始化驅動程式的 STI 部分期間發生問題 (,例如,在 IStiUSD::Initialize) 期間,則在附加偵錯工具時發生錯誤,而且太晚無法取得有用的資訊。 此問題的常見徵兆是裝置未顯示在[我的電腦]資料夾中,但會顯示在[裝置管理員] 資料夾中。
在偵錯工具下啟動 WIA 服務
當 WIA 服務啟動時,服務控制管理員會 (SCM) 查看服務控制資料庫中的專案,並啟動該專案所指向的可執行檔。 在偵錯工具下啟動 WIA 服務的簡單方式,就是將該專案取代為包含偵錯工具的專案。 您可以在下列位置的登錄中找到專案:
HKLM\System\CurrentControlSet\Services\StiSvc\ImagePath
一開始, ImagePath 索引鍵會設定為下列字串值:
「%SystemRoot%\System32\svchost.exe -k imgsvc」
例如,若要在 NTSD 下執行 WIA 服務,請修改上述值,如下所示:
「ntsd -g -G %SystemRoot%\System32\svchost.exe -k imgsvc」
有了這項變更,WIA 服務一律會在 NTSD 下啟動。 請注意,如果服務已在執行中,它必須先停止並重新啟動,此變更才會生效。 如需詳細資訊 ,請參閱啟動和停止仍然映射服務 。
若要讓偵錯工具視窗可見,您也需要變更另一個登錄機碼。 此登錄機碼的路徑如下:
HKLM\System\CurrentControlSet\Services\StiSvc\Type
Type鍵的初始值0X20,可防止顯示偵錯工具視窗。 將 Type 索引鍵的值變更為 DWORD 值0X120。
在執行時間附加偵錯工具
大部分偵錯工具都需要執行中進程的 PID,才能在進程啟動之後附加至它。 由於 WIA 會在稱為 svchost.exe的一般裝載進程下執行,因此尋找正確的 svchost.exe 實例是不可或缺的。
如果您從 Microsoft 網站下載偵錯工具套件,它會包含名為 tlist.exe的公用程式程式。 Tlist.exe 顯示所有執行中的進程。 如果您使用 參數執行 tlist.exe ,此公用程式也會顯示裝載哪些服務的進程。 例如,執行 tlist.exe -s 會產生類似下列的輸出:
0 System Process
4 System
160 smss.exe
216 csrss.exe Title:
208 winlogon.exe Title: NetDDE Agent
268 services.exe Svcs: Eventlog,PlugPlay
280 lsass.exe Svcs: Netlogon,PolicyAgent,ProtectedStorage,SamSs
416 svchost.exe Svcs: RpcSs
444 svchost.exe Svcs: AudioSrv,CryptSvc,Dhcp,EventSystem,FastUserSwitching,CompatibilityServices,helpsvc,Irmon,lanmanserver,lanmanworkstation,Netman,Nla,Schedule,SENS,ShellHWDetection,srservice,TapiSrv,TermService,ThemeService,uploadmgr,W32Time,winmgmt,WmdmPmSp
504 svchost.exe Svcs: Dnscache
372 svchost.exe Svcs: LmHosts,Messenger,RemoteRegistry,SSDPSRV,WebClient
616 spoolsv.exe Svcs: Spooler
680 inojobsv.exe Svcs: Cheyenne InocuLAN Anti-Virus Server
700 emsvc.exe Svcs: EMSVC
912 fxssvc.exe Svcs: Fax
192 explorer.exe Title: Program Manager
1076 svchost.exe Svcs: stisvc
22824 tlist.exe
在上述範例中, svchost.exe 的五個實例正在執行。 WIA 服務 StiSvc (Still Image Service) 是在 PID 為 1076 的svchost.exe 實例下執行。 將偵錯工具附加至進程 1076 以開始偵錯。
您可以建立svchost.exe複本,並將其重新命名為 (,例如,stisvc.exe) ,而不是使用tlist.exe之類的公用程式來識別多個svchost.exe實例的單一實例。 然後,將服務控制項專案的 ImagePath 值變更為使用此複本 svchost.exe (名稱現在 stisvc.exe) 。 例如,您可以設定其路徑為的索引鍵
HKLM\System\CurrentControlSet\Control\Services\Stisvc\ImagePath
至下列字串值:
%SystemRoot%\System32\stisvc.exe -k imgsvc」
WIA 服務啟動時,它會在stisvc.exe下執行 , 而不是 svchost.exe。 尋找此程式比較簡單,因為只有單一實例 stisvc.exe。 您不需要尋找 PID 即可找到它。 因此,例如,如果您要使用 Microsoft Visual Studio 開發驅動程式,您可以移至 [建置] 功能表下的 [開始偵錯] 功能表項目,按一下 [附加至進程...],然後選取清單中的[stisvc.exe]。