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
- Implementieren der IFilter-Klasse und der Klassenfactory
- Vererbung der COM-Schnittstellen
- Implementieren der Methoden der COM-Schnittstelle
- Weitere Ressourcen
- Zugehörige Themen
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
- Das in GitHubverfügbare ifiltersample -Codebeispiel veranschaulicht, wie eine IFilter-Basisklasse für die Implementierung der IFilter -Schnittstelle erstellt wird.
- Eine Übersicht über den Indizierungsprozess finden Sie im Abschnitt zur Indizierung.
- Eine Übersicht über die Dateitypen finden Sie unter Dateitypen.
- Informationen zum Abfragen von Datei Zuordnungs Attributen für einen Dateityp finden Sie unter " wahrtentypen", "systemfileassociation" und "Anwendungs Registrierung".
Zugehörige Themen
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