Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você 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 usuário desses drivers, você deve conectar o depurador ao serviço WIA. Há várias maneiras diferentes de fazer isso; este tópico apresenta dois deles. (Consulte os serviços de depuração na documentação do SDK do Windows para obter informações adicionais).
Seu depurador pode ser iniciado de duas maneiras:
Iniciando automaticamente o serviço WIA em um depurador.
Anexando o depurador ao processo adequado durante a execução.
Mantenha os seguintes dois pontos em mente ao depurar seu minidriver:
Se você precisar de acesso de rede a símbolos e outros arquivos de dentro do depurador, eles poderão não estar visíveis se você iniciar automaticamente o serviço WIA no depurador. O WIA é executado como um serviço LocalSystem no Windows XP e como um LocalService para o Microsoft Windows Server 2003 e versões posteriores do sistema operacional e não tem os privilégios apropriados para acessar a rede. Portanto, mesmo que seu computador possa "ver" tudo em sua rede, o depurador que executa 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 de STI do driver (por exemplo, durante IStiUSD::Initialize), o erro já terá ocorrido quando um depurador for anexado, e será 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 SCM (gerenciador de controle de serviço) 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 em um depurador é substituir essa entrada por uma que inclua o depurador. A entrada pode ser encontrada no registro em:
HKLM\System\CurrentControlSet\Services\StiSvc\ImagePath
Inicialmente, a chave ImagePath é definida como 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 essa alteração, o serviço WIA sempre é iniciado sob 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. Veja Iniciando e Parando o Serviço de Imagem Fixa para 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 requer o PID do processo em execução para anexá-lo após o processo já ter sido iniciado. Como o WIA é executado em 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, esse utilitário também mostrará quais processos estão hospedando quais serviços. Por exemplo, a execução detlist.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á em execução na instância desvchost.exe cujo PID é 1076. Anexe o depurador ao processo 1076 para iniciar a depuração.
Em vez de usar um programa utilitário, como tlist.exe, para identificar uma única instância de várias instâncias desvchost.exe , você pode fazer uma cópia de svchost.exe e renomeá-la (por exemplo, stisvc.exe). Em seguida, altere o valor do ImagePath da entrada de controle de serviço para usar essa cópia de svchost.exe (aquela cujo nome agora está 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 em stisvc.exe em vez de svchost.exe. Encontrar esse processo é mais simples, pois 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, poderá acessar o item de menu Iniciar Depuração no menu Compilar , clicar em Anexar ao Processo...e selecionar stisvc.exe na lista.