Registrazione dei gestori di filtri

Il gestore di filtri deve essere registrato. È anche possibile individuare un gestore di filtri esistente per un'estensione di file specificata tramite il Registro di sistema o usando l'interfaccia ILoadFilter.

Questo argomento è organizzato come segue:

Nota

Un gestore di filtri è un'implementazione dell'interfaccia IFilter.

I GUID necessari per registrare un nuovo gestore di protocollo o per trovare un gestore di protocollo esistente sono elencati nella tabella seguente.

GUID Definito dall'utente o dall'applicazione Descrizione
89BCB740-6119-101A-BCB7-00DD010655AF Applicazione Il GUID dell'interfaccia IFilter è una costante del registro delle chiavi per tutti i gestori di filtri.
{PersistentHandlerGUID} Utente Si tratta del GUID per il gestore permanente.
{FilterHandlerCLSID} Utente Si tratta dell'identificatore di classe (CLSID) per il gestore di filtri.
{ApplicationGUID} Utente Si tratta di un GUID intermedio (aggregato).

I gestori di filtro devono essere registrati in HKEY_LOCAL_MACHINE perché SearchFilterHost.exe è in esecuzione con l'account SYSTEM e pertanto non può accedere alle chiavi del Registro di sistema per HKEY_CURRENT_USER per l'utente connesso. Inoltre, il gruppo Users deve avere accesso in lettura ed esecuzione al gestore di filtri .dll stesso perché SearchFilterHost.exe rimuove tutti i diritti di amministratore e consente solo diritti non di amministratore. Poiché il percorso predefinito del progetto di Visual Studio si trova nella directory dell'utente corrente e pertanto non concede autorizzazioni di lettura al gruppo Utenti, è necessario spostare il .dll o modificare gli elenchi di controllo di accesso per consentire l'accesso SearchFilterHost.exe.

Quando si registra un nuovo gestore di filtri, è consigliabile usare un nome descrittivo, ad esempio HTML IFilter.

Per registrare il nuovo gestore di filtri:

  1. Specificare il GUID dell'estensione e del gestore persistente che utilizzeranno il gestore di filtri.
    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}
  1. Registrare il gestore di filtri con le chiavi e i valori seguenti:
    HKEY_LOCAL_MACHINE
       Software
          Classes
             CLSID
                {FilterHandlerCLSID}
                   (Default) = {DescriptiveFilterHandlerName}
                   InprocServer32
                      (Default) = DLL Install Path
                      ThreadingModel = Both

Approccio obsoleto per la registrazione dei gestori di filtri

Questo approccio non è consigliato per l'uso. I filtri possono essere registrati per un CLSID che rappresenta una classe COM (Component Object Model) e/o per un'estensione di file. È possibile registrare entrambi i filtri se è necessario registrare un gestore di filtri per una classe e un gestore di filtro diverso per un'estensione di file all'interno della classe . Si noti che un gestore di filtri registrato per un'estensione di file ha la precedenza rispetto a un gestore di filtri associato a un CLSID.

Queste voci sono voci del Registro di sistema OLE standard fino a includere l'entrata per la classe CLSID\{ApplicationGUID}. La DLL sample.dll implementa il comportamento dell'oggetto in esecuzione per la classe .txt. Prendere nota della voce aggiuntiva PersistentHandler. Questa voce specifica la classe responsabile del brokering delle richieste agli oggetti persistenti della classe di esempio. La voce in PersistentAddinsRegistered identifica l'implementazione responsabile dell'interfaccia denominata 89BCB740-6119-101A-BCB7-00DD010655AF(IID_IFilter). La classe che implementa IID_IFilter include voci del Registro di sistema OLE standard. La DLL InprocServer32 viene caricata tramite il meccanismo OLE standard.

Windows Search osserva il modello di threading specificato per il gestore di filtri. Quando il modello di threading è impostato su Both, il gestore del filtro deve essere sicuro per i thread; in caso contrario, se non è sicuro per i thread, specificare Appartamento. Si noti che i gestori di filtro devono essere sempre thread-safe.

Le voci del Registro di sistema di esempio seguenti sono per un gestore di filtri registrato per una classe e un'estensione di file. {PersistentHandlerGUID} e {FilterHandlerCLSID} vengono usati come variabili che indicano i valori che devono essere specificati dall'autore del gestore di filtri. I valori sono di 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

Sostituzione dei gestori di filtri esistenti

È consigliabile non sostituire i gestori di filtro predefiniti per i tipi di file comuni, ad esempio .txt, .doc, .html, URL e così via, perché ciò può avere effetti indesiderati su altri componenti di sistema. L'indicizzazione dei corpi dei messaggi email dipende dai gestori di filtro .txt, .htmle .rtf.

Se viene installato un nuovo gestore filtri per un tipo di file come sostituzione per una registrazione di filtro esistente, il programma di installazione deve salvare la registrazione corrente e ripristinarlo se il nuovo gestore di filtri viene disinstallato. Non esiste alcun meccanismo per concatenare i filtri. Di conseguenza, il nuovo gestore di filtri è responsabile della replica di tutte le funzionalità necessarie del filtro precedente.

Ricerca di un gestore di filtri per una determinata estensione di file

È possibile usare l'interfacciaILoadFilterper trovare un gestore di filtri per una determinata estensione di file. Le voci del Registro di sistema di esempio seguenti illustrano come eseguire questa operazione per i file HTML. In questo esempio il gestore di filtri per i documenti HTML è nlhtml.dll. I valori sono di tipo REG_SZ.

Per trovare il gestore di filtri per un'estensione di file specifica:

  1. Controllare se l'estensione per il tipo di file filtrati dispone di un gestore permanente registrato nella voce del Registro di sistema \HKEY_LOCAL_MACHINE\SOFTWARE\Classes.extension. In tal caso, lasciare che questa chiave sia {PersistentHandlerGUID}.
    HKEY_LOCAL_MACHINE
       SOFTWARE
          Classes
             .htm
                PersistentHandler
                   {PersistentHandlerGUID}
  1. Se non è presente un gestore permanente registrato per l'estensione, trovare il CLSID associato al tipo di documento nella voce del Registro di sistema \HKEY_LOCAL_MACHINE\SOFTWARE\Classes. Lasciare che questa chiave sia {ApplicationGUID}. Determinare quindi se un gestore permanente è registrato per CLSID: usando {ApplicationGUID} individuare il gestore permanente per la voce \HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{ApplicationGUID}. Lasciare che questa chiave sia {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}
  1. Determinare il GUID del gestore permanente: usando {PersistentHandlerGUID} trovare il GUID del gestore permanente per il tipo di documento. Il valore nella voce del Registro di sistema HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{PersistentHandlerGUID}\PersistentAddinsRegistered\ 89BCB740-6119-101A-BCB7-00DD010655AF restituisce il GUID del gestore permanente per questo tipo di documento. Lasciare che questa chiave sia {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}
  1. Determinare il gestore di filtri: usando {FilterHandlerCLSID} determinato nel passaggio precedente individuare il gestore di filtri nella voce \HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{FilterHandlerCLSID}\InprocServer32. In questo esempio il nome descrittivo del gestore di filtri usato è IFilter HTML.
    HKEY_LOCAL_MACHINE
       SOFTWARE
          Classes
             CLSID
                {EEC97550-47A9-11CF-B952-00AA0051FE20}
                   (Default) = HTML IFilter
                    Data type  REG_SZ
                    InprocServer32
                    nlhtml.dll

Risorse aggiuntive

sviluppo di gestori di filtri

Informazioni sui gestori di filtri in Windows Search

procedure consigliate per la creazione di gestori di filtri in Windows Search

Restituzione delle proprietà da un gestore di filtri

Gestori dei filtri forniti con Windows

Implementazione di gestori di filtri in Windows Search

test dei gestori di filtri