Partilhar via


Noções básicas sobre manipuladores de protocolo

Alguns aplicativos armazenam seus itens em bancos de dados ou tipos de arquivo personalizados. Embora o Windows Search possa indexar o nome e as propriedades do ficheiro, o Windows não tem conhecimento do conteúdo do ficheiro. 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 está organizado da seguinte forma:

Indexação de armazenamentos de dados com manipuladores de protocolo

Quando os usuários precisam pesquisar bancos de dados herdados, armazenamentos de email ou outras estruturas de dados que não são suportadas pelo Windows Search, você deve primeiro determinar se já existe um manipulador de protocolo para esse armazenamento de dados, talvez para uso com outro aplicativo, como o SharePoint Server. Em caso afirmativo, você pode instalar esse manipulador de protocolo no sistema. Os manipuladores de protocolo do Windows Search 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 Pesquisa Federada [Search Server 2008].

Armazenamentos de dados do Shell

Antes que um desenvolvedor terceirizado de novos formatos de arquivo e armazenamentos de dados possa fazer com que esses formatos e armazenamentos apareçam nos resultados da consulta no Windows Explorer, o desenvolvedor deve implementar uma fonte de dados do Shell. Uma fonte de dados do 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 do 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 Windows Search 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 desejar que os resultados da consulta apareçam no Windows Explorer, você deverá 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 da aplicação em vez do Shell, embora um namespace do Shell seja ainda preferido, não é estritamente necessário.

Observação

Uma fonte de dados do Shell às vezes é conhecida como uma extensão de namespace do Shell. Um manipulador às vezes é conhecido como uma extensão Shell ou um manipulador de extensão Shell.

 

Se pretender que os utilizadores visualizem os resultados da pesquisa a partir do Explorador do Windows, tem de criar 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 de manipuladores" em Windows Search como uma plataforma de desenvolvimento. Para obter informações sobre como criar manipuladores, consulte Registo de 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 suportados pelo Windows Search, você deverá implementar um filtro para acessar e indexar o conteúdo dos itens no armazenamento. O Windows Search usa manipulador de protocolo e tecnologia IFilter semelhante à usada pelo SharePoint Server. Se você já tiver filtros para um armazenamento específico e um tipo de arquivo instalados 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 indexação. Windows Search, por exemplo, é disponibilizado com gestores de protocolo para armazenamentos de sistema de ficheiros e para algumas versões de armazenamentos de dados do Microsoft Outlook. Ao indexar emails 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 para o indexador para inclusão no catálogo do Windows Search.

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 alterações do FILE://c:/test/test.zip ao monitorar os logs de alterações do sistema de arquivos e invocará um IFilter registrado para os arquivos .zip quando o arquivo for alterado, mas não tem conhecimento da estrutura interna do próprio arquivo .zip.

Você deve informar ao indexador que o formato de arquivo composto é um armazenamento de dados. É necessário fazê-lo para que itens individuais sejam indexados e recuperados como entidades únicas. 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 o indexador de que um arquivo composto é um armazenamento de dados:

  1. Crie um manipulador de protocolo (usando ISearchProtocol ou ISearchProtocol2) para arquivos .zip que tenha a capacidade de se vincular 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 filhas, incluindo os arquivos internos, para que possam ser vinculados e indexados 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 condições a seguir:

    • As URLs raiz de um ficheiro .zip devem apresentar PKEY_Search_IsClosedDirectory (System.Search.IsClosedDirectory) nas URLs que forem URLs raiz do ficheiro .zip. Por exemplo, .zip:///FILE:%2f%2f%2fc:%2ftest%2ftest.zip/ deve emitir IsClosedDirectory = TRUE. Isso informa ao indexador que, se a data nesse URL não tiver sido alterada, ele não precisará processar nenhum dos URLs filho.
    • Cada URL subordinado desse URL deve emitir PKEY_Search_IsFullyContained (System.Search.IsFullyContained) nos URLs subordinados do URL raiz .zip. Normalmente, no final de um rastreamento incremental, o indexador trata todas as URLs não visitadas como itens que devem ser excluídos. Mas o arquivo .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 deve ser excluída. Ele só será excluído se o item raiz tiver sido alterado e não for visitado.

O Windows Search requer uma página inicial para um protocolo para saber quais URLs rastrear incrementalmente e quais URLs devem ser ignoradas quando forem encontradas. Mas não podemos começar com um 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 ficheiros .zip. Esses arquivos .zip não estão necessariamente no namespace FILE: e podem ser uma URL do tipo MAPI que aponta para um arquivo .zip como um anexo, por exemplo.

Para registrar uma raiz como uma página inicial:

  1. Registe uma raiz como .zip:/// como uma página inicial para que todos os arquivos .zip comecem lá, de facto. Ao processar a raiz .zip: URL, o seu gestor de protocolo deve gerar a lista de URLs filhas a serem emitidas através de uma consulta ao Windows Search para todas as URLs com System.FileExtension = ".zip".

  2. Fuja dessas URLs para remover as barras e devolvê-las como URLs filhas. Um exemplo de consulta para recuperar os tipos desejados 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 periodicamente faz um rastreamento incremental na sua URL raiz .zip:///, deve devolver a lista de URLs que o Windows Search já está mantendo e que são URLs .zip. Se uma exclusão for descoberta no repositório nativo onde o arquivo .zip está armazenado, ela não aparecerá na enumeração e essa ramificação da árvore no .zip será removida.

  4. Para vincular aos dados .zip para outro manipulador de protocolo, deve-se idealmente percorrer o IShellFolder para que essa URL se ligue ao armazenamento do objeto e não assumir que se trata sempre de um arquivo. Isso lhe dá a flexibilidade de trabalhar com anexos em lojas de e-mail, por exemplo.

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

Para ter as suas URLs de .zip indexadas imediatamente após serem criadas ou modificadas e não precisar esperar por uma análise incremental para descobrir o seu novo estado, você pode monitorar o sistema de arquivos por si mesmo para .zip alterações de arquivo. No entanto, tal abordagem não funcionaria para outros armazenamentos de dados, como MAPI.

Para que as suas urls .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 propriedade para o Windows Search.
  2. Sempre que sua implementação IFilter é chamada, é porque essa URL foi descoberta ou alterada. Em seguida, através da interface IGatherNotifyInline , gere um evento para a URL .zip apropriada para a URL de origem. Isso permite-lhe informar imediatamente ao indexador que há novos dados a serem indexados sem precisar esperar pelo rastreamento incremental.

Desenvolvendo manipuladores de protocolo

Instalando e registrando manipuladores de protocolo

Notificar 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

Manipuladores de protocolo de depuração