Implementieren von Filter Handlern in Windows Search

Es ist wichtig, dass Sie die erforderliche DLL-Struktur eines Filter Handlers verstehen (eine Implementierung der IFilter -Schnittstelle).

Dieses Thema ist wie folgt organisiert:

Implementieren und Exportieren der DLL-Einstiegspunkte

Jede IFilter -dll (durch Ifilter.dll in diesem Abschnitt bezeichnet) muss die folgenden Einstiegspunkte implementieren und exportieren. Diese Einstiegspunkte werden in der Regel mit einer Modul Definitionsdatei (. def) für die IFilter -Schnittstelle oder mit dem _ _ declspec (dllexport) -Schlüsselwort exportiert. Die DLL-Datei kann in einem beliebigen Ordner registriert werden, befindet sich jedoch in der Regel im Ordner "% SystemRoot% \ system32".

DLL-Einstiegspunkte werden in der folgenden Tabelle aufgelistet und beschrieben.

DLL-Name DLL-beschreibung
DllRegisterServer Der DllRegisterServer -Einstiegspunkt registriert die dll als Filter in der Registrierung. Sie registrieren die dll, indem Sie das regsvr32.exe Programm mit dem Dateinamen der IFilter -Schnittstelle als Argument ausführen: regsvr32.exe %SystemRoot%\system32\Ifilter.dll
DllUnregisterServer-Funktion Der Einstiegspunkt der DllUnregisterServer-Funktion entfernt die dll als permanenten Handler in der Registrierung. Sie heben die Registrierung der dll auf, indem Sie das regsvr32.exe Programm mit dem folgenden /u Flag ausführen: regsvr32.exe /u %SystemRoot%\system32\Ifilter.dll
DllGetClassObject-Funktion Der Inhalts Indizierungs Client ruft den Einstiegspunkt der DllGetClassObject-Funktion über Component Object Model (com) auf, um ein klassenfactoryobjekt für die IFilter -Schnittstelle zu erstellen und einen Zeiger auf die Klassenfactoryschnittstelle dieses Objekts zu erhalten.
DllCanUnloadNow-Funktion Der Content-Indizierungs Client ruft den DllCanUnloadNow-Funktions Einstiegspunkt über com auf, um zu bestimmen, ob es möglich ist, die IFilter -dll zu entladen. Die IFilter -Schnittstelle wird entladen, wenn Sie für ein Zeitintervall nicht verwendet wird, wie im Registrierungs Wert filteridletimeout angegeben.

Implementieren der IFilter-Klasse und der Klassenfactory

Mindestens zwei Klassen, z. b. cfilter und cfiltercf, werden in der Regel von jeder IFilter -dll implementiert. Die cfilter-Klasse erzeugt das IFilter-Schnittstellen Objekt, das die Inhalts Filterungs Funktion implementiert. Seine Member-Funktionen implementieren die Schnittstellen Methoden der IFilter -Schnittstelle. Jede IFilter -Klasse benötigt eine eindeutige Klassen-ID (CLSID), die der Implementierer der IFilter -Schnittstelle generiert.

Die cfiltercf-Klasse erzeugt das klassenfactoryobjekt für die IFilter -Schnittstelle. Die Klassenfactory wird durch die Schnittstelle der IClassFactory-Schnittstelle durch den Einstiegspunkt der DllGetClassObject-Funktion der dll aufgerufen. Die cfiltercf-Klasse erstellt das cfilter-Objekt und gibt einen Zeiger auf IUnknownzurück. In komplexeren Fällen kann ein IFilter eine Klassenhierarchie anstelle der einzelnen cfilter-Klasse implementieren.

Vererbung der COM-Schnittstellen

Windows Search 3,0 und höher erfordert die Verwendung von IPersistStream aus den folgenden Gründen:

  • Um Leistung und zukünftige Kompatibilität zu gewährleisten.
  • , Um die Sicherheit zu erhöhen. Mit IPersistStream implementierte IFilters sind sicherer, da der Kontext, in dem die IFilter -Schnittstelle ausgeführt wird, nicht die Berechtigung zum Öffnen von Dateien auf dem Datenträger oder über das Netzwerk benötigt.
  • Obwohl bei Windows Search nur IPersistStreamverwendet wird, kann die IFilter Interface-Klasse auch die IPersistFile-Schnittstelle und/oder IPersistStorage Interface Interface-Implementierungen aus Gründen der Abwärtskompatibilität erben.

Diese Schnittstellen werden in Dateien deklariert, die aus dem MSSDK \ include-Verzeichnis eingeschlossen werden und über vordefinierte Schnittstellen Bezeichner (IIDs) verfügen. Der Inhalts Indizierungs Client fragt die IFilter -Schnittstelle über IUnknown ab, um zu bestimmen, welche dieser Schnittstellen beim Filtern von Inhalten verwendet werden sollen.

Implementieren der Methoden der COM-Schnittstelle

Die IFilter -Schnittstelle implementiert die IUnknown -Methoden für die IFilter -Schnittstellen Klasse und die IFilter -schnittstellenklassenfactory. In der folgenden Tabelle werden die Schnittstellen spezifischen Schnittstellen und Methoden der IFilter -Schnittstelle aufgelistet, die von der IFilter -Schnittstelle implementiert werden sollten. Die IFilter -Schnittstelle muss mindestens IPersistStreamimplementieren, kann jedoch zusätzliche Schnittstellen, die von ipersistent abgeleitet werden, implementieren.

COM-Schnittstelle Methode
IClassFactory-Schnittstelle "Kreatabstance", "LockServer"
IClassFactory2-Schnittstelle GetLicInfo, RequestLicKey, kreateingestancelic
IFilter IFilter:: init, IFilter:: GetChunk, IFilter:: gettext, IFilter:: GetValue, IFilter:: BindRegion
Ipersistent-Schnittstelle GetClassID
IPersistFile-Schnittstelle IsDirty, Load, Save, saveabgeschlossene, getcurrfile
IPersistStorage-Schnittstelle IsDirty, Load, Save, GetSizeMax
IPersistStream IsDirty, Load, Save, GetSizeMax

Die Referenzseite für jede Methode gibt die Parameter und das funktionale Verhalten für diese Methode an. Jede Verweisseite gibt auch die Ergebnis Codes an, die für diese Methode implementiert werden. Die Verweis Seiten für die IFilter -Methoden geben die schnittstellenspezifischen Codes in den _ in der Einrichtung -Ergebnis Codes-Ergebnis Codes implementierten Codes an, und der Inhalts Indizierungs Client kann auch jeden der allgemeinen Ergebnis Codes verarbeiten, wie z. b. die Funktion _ null und die Win32-Anlage _ . Weitere Informationen finden Sie unter Struktur von com-Fehler Codes.

Nicht implementierte com-Methoden

Die IFilter -Schnittstelle muss mindestens IPersistStreamimplementieren, aber es müssen keine weiteren von ipersistent abgeleiteten Schnittstellen implementiert werden.

Die in der folgenden Tabelle aufgeführten com-Methoden müssen von Windows Search nicht implementiert werden.

Nicht erforderliche Methode BESCHREIBUNG
IPersistStream:: IsDirty Filter sollten E _ notimpl zurückgeben.
IPersistStream:: Save Filter sollten E _ notimpl zurückgeben.
IPersistStream:: GetSizeMax Filter sollten E _ notimpl zurückgeben.
IFilter:: BindRegion Filter sollten E _ notimpl zurückgeben.

Weitere Ressourcen

Entwickeln von Filter Handlern

Grundlegendes zu Filter Handlern in Windows Search

Bewährte Methoden zum Erstellen von Filter Handlern in Windows Search

Zurückgeben von Eigenschaften aus einem Filter Handler

Filtern von Handlern, die mit Windows ausgeliefert werden

Registrieren von Filter Handlern

Testen von Filter Handlern