Depuração de manipuladores de protocolo
Compreender como os manipuladores de protocolo são iniciados é essencial para testar e depurar suas implementações de manipulador de protocolo.
Este tópico está organizado da seguinte forma:
- Sobre a depuração de erros nos manipuladores de protocolo
- Configuração da Depuração
- Recursos adicionais
- Tópicos relacionados
Sobre a depuração de manipuladores de protocolo
O processo SearchIndexer (searchindexer.exe) inicia uma cópia do processo SearchProtocolHost (SearchProtocolHost.exe) no contexto do sistema e outra cópia no contexto do usuário. Em seguida, os manipuladores de protocolo são carregados no processo SearchProtocolHost conforme necessário. Eles não são descarregados até que o serviço de pesquisa seja interrompido. A mesma instância de um manipulador de protocolo é reutilizada qualquer número de vezes enquanto o serviço está em execução.
Os processos SearchIndexer e SearchProtocolHost se comunicam frequentemente durante a indexação. Se você pausar ou parar o processo SearchProtocolHost para depurar, o SearchIndexer iniciará um novo processo SearchProtocolHost, invalidando sua sessão de depuração. Além disso, ao anexares o depurador diretamente ao processo SearchProtocolHost, podes interromper a herança de identificadores de searchindexer.exe para searchprotocolhost.exe, e os dois processos não conseguirão comunicar-se.
Para evitar esses problemas, você precisa notificar o serviço de pesquisa que está depurando e anexar o depurador ao processo SearchIndexer com instruções para depurar processos filho, conforme descrito a seguir.
Configurando a depuração
Siga estes passos para configurar a depuração para o seu manipulador de protocolo.
Notifique o serviço de pesquisa que você está depurando definindo o valor DebugFilters como 1 no registro:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft Windows Search Gathering Manager DebugFilters = 1
Anexe um depurador usando a chave do Registro Opções de Execução de Arquivo de Imagem:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion Image File Execution Options SearchIndexer.exe Debugger = <path to debugger> <debugger options>
As opções para um depurador de exemplo são descritas na tabela a seguir.
Exemplo usando o depurador ntsdDepurador = C:\debuggers\ntsd.exe -odGx -c: "sxe ld mydll.dll; g"
Reinicie searchindexer.exe no depurador usando compmgmt.msc, services.msc ou uma janela de comando com comandos semelhantes aos seguintes:
net stop wsearch <copy new DLLs for debugging> net start wsearch
Para distinguir entre um processo SearchProtocolHost em execução no contexto do sistema e um processo em execução no contexto do usuário, você pode revisar as cadeias de caracteres do ambiente. Com ntsd.exe, por exemplo, você pode usar o comando extension !peb para exibir uma exibição formatada das informações no bloco de ambiente de processo (PEB).
Recursos adicionais
- Para obter informações sobre como criar manipuladores, consulte Registrando extensões de shell.
Tópicos relacionados
Conceptual
- Desenvolvendo manipuladores de protocolo
- Noções básicas sobre manipuladores de protocolo
- Notificação do Índice de Mudanças
- Adicionando ícones e menus de contexto
- Amostra de Código: Extensões de Shell para Manipuladores de Protocolo
- Criando um conector de pesquisa para um manipulador de protocolo
- Instalando e registrando manipuladores de protocolo