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:
- Registrazione dei gestori di filtri per Windows Search
- Sostituzione dei gestori di filtri esistenti
- Ricerca di un gestore di filtri per un'estensione di file specificata
- Risorse aggiuntive
- Argomenti correlati
Nota
Un gestore di filtri è un'implementazione dell'interfaccia IFilter .
Registrazione dei gestori di filtri per Windows Search
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:
- 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}
- 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:
- 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}
- 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}
- 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}
- 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
- L'esempio di codice IFilterSample , disponibile in GitHub, illustra come creare una classe di base IFilter per implementare l'interfaccia IFilter .
- Per una panoramica del processo di indicizzazione, vedere Processo di indicizzazione.
- Per una panoramica dei tipi di file, vedere Tipi di file.
- Per eseguire query sugli attributi di associazione di file per un tipo di file, vedere PerceivedTypes, SystemFileAssociations e Application Registration.
Argomenti correlati
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