Condividi tramite


Implementazione di gestori di filtri in Windows Search

È importante comprendere la struttura DLL richiesta di un gestore di filtri (un'implementazione dell'interfaccia IFilter ).

Questo argomento è organizzato come segue:

Implementazione ed esportazione dei punti di ingresso della DLL

Ogni DLL IFilter (indicato da Ifilter.dll in questa sezione) deve implementare ed esportare i punti di ingresso seguenti. Questi punti di ingresso vengono in genere esportati usando un file module-definition (def) per l'interfaccia IFilter o usando la parola chiave __declspec(dllexport). Il file DLL può essere registrato in qualsiasi cartella, ma in genere si trova nella cartella %SystemRoot%\system32.

I punti di ingresso dll sono elencati e descritti nella tabella seguente.

Nome DLL Descrizione dll
Dllregisterserver Il punto di ingresso DllRegisterServer registra la DLL come filtro nel Registro di sistema. Per registrare la DLL, eseguire il programma regsvr32.exe con il nome file DLL dell'interfaccia IFilter come argomento: regsvr32.exe %SystemRoot%\system32\Ifilter.dll
Funzione DllUnregisterServer Il punto di ingresso della funzione DllUnregisterServer rimuove la DLL come gestore permanente nel Registro di sistema. Annullare la registrazione della DLL eseguendo il programma regsvr32.exe con il /u flag : regsvr32.exe /u %SystemRoot%\system32\Ifilter.dll
Funzione DllGetClassObject Il client di indicizzazione del contenuto chiama il punto di ingresso della funzione DllGetClassObject tramite Component Object Model (COM), per creare un oggetto class factory per l'interfaccia IFilter e ottenere un puntatore all'interfaccia class factory di tale oggetto.
Funzione DllCanUnloadNow Il client di indicizzazione del contenuto chiama il punto di ingresso della funzione DllCanUnloadNow tramite COM per determinare se è possibile scaricare la DLL IFilter . L'interfaccia IFilter viene scaricata dopo che è inutilizzata per un intervallo di tempo, come specificato dal valore del Registro di sistema FilterIdleTimeOut.

Implementazione della classe IFilter e della class factory

Almeno due classi, ad esempio CFilter e CFilterCF , vengono in genere implementate da ogni DLL IFilter. La classe CFilter produce l'oggetto interfaccia IFilter che implementa la funzionalità di filtro del contenuto. Le funzioni membro implementano i metodi di interfaccia dell'interfaccia IFilter . Ogni classe IFilter richiede un identificatore di classe univoco (CLSID), generato dall'implementazione dell'interfaccia IFilter .

La classe CFilterCF produce l'oggetto class-factory per l'interfaccia IFilter . La class factory viene chiamata, tramite l'interfaccia IClassFactory , dal punto di ingresso della funzione DllGetClassObject della DLL. La classe CFilterCF crea l'oggetto CFilter e restituisce un puntatore a IUnknown. In casi più complessi, un IFilter può implementare una gerarchia di classi al posto della singola classe CFilter.

Ereditarietà delle interfacce COM

Windows Search 3.0 e versioni successive richiedono l'uso di IPersistStream per i motivi seguenti:

  • Per garantire prestazioni e compatibilità futura.
  • Per aumentare la sicurezza. IFilter implementati con IPersistStream sono più sicuri perché il contesto in cui viene eseguita l'interfaccia IFilter non richiede i diritti per aprire i file sul disco o in rete.
  • Anche se Windows Search usa solo IPersistStream, la classe di interfaccia IFilter può anche ereditare l'interfaccia IPersistFile e/o le implementazioni dell'interfaccia IPersistStorage per garantire la compatibilità con le versioni precedenti.

Queste interfacce vengono dichiarate nei file inclusi nella directory mssdk\include e hanno identificatori di interfaccia predefiniti (IID). Il client di indicizzazione del contenuto esegue una query sull'interfaccia IFilter tramite IUnknown per determinare quale di queste interfacce usare durante il filtro del contenuto.

Implementazione dei metodi di interfaccia COM

L'interfaccia IFilter implementa i metodi IUnknown sia per la classe di interfaccia IFilter che per la factory della classe di interfaccia IFilter . Nella tabella seguente sono elencati, in ordine di tabella virtuale, interfacce e metodi specifici dell'interfaccia IFilter che devono essere implementati dall'interfaccia IFilter . L'interfaccia IFilter deve implementare almeno IPersistStream, ma può implementare interfacce aggiuntive derivate da IPersist.

Interfaccia COM Metodo
Interfaccia IClassFactory CreateInstance, LockServer
Interfaccia IClassFactory2 GetLicInfo, RequestLicKey, CreateInstanceLic
Ifilter IFilter::Init, IFilter::GetChunk, IFilter::GetText, IFilter::GetValue, IFilter::BindRegion
Interfaccia IPersist GetClassID
Interfaccia IPersistFile IsDirty, Load, Save, SaveCompleted, GetCurFile
Interfaccia IPersistStorage IsDirty, Load, Save, GetSizeMax
Ipersiststream IsDirty, Load, Save, GetSizeMax

La pagina di riferimento per ogni metodo specifica i parametri e il comportamento funzionale per tale metodo. Ogni pagina di riferimento fornisce anche i codici dei risultati da implementare per tale metodo. Le pagine di riferimento per i metodi IFilter forniscono i codici specifici dell'interfaccia in FACILITY_ITF codici dei risultati da implementare e il client di indicizzazione del contenuto può anche gestire qualsiasi codice di risultato generico, ad esempio FACILITY_NULL e FACILITY_WIN32. Per altre informazioni, vedere Struttura dei codici di errore COM.

Metodi COM non implementati

L'interfaccia IFilter deve implementare almeno IPersistStream, ma non deve implementare interfacce aggiuntive derivate da IPersist.

Windows Search non deve implementare i metodi COM elencati nella tabella seguente.

Metodo non obbligatorio Descrizione
IPersistStream::IsDirty I filtri devono restituire E_NOTIMPL.
IPersistStream::Save I filtri devono restituire E_NOTIMPL.
IPersistStream::GetSizeMax I filtri devono restituire E_NOTIMPL.
IFilter::BindRegion I filtri devono restituire E_NOTIMPL.

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 forniti con Windows

Registrazione dei gestori di filtri

Test dei gestori di filtri