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.
Seu manipulador de filtro deve ser registrado. Você também pode localizar um manipulador de filtro existente para uma determinada extensão de nome de arquivo por meio do Registro ou usando a interface ILoadFilter .
Este tópico é organizado da seguinte maneira:
- Registrando manipuladores de filtros para Pesquisa do Windows
- Substituindo manipuladores de filtro existentes
- Localizando um manipulador de filtro para uma determinada extensão de arquivo
- Recursos adicionais
- tópicos relacionados
Observação
Um manipulador de filtro é uma implementação da interface IFilter .
Registrando manipuladores de filtros para a Pesquisa do Windows
Os GUIDs necessários para registrar um novo manipulador de protocolo ou localizar um manipulador de protocolo existente estão listados na tabela a seguir.
| GUID | Usuário ou aplicativo definido | Description |
|---|---|---|
| 89BCB740-6119-101A-BCB7-00DD010655AF | Aplicativo | O GUID da interface IFilter é uma constante de chave do Registro para todos os manipuladores de filtro. |
| {PersistentHandlerGUID} | Utilizador | Este é o GUID do manipulador persistente. |
| {FilterHandlerCLSID} | Utilizador | Esse é o CLSID (identificador de classe) para o manipulador de filtro. |
| {ApplicationGUID} | Utilizador | Esse é um GUID intermediário (agregado). |
Os manipuladores de filtro devem ser registrados no HKEY_LOCAL_MACHINE porque SearchFilterHost.exe está em execução na conta SYSTEM e, portanto, não podem acessar as chaves do Registro para HKEY_CURRENT_USER para o usuário conectado. Além disso, o grupo Usuários deve ter acesso de leitura e execução ao manipulador de filtro .dll propriamente dito porque SearchFilterHost.exe remove todos os direitos de administrador e permite apenas direitos de não administrador. Como o local do projeto padrão do Visual Studio está no diretório do usuário atual e, portanto, não concede permissões de leitura ao grupo Usuários, você deve mover o .dll ou alterar as ACLs para permitir o acesso SearchFilterHost.exe.
Ao registrar um novo manipulador de filtro, recomendamos que você use um nome descritivo, por exemplo, IFilter HTML.
Para registrar seu novo manipulador de filtro:
- Especifique a extensão e o GUID do manipulador persistente que usará o manipulador de filtro:
HKEY_LOCAL_MACHINE
Software
Classes
.txt
PersistentHandler
(Default) = {PersistentHandlerGUID}
HKEY_LOCAL_MACHINE
Software
Classes
CLSID
{PersistentHandlerGUID}
PersistentAddinsRegistered
{89BCB740-6119-101A-BCB7-00DD010655AF}l
(Default) = {FilterHandlerCLSID}
- Registre o manipulador de filtros com as seguintes chaves e valores:
HKEY_LOCAL_MACHINE
Software
Classes
CLSID
{FilterHandlerCLSID}
(Default) = {DescriptiveFilterHandlerName}
InprocServer32
(Default) = DLL Install Path
ThreadingModel = Both
Abordagem obsoleta para registrar manipuladores de filtros
Essa abordagem não é recomendada para uso. Os filtros podem ser registrados para um CLSID que representa uma classe COM (Component Object Model) e/ou para uma extensão de nome de arquivo. Você poderá registrar ambos os filtros se precisar registrar um manipulador de filtro para uma classe e um manipulador de filtro diferente para uma extensão de nome de arquivo dentro da classe. Observe que um manipulador de filtro registrado para uma extensão de nome de arquivo tem precedência sobre um manipulador de filtro para um CLSID.
Essas entradas são entradas de registro OLE padrão até e incluindo a entrada da classe CLSID\{ApplicationGUID}. A sample.dll DLL implementa o comportamento do objeto em execução para a classe .txt. Observe a entrada extra, PersistentHandler. Essa entrada especifica a classe responsável por intermediar solicitações para os objetos persistentes da classe de exemplo. A entrada em PersistentAddinsRegistered identifica a implementação responsável pela interface chamada 89BCB740-6119-101A-BCB7-00DDD010655AF(IID_IFilter). A classe que implementa IID_IFilter tem entradas de registro OLE padrão. A DLL InprocServer32 é carregada por meio do mecanismo OLE padrão.
A Pesquisa do Windows observa o modelo de threading especificado para o manipulador de filtro. Quando o modelo de threading é definido como Ambos, o manipulador de filtro deve ser thread-safe; caso contrário, se não for thread-safe, especifique Apartment. Observe que os manipuladores de filtro devem ser sempre thread-safe.
As entradas de registro de exemplo a seguir são para um manipulador de filtro registrado para uma classe e uma extensão de nome de arquivo. {PersistentHandlerGUID} e {FilterHandlerCLSID} são usados como variáveis que indicam valores que precisam ser especificados pelo criador do manipulador de filtro. Os valores são do tipo REG_SZ.
HKEY_LOCAL_MACHINE
Software
Classes
.txt
(Default) = SampleFile
SampleFile
(Default) = Class for Sample Files
CLSID
(Default) = {ApplicationGUID}
CLSID
{ApplicationGUID}
(Default) = Sample Files
InprocServer32
(Default) = sample.dll
PersistentHandler
(Default) = {PersistentHandlerGUID}
{PersistentHandlerGUID}
(Default) = Sample file persistent handler
PersistentAddinsRegistered
{89BCB740-6119-101A-BCB7-00DD010655AF}l
(Default) = {FilterHandlerCLSID}
{FilterHandlerCLSID}
(Default) = Sample Files
InprocServer32
(Default) = sampfilt.dll
ThreadingModel = Both
Substituindo manipuladores de filtro existentes
Recomendamos que você não substitua os manipuladores de filtro internos para tipos de arquivo comuns, como .txt, .doc, .html, .url e assim por diante, pois isso pode ter efeitos indesejados em outros componentes do sistema. A indexação de corpos de mensagens de email depende dos manipuladores de filtro .txt, .htmle .rtf, por exemplo.
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.
Localizando um manipulador de filtro para uma determinada extensão de arquivo
Você pode usar a interface ILoadFilter para encontrar um manipulador de filtro para uma determinada extensão de nome de arquivo. As entradas de registro de exemplo a seguir ilustram como fazer isso para arquivos HTML. Neste exemplo, o manipulador de filtro para documentos HTML é nlhtml.dll. Os valores são do tipo REG_SZ.
Para localizar o manipulador de filtro para uma determinada extensão de nome de arquivo:
- Verifique se a extensão do tipo de arquivos filtrados tem um manipulador persistente registrado na entrada do Registro \HKEY_LOCAL_MACHINE\SOFTWARE\Classes.extension. Nesse caso, deixe essa chave ser {PersistentHandlerGUID}.
HKEY_LOCAL_MACHINE
SOFTWARE
Classes
.htm
PersistentHandler
{PersistentHandlerGUID}
- Se não houver um manipulador persistente registrado para a extensão, localize o CLSID associado ao tipo de documento na entrada do Registro \HKEY_LOCAL_MACHINE\SOFTWARE\Classes. Que essa chave seja {ApplicationGUID}. Em seguida, determine se um manipulador persistente está registrado para o CLSID: usando {ApplicationGUID} localize o manipulador persistente para a entrada \HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{ApplicationGUID}. Que essa chave seja {PersistentHandlerGUID}.
HKEY_LOCAL_MACHINE
SOFTWARE
Classes
htmlfile
(Default) = Class for WWW HTML files
CLSID
(Default) = {25336920-03F9-11CF-8FD0-00AA00686F13}
CLSID
{25336920-03F9-11CF-8FD0-00AA00686F13}
PersistentHandler
(Default) = {PersistentHandlerGUID}
- Determine o GUID do manipulador persistente: usando {PersistentHandlerGUID} localize o GUID do manipulador persistente para o tipo de documento. O valor na entrada do Registro HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{PersistentHandlerGUID}\PersistentAddinsRegistered\ 89BCB740-6119-101A-BCB7-00DD010655AF fornece o GUID do manipulador persistente para esse tipo de documento. Que essa chave seja {FilterHandlerCLSID}.
HKEY_LOCAL_MACHINE
SOFTWARE
Classes
{PersistentHandlerGUID}
(Default) = HTML File Persistent Handler<dl>
REG_SZ {89BCB740-6119-101A-BCB7-00DD010655AF}
REG_SZ (Default) = {EEC97550-47A9-11CF-B952-00AA0051FE20}
- Determine o manipulador de filtro: usando {FilterHandlerCLSID} que foi determinado na etapa anterior, localize o manipulador de filtro na entrada \HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{FilterHandlerCLSID}\InprocServer32. Neste exemplo, o nome do manipulador de filtro descritivo usado é IFilter HTML.
HKEY_LOCAL_MACHINE
SOFTWARE
Classes
CLSID
{EEC97550-47A9-11CF-B952-00AA0051FE20}
(Default) = HTML IFilter
Data type REG_SZ
InprocServer32
nlhtml.dll
Recursos adicionais
- O exemplo de código IFilterSample , disponível no GitHub, demonstra como criar uma classe base IFilter para implementar a interface IFilter .
- 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
Desenvolvendo manipuladores de filtro
Sobre manipuladores de filtro na Pesquisa do Windows
Práticas recomendadas para criar 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