Condividi tramite


Registrazione dei gestori di filtri

Il gestore di filtri deve essere registrato. È anche possibile individuare un gestore di filtri esistente per un'estensione del nome 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 del protocollo o per trovare un gestore di protocolli 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 chiave del Registro di sistema per tutti i gestori di filtri.
{PersistentHandlerGUID} Utente Si tratta del GUID per il gestore persistente.
{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 filtri devono essere registrati in HKEY_LOCAL_MACHINE perché SearchFilterHost.exe è in esecuzione nell'account SYSTEM e pertanto non possono accedere alle chiavi del Registro di sistema per HKEY_CURRENT_USER per l'utente connesso. Inoltre, il gruppo Utenti 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 di amministratore. Poiché il percorso predefinito del progetto di Visual Studio si trova nella directory dell'utente corrente e quindi 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 userà 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 del filtro 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 una classe CLSID che rappresenta una classe COM (Component Object Model) e/o per un'estensione del nome file. È possibile registrare entrambi i filtri se è necessario registrare un gestore di filtri per una classe e un gestore di filtri diverso per un'estensione del nome file all'interno della classe. Si noti che un gestore di filtri registrato per un'estensione del nome file ha la precedenza su un gestore di filtri per un CLSID.

Queste voci sono voci del Registro di sistema OLE standard fino a e include la voce per la classe CLSID\{ApplicationGUID}. La DLL sample.dll implementa il comportamento dell'oggetto in esecuzione per la classe .txt. Si noti la voce aggiuntiva, PersistentHandler. Questa voce specifica la classe responsabile della gestione delle richieste di brokering 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 Entrambi, il gestore del filtro deve essere thread safe; in caso contrario, se non è thread safe, specificare Apartment. Si noti che i gestori di filtri 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 del nome 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 filtri predefiniti per i tipi di file comuni, ad esempio .txt, .doc, .html, URL e così via, perché in questo modo possono avere effetti indesiderati su altri componenti di sistema. L'indicizzazione dei corpi dei messaggi di posta elettronica dipende dai gestori di filtri .txt, .html e .rtf, ad esempio.

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

Ricerca di un gestore di filtri per un'estensione di file specificata

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

Per trovare il gestore del filtro per un'estensione del nome file specificata:

  1. Verificare se l'estensione per il tipo di file filtrati ha un gestore persistente 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 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 persistente è 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 persistente: usando {PersistentHandlerGUID} trovare il GUID del gestore persistente 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 persistente 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 del filtro: usando {FilterHandlerCLSID} determinato nel passaggio precedente individuare il gestore del filtro nella voce \HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{FilterHandlerCLSID}\InprocServer32. In questo esempio il nome del gestore di filtro descrittivo usato è HTML IFilter.
    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 di proprietà da un gestore di filtri

Gestori di filtri che vengono forniti con Windows

Implementazione dei gestori di filtri in Windows Search

Test dei gestori di filtri