Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
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:
- 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 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:
- 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}
- 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:
- 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}
- 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}
- 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}
- 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
- 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 delle proprietà da un gestore di filtri
Gestori dei filtri forniti con Windows