Noções básicas sobre manipuladores de protocolo

Alguns aplicativos armazenam seus itens em bancos de dados ou tipos de arquivo personalizados. Embora a Pesquisa do Windows possa indexar o nome e as propriedades do arquivo, o Windows não tem conhecimento do conteúdo do arquivo. Como resultado, esses itens não podem ser indexados ou expostos no Shell do Windows. Ao criar um manipulador de protocolo, você pode disponibilizar esses itens para indexação. Você também pode indexar um formato de arquivo composto, como um arquivo .zip.

Este tópico é organizado da seguinte maneira:

Indexando armazenamentos de dados com manipuladores de protocolo

Quando os usuários precisarem pesquisar bancos de dados herdados, repositórios de email ou outras estruturas de dados que não são compatíveis com o Windows Search, primeiro você deve determinar se já existe um manipulador de protocolo para esse armazenamento de dados, talvez para uso com outro aplicativo, como o SharePoint Server. Nesse caso, você pode instalar esse manipulador de protocolo no sistema. Os manipuladores de protocolo de Pesquisa do Windows usam especificações de design semelhantes ao SharePoint Server e geralmente podem ser usados de forma intercambiável.

Para obter mais informações sobre a implantação do Search Server 2008 com o Office SharePoint Server 2007, consulte Federated Search [Search Server 2008].

Armazenamentos de dados do Shell

Antes que um desenvolvedor terceirizado de novos formatos de arquivo e armazenamentos de dados possa obter esses formatos e repositórios para aparecer nos resultados da consulta no Windows Explorer, o desenvolvedor deve implementar uma fonte de dados do Shell. Uma fonte de dados shell é um componente usado para estender o namespace do Shell e expor itens em um armazenamento de dados. Um armazenamento de dados é um repositório de dados. Um armazenamento de dados pode ser exposto ao modelo de programação shell como um contêiner que usa uma fonte de dados do Shell. Os itens em um armazenamento de dados podem ser indexados pelo sistema de Pesquisa do Windows usando um manipulador de protocolo. O manipulador de protocolo implementa o protocolo para acessar uma fonte de conteúdo em seu formato nativo. As interfaces ISearchProtocol e ISearchProtocol2 são usadas para implementar um manipulador de protocolo personalizado para expandir as fontes de dados que podem ser indexadas.

Se quiser que os resultados da consulta apareçam no Windows Explorer, você deve implementar uma fonte de dados do Shell antes de criar um manipulador de protocolo para estender o índice. No entanto, se todas as consultas forem programáticas (por meio do OLE DB, por exemplo) e interpretadas pelo código do aplicativo em vez do Shell, um namespace shell, embora ainda preferencial, não será estritamente necessário.

Observação

Às vezes, uma fonte de dados do Shell é conhecida como uma extensão de namespace do Shell. Às vezes, um manipulador é conhecido como uma extensão shell ou um manipulador de extensão shell.

 

Se você quiser que os usuários exibam os resultados da pesquisa no Windows Explorer, crie um manipulador de protocolo e um ou mais dos seguintes suplementos:

  • Manipulador de menu de atalho
  • Manipulador de ícones
  • Algum outro tipo de manipulador de arquivos

Para obter uma lista de manipuladores identificados pelo cenário de desenvolvedor que você está tentando alcançar, consulte "Visão geral dos manipuladores" no Windows Search como uma plataforma de desenvolvimento. Para obter informações sobre como criar manipuladores, consulte Como registrar extensões de shell, menu de contexto e manipuladores de tipo de arquivo.

Manipuladores de protocolo

Se o armazenamento de dados também for um contêiner (como uma pasta do sistema de arquivos), você deverá implementar um filtro para enumerar as URLs no contêiner. Se o armazenamento de dados contiver dados ou tipos de arquivo diferentes de um dos 200 tipos de arquivo compatíveis com a Pesquisa do Windows, você deverá implementar um filtro para acessar e indexar o conteúdo dos itens no repositório. O Windows Search usa o manipulador de protocolo e a tecnologia IFilter semelhante à usada pelo SharePoint Server. Se você já tiver filtros para um repositório específico e tipo de arquivo instalado no sistema que está sendo indexado, o Windows Search poderá usar as interfaces existentes para indexar esses dados.

Para obter uma visão geral do processo de indexação, consulte O Processo de Indexação. Para obter informações conceituais sobre manipuladores de filtro, consulte Desenvolvendo manipuladores de filtro.

Filtros e manipuladores de protocolo

Os manipuladores de protocolo dão ao indexador do Windows Search acesso a armazenamentos de dados, permitindo que o indexador rastreie os nós de um armazenamento de dados e extraia informações relevantes para o índice. O Windows Search, por exemplo, fornece tratadores de protocolo para repositórios do sistema de arquivos e para algumas versões de ambas as lojas de dados do Microsoft Outlook. Ao indexar o email do Outlook, o manipulador de protocolo rastreia todas as mensagens em um conjunto de pastas do Outlook e extrai informações de cada mensagem e anexo. Essas informações são passadas ao indexador para inclusão no catálogo da Pesquisa do Windows.

Para obter visões gerais do Gerenciador de Catálogos e do Gerenciador de Escopo de Rastreamento (CSM), consulte Usando o Gerenciador de Catálogos e usando o Gerenciador de Escopo de Rastreamento.

Indexando um formato de arquivo composto

Um formato de arquivo composto pode ser indexado para que itens individuais no arquivo possam ser retornados como resultados individuais. Um formato de arquivo composto, como um arquivo compactado com uma extensão de nome de arquivo .zip, é essencialmente um armazenamento de dados e pode ser tratado como tal para fins de indexação. O exemplo a seguir exibe um arquivo .zip no namespace do sistema de arquivos (FILE://c:/test/test.zip) no qual há subpastas e itens individuais.

Test.zip 

    |-folder1 

    |    |-folder2 

    |           |- FileX.txt 

    |- FileY.doc

O manipulador de protocolo FILE descobre quando FILE://c:/test/test.zip está mudando ao monitorar logs de alterações do sistema de arquivos, e invoca um IFilter registrado para arquivos .zip nesse arquivo quando o arquivo é alterado, mas não tem conhecimento da estrutura interna do arquivo .zip.

Você deve informar ao indexador que o formato de arquivo composto é um armazenamento de dados. É necessário fazer isso para que itens individuais sejam indexados e recuperados como entidades exclusivas. Depois de implementar uma fonte de dados do Shell e executar as etapas a seguir, você terá um manipulador de protocolo que pode processar e expor os dados de um formato de arquivo composto (um arquivo .zip) como itens individuais.

Para informar ao indexador que um arquivo composto é um armazenamento de dados:

  1. Crie um manipulador de protocolo (usando ISearchProtocol ou ISearchProtocol2) para arquivos .zip que têm a capacidade de associar ao arquivo de origem. Para obter mais informações, consulte Instalando e registrando manipuladores de protocolo.

    Por exemplo, você pode usar um caminho com escape para o arquivo .zip como o nome da pasta raiz e, em seguida, usar uma sintaxe de hierarquia como qualquer outro formato de arquivo.

    .zip:///escapedPathTo.zipFile/.zipfolder/.../.zipfile
    

    Usando os dados de exemplo acima para c:\test\test.zip, as URLs exclusivas seriam as seguintes. Com essas URLs, o manipulador de protocolo tem as informações necessárias para vincular ao arquivo .zip e enumerar as URLs filho, incluindo os arquivos internos, de modo que possam ser vinculadas e indexadas pelos filtros .doc e .txt.

    
    
    .zip:///FILE:%2f%2f%2fc:%2ftest%2ftest.zip/ 
    
    .zip:///FILE:%2f%2f%2fc:%2ftest%2ftest.zip/FileY.Doc 
    
    .zip:///FILE:%2f%2f%2fc:%2ftest%2ftest.zip/folder1 
    
    .zip:///FILE:%2f%2f%2fc:%2ftest%2ftest.zip/folder1/folder2 
    
    .zip:///FILE:%2f%2f%2fc:%2ftest%2ftest.zip/folder1/folder2/FileX.txt
    
  2. Verifique se o manipulador de protocolo atende às duas seguintes condições:

    • As URLs raiz de um arquivo .zip devem emitir PKEY_Search_IsClosedDirectory (System.Search.IsClosedDirectory) nas URLs que são as URLs de arquivo de .zip raiz. Por exemplo, .zip:///FILE:%2f%2f%2fc:%2ftest%2ftest.zip/ deve emitir IsClosedDirectory = TRUE. Isso informa ao indexador que, se a data dessa URL não tiver sido alterada, ele não precisará processar nenhuma das URLs filhas.
    • Cada URL filho dessa URL deve emitir PKEY_Search_IsFullyContained (System.Search.IsFullyContained) nas URLs filho da URL de raiz do arquivo .zip. Normalmente, no final de um rastreamento incremental, o indexador trata todas as URLs não supervisionadas como itens que devem ser excluídos. Mas o arquivo de .zip raiz não deve processar URLs raiz porque nada mudou. Emitir essa propriedade como TRUE informa ao indexador que, se essa URL não tiver sido processada no final de um rastreamento incremental, ela não deverá ser excluída. Ele só será excluído se o item raiz tiver sido alterado e não for visitado.

A Pesquisa do Windows requer uma página inicial para um protocolo para saber quais URLs devem ser rastreadas incrementalmente e quais URLs devem ser ignoradas quando forem encontradas. Mas não podemos começar com uma URL para cada arquivo .zip, porque não sabemos onde cada arquivo .zip está. Portanto, a URL da página inicial do manipulador de protocolo .zip deve ser capaz de enumerar tudo na raiz dos caminhos escapados de todos os arquivos .zip. Esses arquivos .zip não estão necessariamente no namespace FILE: e podem ser uma URL de tipo MAPI que aponta para um arquivo .zip como um anexo, por exemplo.

Para registrar uma raiz como uma página inicial:

  1. Registre uma raiz como .zip:/// como página inicial, permitindo que todos os arquivos .zip comecem lá, efetivamente. Ao processar a URL raiz .zip:, o manipulador de protocolo deve gerar a lista de URLs filho a serem emitidas ao consultar o Windows Search por todas as URLs com System.FileExtension = ".zip".

  2. Escape essas URLs para remover as barras e devolvê-las como URLs filhas. Uma consulta de exemplo para recuperar os tipos que você deseja pode ter a seguinte aparência.

    SELECT system.itemurl, System.DateModified FROM SystemIndex 
    WHERE System.FileExtension='.zip' OR System.MimeType='mimetypefor.zip'
    
  3. Quando o Windows Search faz periodicamente um rastreamento incremental na URL raiz do .zip:///, você deve devolver a lista de URLs que a Pesquisa do Windows já mantém e que são do tipo .zip. Se uma exclusão for descoberta no repositório nativo em que o arquivo .zip está armazenado, ela não aparecerá em sua enumeração e essa ramificação da árvore no .zip será removida.

  4. Para associar aos dados de .zip para outro manipulador de protocolo, você deve, idealmente, passar pelo IShellFolder para que a URL se associe ao armazenamento do objeto e não suponha que seja sempre um arquivo. Isso oferece flexibilidade para trabalhar com anexos em repositórios de correio, por exemplo.

  5. Ao emitir URLs filho para cada arquivo .zip, você deve usar PKEY_Search_UrlToIndexWithModificationTime (System.Search.UrlToIndexWithModificationTime) para passar PKEY_DateModified (System.DateModified) do arquivo de .zip real para que o indexador rastreie o arquivo .zip somente se ele tiver sido alterado.

Para que suas URLs de arquivos .zip sejam indexadas imediatamente após serem criadas ou modificadas, e não precisar esperar por uma varredura incremental para descobrir seu novo estado, você pode potencialmente monitorar o sistema de arquivos por conta própria para alterações em arquivos .zip. No entanto, essa abordagem não funcionaria para outros armazenamentos de dados, como MAPI.

Para que suas urls de .zip sejam indexadas quando forem criadas ou modificadas:

  1. Crie um filtro (e implementação da interface IFilter ) para o tipo de arquivo .zip. Para obter mais informações, consulte Desenvolvendo manipuladores de propriedades para Pesquisa do Windows.
  2. Sempre que a implementação do IFilter é chamada, é porque essa URL foi descoberta ou alterada. Em seguida, gere um evento para a URL de .zip apropriada para a URL de origem, por meio da interface IGatherNotifyInline . Isso oferece a possibilidade de notificar imediatamente o indexador sobre novos dados a serem indexados, sem precisar aguardar o rastreamento incremental.

Desenvolvendo manipuladores de protocolo

Instalando e registrando manipuladores de protocolo

Notificando o índice de alterações

Adicionando ícones e menus de contexto

Exemplo de código: extensões de shell para manipuladores de protocolo

Instalando e registrando manipuladores de protocolo

Criando um conector de pesquisa para um manipulador de protocolo

Depurando manipuladores de protocolo