Práticas recomendadas para criar manipuladores de filtro no Windows Search
O Microsoft Windows Search usa filtros para extrair o conteúdo de itens para inclusão em um índice de texto completo. Você pode estender o Windows Search 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 estão associados a tipos de arquivo, conforme indicado por extensões de nome de arquivo, tipos MIME ou identificadores de classe (CLSIDs). Enquanto um filtro pode 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
- Práticas de código seguro para o Windows Search
- Recursos adicionais
- Tópicos relacionados
Código nativo
No Windows 7 e versões posteriores, os filtros escritos em código gerenciado são explicitamente bloqueados. Os filtros DEVEM ser escritos em código nativo devido a potenciais problemas de versionamento CLR com o processo em que vários complementos são executados.
Práticas de código seguro para o Windows Search
A seguir estão 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 permite ao usuário o menor privilégio. Por exemplo, páginas ASP podem usar o objeto de consulta IXSSO, que é executado como um processo de usuário.
Para IFilters e Recursos Linguísticos:
- Se um novo manipulador de filtro para um tipo de arquivo estiver sendo instalado como um substituto para um registro de filtro existente, o instalador deverá salvar o registro atual e restaurá-lo se o novo manipulador de filtro for desinstalado. Não existe um mecanismo para encadear os filtros. Assim, o novo manipulador de filtros é responsável por replicar qualquer funcionalidade necessária do filtro antigo.
- IFilters, separadores de palavras e lematizadores para o Windows Search são executados no contexto de Segurança Local. Eles devem ser escritos para gerir buffers e empilhar corretamente. Todas as cópias de cadeia de caracteres devem ter verificações explícitas para proteger contra saturações de buffer. Você deve sempre verificar o tamanho alocado do buffer e testar o tamanho dos dados em relação ao tamanho do buffer. As saturações de buffer são uma técnica comum para explorar o código que não impõe restrições de tamanho de buffer.
- IFilter, os componentes do separador de palavras e do lematizador nunca devem chamar a função ExitProcess função ou 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 com poucos recursos.
- 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 de cada 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 do Microsoft Visual C++, certifique-se de compilar seu aplicativo usando a opção /GS. A opção /GS é usada para detetar saturações de buffer. A opção /GS coloca verificações de segurança no código compilado. Para obter mais informações, consulte função DllGetClassObject /GS (Buffer Security Check) na seção Opções do compilador do Visual C++ do Platform SDK.
Recursos adicionais
- O IFilterSample exemplo demonstra como criar uma classe base IFilter para implementar o IFilter interface.
- Para obter uma visão geral do processo de indexação, consulte O processo de indexação.
- Para obter uma visão geral dos tipos de arquivo, consulte Tipos de arquivo.
- Para consultar atributos de associação de arquivo para um tipo de arquivo, consulte PerceivedTypes, SystemFileAssociations e Application Registration.
Tópicos relacionados