Práticas recomendadas para criar manipuladores de filtro na Pesquisa do Windows

A Pesquisa do Microsoft Windows usa filtros para extrair o conteúdo dos itens para inclusão em um índice de texto completo. Você pode estender a Pesquisa do Windows para indexar tipos de arquivo novos ou proprietários escrevendo manipuladores de filtro para extrair o conteúdo e manipuladores de propriedade para extrair as propriedades dos arquivos. Os filtros são associados a tipos de arquivo, conforme indicado por extensões de nome de arquivo, tipos MIME ou CLSIDs (identificadores de classe). Embora um filtro possa manipular vários tipos de arquivo, cada tipo funciona com apenas um filtro.

Este tópico contém as seguintes seções:

Código nativo

No Windows 7 e posterior, os filtros gravados no código gerenciado são explicitamente bloqueados. Os filtros DEVEM ser escritos em código nativo devido a possíveis problemas de controle de versão CLR com o processo em que vários complementos são executados.

Veja a seguir as práticas para escrever aplicativos seguros para uso com o Windows Search.

Para aplicativos de consulta:

  • Ao escrever clientes de pesquisa, você deve escolher a API que é executada em um contexto de segurança que permita ao usuário o menor privilégio. Por exemplo, as páginas ASP podem usar o objeto de consulta IXSSO, que é executado como um processo de usuário.

Para IFilters e recursos de idioma:

  • Se um novo manipulador de filtro para um tipo de arquivo estiver sendo instalado como uma substituição para um registro de filtro existente, o instalador deverá salvar o registro atual e restaurá-lo se o novo manipulador de filtro estiver desinstalado. Não há mecanismo para encadear filtros. Portanto, o novo manipulador de filtro é responsável por replicar qualquer funcionalidade necessária do filtro antigo.
  • IFilters, separadores de palavras e lematizadores do Windows Search são executados no contexto de Segurança Local. Eles devem ser elaborados para gerenciar buffers e empilhar corretamente. Todas as cópias de cadeia de caracteres devem ter verificações explícitas para proteger contra sobrecargas de buffer. Você sempre deve verificar o tamanho alocado do buffer e testar o tamanho dos dados em relação ao tamanho do buffer. Os transbordamentos de buffer são uma técnica comum de exploração de código que não impõe restrições de tamanho de buffer.
  • Os componentes IFilter, quebrador de palavras e lematizador nunca devem chamar a função ExitProcess Function ou uma API semelhante que encerra um processo e todos os seus threads.
  • Não aloque ou libere recursos no ponto de entrada DllMain. Isso pode levar a falhas durante testes de estresse de baixo recurso.
  • Codificar todos os objetos para serem thread-safe. Windows Search chama qualquer instância de um separador de palavras ou lematizador em uma linha de execução de cada vez, mas pode chamar várias instâncias ao mesmo tempo em várias linhas de execução.
  • Evite criar arquivos temporários ou gravar no registro.
  • Se você usar o compilador do Microsoft Visual C++, certifique-se de compilar seu aplicativo usando a opção /GS . A opção /GS é usada para detectar excessos de buffer. A opção /GS coloca verificações de segurança no código compilado. Para obter mais informações, consulte DllGetClassObject Function /GS (Verificação de Segurança do Buffer) na seção Opções do Compilador do Visual C++ do SDK da Plataforma.

Recursos adicionais

Desenvolvendo manipuladores de filtro

Sobre manipuladores de filtro na Pesquisa do Windows

Retornando propriedades de um manipulador de filtro

Manipuladores de Filtro que Vêm com o Windows

Implementando manipuladores de filtro na Pesquisa do Windows

Registrando manipuladores de filtro

Testando manipuladores de filtro