Share via


Práticas recomendadas para criar manipuladores de filtro no Windows Search

A Pesquisa do Microsoft Windows usa filtros para extrair o conteúdo de 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 lidar com 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 escritos em 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 do CLR com o processo em que vários suplementos 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 privilégio mínimo. 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 linguagem:

  • 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 gravados para gerenciar buffers e para serem empilhados corretamente. Todas as cópias de cadeia de caracteres devem ter verificações explícitas para proteger contra estouros 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 estouros de buffer são uma técnica comum para explorar o código que não impõe restrições de tamanho de buffer.
  • Os componentes IFilter, separador de palavras e lematizador nunca devem chamar a função ExitProcess Function ou a API semelhante que encerra um processo e todos os seus threads.
  • Não aloque nem libere recursos no ponto de entrada DllMain. Isso pode levar a falhas durante testes de estresse de baixo recurso.
  • Codifique todos os objetos para serem thread-safe. O Windows Search chama qualquer instância de um separador de palavras ou lematizador em um thread por vez, mas pode chamar várias instâncias ao mesmo tempo em vários threads.
  • Evite criar arquivos temporários ou gravar no registro.
  • Se você usar o compilador Microsoft Visual C++, compile seu aplicativo usando a opção /GS. A opção /GS é usada para detectar estouros de buffer. A opção /GS coloca as verificações de segurança no código compilado. Para obter mais informações, consulte Função DllGetClassObject /GS (Verificação de Segurança de 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

Filtrar manipuladores que enviam com o Windows

Implementando manipuladores de filtro na Pesquisa do Windows

Registrando manipuladores de filtro

Testando manipuladores de filtro