Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Filterhandler, bei denen es sich um Implementierungen der IFilter-Schnittstelle handelt, scannen Dokumente nach Text und Eigenschaften. Filterhandler extrahieren Textabschnitte aus diesen Elementen, filtern eingebettete Formatierungen heraus und bewahren Informationen zur Position des Texts auf. Sie extrahieren auch Blöcke von Werten, bei denen es sich um Dokumenteigenschaften handelt. IFilter ist die Grundlage für die Erstellung von Anwendungen auf höherer Ebene wie Dokumentindizierungen und anwendungsunabhängigen Viewern.
Dieses Thema ist wie folgt organisiert:
- Informationen zur IFilter-Schnittstelle
- Suchen des IFilter-Klassenbezeichners
- Zusätzliche Ressourcen
- Verwandte Themen
Informationen zur IFilter-Schnittstelle
Microsoft Windows Search verwendet Filter, um den Inhalt von Elementen für die Aufnahme in einen Volltextindex zu extrahieren. Sie können Windows Search erweitern, um neue oder proprietäre Dateitypen zu indizieren, indem Sie Filter zum Extrahieren des Inhalts und Eigenschaftenhandler zum Extrahieren der Eigenschaften von Dateien schreiben.
Die IFilter-Schnittstelle ist so konzipiert, dass sie den spezifischen Anforderungen von Volltext-Suchmaschinen entspricht. Volltextsuchmaschinen wie Windows Search rufen die IFilter-Methoden auf, um Text- und Eigenschaftsinformationen zu extrahieren und einem Index hinzuzufügen. Windows Search bricht die Ergebnisse der zurückgegebenen IFilter::GetText-Methode in Wörter auf, normalisiert sie und speichert sie in einem Index. Wenn verfügbar, verwendet die Suchmaschine die Sprachcode-ID (Language Code Identifier, LCID) eines Textabschnitts, um sprachspezifische Wörtertrennung und Normalisierung durchzuführen.
Windows Search verwendet drei Funktionen, die in der folgenden Tabelle beschrieben sind, um auf registrierte Filterhandler zuzugreifen (Implementierungen der IFilter-Schnittstelle ). Diese Funktionen sind besonders hilfreich beim Laden und Binden an den Filterhandler eines eingebetteten Objekts.
| Funktion | Description |
|---|---|
| LoadIFilter | Ruft einen Zeiger auf den IFilter ab, der für den angegebenen Inhaltstyp am besten geeignet ist. |
| BindIFilterFromStorage | Ruft einen Zeiger auf den IFilter ab, der für den Inhalt in einem IStorage Interface - Objekt am besten geeignet ist. |
| BindIFilterFromStream | Ruft einen Zeiger auf den IFilter ab, der am besten für einen angegebenen Klassenbezeichner (CLSID) geeignet ist, der aus einer Datenstromvariable abgerufen wird. |
Die IFilter-Schnittstelle verfügt über fünf Methoden, die in der folgenden Tabelle beschrieben sind.
| Methode | Description |
|---|---|
| IFilter::Init | Initialisiert eine Filtersitzung. |
| IFilter::GetChunk | Positioniert IFilter am Anfang des ersten oder nächsten Abschnitts und gibt einen Deskriptor zurück. |
| IFilter::GetText | Ruft Text aus dem aktuellen Abschnitt ab. |
| IFilter::GetValue | Ruft Werte aus dem aktuellen Block ab. |
| IFilter::BindRegion | Ruft eine Schnittstelle ab, die den angegebenen Teil des Objekts darstellt. Reserviert für zukünftige Verwendung. |
Isolationsprozess
Windows Search führt IFilter im Sicherheitskontext des lokalen Systems mit eingeschränkten Rechten aus. In diesem IFilter-Host-Isolationsprozess werden mehrere Rechte entfernt:
- Eingeschränkter Code
- Jeder
- Lokal
- Interaktiv
- Authentifizierte Benutzer
- Integrierte Benutzer
- Benutzersicherheits-ID (SID)
Das Entfernen dieser Rechte bedeutet, dass die IFilter-Schnittstelle keinen Zugriff auf das Datenträgersystem oder Netzwerk oder auf Funktionen der Benutzeroberfläche oder Zwischenablage hat. Darüber hinaus wird der Isolationsprozess unter einem Auftragsobjekt ausgeführt, das verhindert, dass untergeordnete Prozesse erstellt werden, und dem Arbeitssatz wird ein Grenzwert von 100 MB auferlegt. Der Host-Isolationsprozess der IFilter-Schnittstelle erhöht die Stabilität der Indexierungsplattform wegen möglicher falsch implementierter Drittanbieterfilter.
Hinweis
Filterhandler müssen geschrieben werden, um Puffer zu verwalten und ordnungsgemäß zu stapeln. Alle Zeichenfolgenkopien müssen explizite Überprüfungen aufweisen, um Pufferüberläufe zu schützen. Sie sollten immer die zugeordnete Größe des Puffers überprüfen. Sie sollten immer die Größe der Daten anhand der Größe des Puffers testen.
IFilter dlls
IFilter DLLs implementieren die IFilter-Schnittstelle , um einem Client das Extrahieren von Text- und Eigenschaftswertinformationen aus einem Dateityp, einer Klasse oder einem wahrgenommenen Typ zu ermöglichen. Der Windows Search-Filterprozess SearchFilterHost.exe bindet an den IFilter , der für die Klasse, den wahrgenommenen Typ oder die Namenserweiterung des Elements registriert ist.
IFilter-Struktur
Jeder IFilter ist eine DLL-Datei, die einen IN-Process Component Object Model (COM)-Server implementiert, um die angegebenen Filterfunktionen anzugeben. Die folgende Abbildung zeigt die Gesamtstruktur einer typischen IFilter-DLL. Ein komplexeres Beispiel könnte mehrere IFilter-Klassen implementieren.
Nativer Code
Filter müssen in nativem Code geschrieben werden, da potenzielle Versionsprobleme mit der Common Language Runtime (CLR) bei Prozessen auftreten können, in denen mehrere Add-Ins ausgeführt werden. In Windows 7 und höher und höher werden Filter, die in verwaltetem Code geschrieben wurden, explizit blockiert.
Suchen des IFilter-Klassenbezeichners
Die Klasse der IFilter-DLL wird unter dem Registrierungsschlüssel "PersistentHandler" registriert. Im folgenden Beispiel für HTML-Dateien wird veranschaulicht, wie Die IFilter-DLL für ein HTML-Dokument gefunden wird. Dieses Beispiel folgt einer ähnlichen Logik wie die, die das System verwendet, um den IFilter zu finden, der einem Element zugeordnet ist.
- Überprüfen Sie, ob die Erweiterung für den Dateityp, für den die DLL-Filter einen PersistentHandler registriert haben, unter dem Registrierungseintrag \HKEY_LOCAL_MACHINE\SOFTWARE\Classesregistriert ist. Lassen Sie diesen Schlüssel sein
Value1. Wenn dieser Eintrag bereits vorhanden ist, fahren Sie mit Schritt 4 dieses Verfahrens fort und verwenden SieValue1an entsprechender Stelle. Die Werte sind vom Typ REG_SZ.
\HKEY_LOCAL_MACHINE
SOFTWARE
Classes
.htm
PersistentHandler
{EEC97550-47A9-11CF-B952-00AA0051FE20}
- Wenn für die Erweiterung kein persistenter Handler registriert ist, suchen Sie alternativ die CLSID, die dem Dokumenttyp unter dem Registrierungseintrag \HKEY_LOCAL_MACHINE\SOFTWARE\Classeszugeordnet ist. Lassen Sie diesen Schlüssel sein
Value2.
\HKEY_LOCAL_MACHINE
SOFTWARE
Classes
htmlfile
= Class for WWW HTML files
CLSID
{25336920-03F9-11CF-8FD0-00AA00686F13}
- Ermitteln Sie, ob ein PersistentHandler für die CLSID registriert ist. Verwenden Sie das in Schritt 2 bestimmte
Value2, um den PersistentHandler für den Eintrag \HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\Value2 zu finden. Lassen Sie diesen Schlüssel seinValue3.
\HKEY_LOCAL_MACHINE
SOFTWARE
Classes
htmlfile
= Class for WWW HTML files
PersistentHandler
{EEC97550-47A9-11CF-B952-00AA0051FE20}
- Bestimmen Sie die IFilter-GUID des persistenten Handlers. Verwenden Sie
Value1undValue3, um die GUID des IFilter Persistent Handlers für den Dokumenttyp zu finden. Der Wert unter dem Registrierungseintrag \HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\Value1 oder 3\PersistentAddinsRegistered\ 89BCB740-6119-101A-BCB7-00DD010655AF"/> gibt den PersistentHandler GUID des IFilter für diesen Dokumenttyp zurück. Lassen Sie diesen Schlüssel seinValue4. In diesem Beispiel ist die IFilter-Schnittstellen-GUID 89BCB740-6119-101A-BCB7-00DD010655AF.
HKEY_LOCAL_MACHINE
SOFTWARE
Classes
{EEC97550-47A9-11CF-B952-00AA0051FE20}
= HTML File Persistent Handler
Data type REG_SZ
PersistentAddinsRegistered
{89BCB740-6119-101A-BCB7-00DD010655AF}
Data type REG_SZ
default = {E0CA5340-4534-11CF-B952-00AA0051FE20}
Hinweis
In diesem Beispiel ist die IFilter-DLL für HTML-Dokumente nlhtml.dll.
IFilter::GetChunk und Gebietsschemacode-Identifikatoren
Die LCID des Texts kann innerhalb einer einzelnen Datei geändert werden. Beispielsweise kann der Text eines Handbuchs zwischen Englisch (en-us) und Spanisch (es) wechseln, oder der Text kann ein einzelnes Wort in einer anderen Sprache als der Hauptsprache enthalten. In beiden Fällen muss Ihr IFilter jedes Mal, wenn sich die LCID ändert, einen neuen Block beginnen. Da die LCID zum Auswählen eines geeigneten Worttrennzeichens verwendet wird, ist es sehr wichtig, dass Sie sie richtig identifizieren. Wenn der IFilter das Gebietsschema des Texts nicht bestimmen kann, sollte er eine LCID von Null mit dem Block zurückgeben. Durch das Zurückgeben einer LCID von Null kommt die Spracherkennungstechnologie (Language Auto-Detection, LAD) von Windows Search zum Einsatz, um die Gebietsschema-ID des Abschnitts zu ermitteln. Wenn Windows Search keine Übereinstimmung finden kann, wird standardmäßig die System-Standardsprache verwendet (durch Aufrufen der GetSystemDefaultLocaleName Funktion). Weitere Informationen finden Sie unter IFilter::GetChunk, CHUNK_BREAKTYPE, CHUNKSTATE und STAT_CHUNK.
Wenn Sie das Dateiformat kontrollieren und es derzeit keine Gebietsschemainformationen enthält, sollten Sie eine Benutzerfunktion hinzufügen, um die richtige Gebietsschemaidentifikation zu ermöglichen. Die Verwendung eines nicht zusammenpassenden Worttrenners kann zu einer schlechten Abfrageerfahrung für den Benutzer führen. Weitere Informationen finden Sie unter IWordBreaker.
Hinweis
Filter sind Dateitypen zugeordnet, wie durch Dateinamenerweiterungen, MIME-Typen oder CLSIDs angegeben. Während ein Filter mehrere Dateitypen verarbeiten kann, funktioniert jeder Typ nur mit einem Filter.
Weitere Ressourcen
- Das IFilterSample-Codebeispiel , das auf GitHub verfügbar ist, veranschaulicht, wie eine IFilter-Basisklasse für die Implementierung der IFilter-Schnittstelle erstellt wird.
- Eine Übersicht über den Indizierungsprozess finden Sie unter "Indizierungsprozess".
- Eine Übersicht über Dateitypen finden Sie unter "Dateitypen".
- Informationen zum Abfragen von Dateizuordnungsattributen für einen Dateityp finden Sie unter "PerceivedTypes", "SystemFileAssociations" und "Application Registration".
Zugehörige Themen
Bewährte Methoden zum Erstellen von Filterhandlern in der Windows-Suche
Zurückgeben von Eigenschaften aus einem Filterhandler
Filterhandler, die mit Windows ausgeliefert werden
Implementieren von Filterhandlern in der Windows-Suche