Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Os drivers WIA são executados dentro do processo de serviço WIA. Portanto, para executar a depuração em modo de utilizador desses drivers, é necessário conectar o depurador ao serviço WIA. Existem várias maneiras diferentes de fazer isso; Este tópico apresenta dois deles. (Consulte Serviços de Depuração na documentação do SDK do Microsoft Windows para obter informações adicionais).
O seu depurador pode ser iniciado de duas maneiras:
Iniciar automaticamente o serviço WIA sob um depurador.
Anexando o depurador ao processo apropriado em tempo de execução.
Tenha em mente os dois pontos a seguir ao depurar o seu mini-controlador:
Se você precisar de acesso de rede a símbolos e outros arquivos de dentro do depurador, eles podem não estar visíveis se você iniciar automaticamente o serviço WIA sob o depurador. WIA é executado como um serviço LocalSystem no Windows XP e como um LocalService para Microsoft Windows Server 2003 e versões posteriores do sistema operacional e não tem os privilégios apropriados para acessar a rede. Assim, mesmo que a sua máquina possa "ver" tudo na sua rede, o depurador que está a executar o serviço pode não ser capaz. Para obter mais informações sobre o nível de privilégio alterado do serviço WIA, consulte Problemas de segurança para drivers WIA.
Se ocorrer um problema durante o carregamento do driver ou a inicialização da parte STI do driver (por exemplo, durante IStiUSD::Initialize), no momento em que um depurador é anexado, o erro já ocorreu e é tarde demais para obter informações úteis. Um sintoma comum desse problema é que o dispositivo não aparece na pasta Meu computador, mas aparece na pasta Gerenciador de dispositivos.
Iniciando o serviço WIA em um depurador
Quando o serviço WIA é iniciado, o gerenciador de controle de serviço (SCM) examina a entrada no banco de dados de controle de serviço e inicia o arquivo executável apontado por essa entrada. Uma maneira simples de iniciar o serviço WIA sob um depurador é substituir essa entrada por uma que inclua seu depurador. A entrada pode ser encontrada no registo em:
HKLM\System\CurrentControlSet\Services\StiSvc\ImagePath
Inicialmente, a chave ImagePath é definida com o seguinte valor de cadeia de caracteres:
"%SystemRoot%\System32\svchost.exe -k imgsvc"
Para executar o serviço WIA em NTSD, por exemplo, modifique o valor anterior da seguinte maneira:
"NTSD -g -G %SystemRoot%\System32\svchost.exe -k IMGSVC"
Com esta alteração, o serviço WIA começa sempre em NTSD. Observe que, se o serviço já estiver em execução, ele deverá ser interrompido e reiniciado antes que essa alteração entre em vigor. Consulte Início e paragem do serviço de imagem estática para obter detalhes.
Para tornar a janela do depurador visível, você também precisa alterar outra chave do Registro. O caminho para essa chave do Registro é:
HKLM\System\CurrentControlSet\Services\StiSvc\Type
O valor inicial da chave Type , 0X20, impede que a janela do depurador seja exibida. Altere o valor da chave Type para o valor DWORD 0X120.
Anexando o depurador em tempo de execução
A maioria dos depuradores requerem o PID do processo em execução para ligar-se ao processo depois que este já tiver sido iniciado. Como o WIA é executado sob um processo de hospedagem genérico chamado svchost.exe, encontrar a instância correta de svchost.exe é essencial.
Se você baixou o pacote do depurador do site da Microsoft, ele inclui um programa utilitário chamado tlist.exe. Tlist.exe exibe todos os processos em execução. Se você executar tlist.exe usando a opção s, este utilitário também mostra quais processos estão hospedando quais serviços. Por exemplo, executar tlist.exe -s produz uma saída semelhante à seguinte:
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
No exemplo anterior, cinco instâncias de svchost.exe estão em execução. O serviço WIA, StiSvc (serviço Still Image), está sendo executado sob a instânciasvchost.exe cujo PID é 1076. Anexe o depurador ao processo 1076 para iniciar a depuração.
Em vez de usar um utilitário como tlist.exe, para identificar uma única ocorrência de várias instâncias desvchost.exe, pode fazer uma cópia de svchost.exe e renomeá-la (por exemplo, stisvc.exe). Em seguida, altere o valor ImagePath da entrada de controle de serviço para usar essa cópia de svchost.exe (aquele cujo nome agora é stisvc.exe). Por exemplo, você pode definir a chave cujo caminho é
HKLM\System\CurrentControlSet\Control\Services\Stisvc\ImagePath
para o seguinte valor de cadeia de caracteres:
%SystemRoot%\System32\stisvc.exe -k IMGSVC"
Quando o serviço WIA é iniciado, ele é executado sob stisvc.exe em vez de svchost.exe. Encontrar esse processo é mais simples, porque há apenas uma única instância de stisvc.exe. Você não precisa procurar o PID para encontrá-lo. Assim, por exemplo, se você estiver desenvolvendo o driver usando o Microsoft Visual Studio, você pode ir para o item de menu Iniciar depuração no menu Compilar , clique em Anexar ao processo... e selecione stisvc.exe na lista.