Bewährte Methoden zum Erstellen von Filterhandlern in der Windows-Suche
Microsoft Windows Search verwendet Filter, um den Inhalt von Elementen zu extrahieren, die in einen Volltextindex aufgenommen werden. Sie können Windows Search erweitern, um neue oder proprietäre Dateitypen zu indizieren, indem Sie Filterhandler zum Extrahieren des Inhalts und Eigenschaftenhandler zum Extrahieren der Eigenschaften von Dateien schreiben. Filter werden Dateitypen zugeordnet, die durch Dateinamenerweiterungen, MIME-Typen oder Klassenbezeichner (CLSIDs) gekennzeichnet sind. Während ein Filter mehrere Dateitypen verarbeiten kann, funktioniert jeder Typ mit nur einem Filter.
Dieses Thema enthält folgende Abschnitte:
nativer Code
In Windows 7 und höher werden in verwaltetem Code geschriebene Filter explizit blockiert. Filter MÜSSEN aufgrund potenzieller CLR-Versionsverwaltungsprobleme mit dem Prozess, in dem mehrere Add-Ins ausgeführt werden, in nativem Code geschrieben werden.
Sichere Codepraktiken für die Windows-Suche
Im Folgenden finden Sie Methoden zum Schreiben sicherer Anwendungen für die Verwendung mit Windows Search.
Für Abfrageanwendungen:
- Beim Schreiben von Suchclients sollten Sie die API auswählen, die in einem Sicherheitskontext ausgeführt wird, der dem Benutzer die geringsten Berechtigungen zulässt. Asp-Seiten können beispielsweise das IXSSO-Abfrageobjekt verwenden, das als Benutzerprozess ausgeführt wird.
Für IFilter und Sprachressourcen:
- Wenn ein neuer Filterhandler für einen Dateityp als Ersatz für eine vorhandene Filterregistrierung installiert wird, sollte das Installationsprogramm die aktuelle Registrierung speichern und wiederherstellen, wenn der neue Filterhandler deinstalliert wird. Es gibt keinen Mechanismus zum Verketten von Filtern. Daher ist der neue Filterhandler dafür verantwortlich, alle erforderlichen Funktionen des alten Filters zu replizieren.
- IFilter, Worttrennungen und Wortstammerkennungen für Windows Search werden im Kontext "Lokale Sicherheit" ausgeführt. Sie sollten geschrieben werden, um Puffer zu verwalten und ordnungsgemäß zu stapeln. Alle Zeichenfolgenkopien müssen explizite Überprüfungen aufweisen, um sich vor Pufferüberläufen zu schützen. Sie sollten immer die zugeordnete Größe des Puffers überprüfen und die Größe der Daten anhand der Größe des Puffers testen. Pufferüberläufe sind ein gängiges Verfahren zum Ausnutzen von Code, der keine Puffergrößeneinschränkungen erzwingt.
- IFilter, Worttrennungs- und Wortstammerkennungskomponenten sollten niemals die Funktion ExitProcess Function oder eine ähnliche API aufrufen, die einen Prozess und alle zugehörigen Threads beendet.
- Weisen Sie keine Ressourcen im DllMain-Einstiegspunkt zu oder geben Sie sie frei. Dies kann bei Tests mit geringer Ressourcenbelastung zu Fehlern führen.
- Alle Objekte so programmieren, dass sie threadsicher sind. Windows Search ruft eine beliebige instance einer Worttrennung oder eines Wortstamms in einem Thread auf, kann jedoch mehrere Instanzen gleichzeitig über mehrere Threads hinweg aufrufen.
- Vermeiden Sie es, temporäre Dateien zu erstellen oder in die Registrierung zu schreiben.
- Wenn Sie den Microsoft Visual C++ Compiler verwenden, stellen Sie sicher, dass Sie Ihre Anwendung mit der Option /GS kompilieren. Die Option /GS wird verwendet, um Pufferüberläufe zu erkennen. Die Option /GS platziert Sicherheitsüberprüfungen im kompilierten Code. Weitere Informationen finden Sie unter DllGetClassObject Function /GS (Buffer Security Check) im Abschnitt Visual C++-Compileroptionen des Platform SDK.
Zusätzliche Ressourcen
- Im IFilterSample-Beispiel wird veranschaulicht, wie eine IFilter-Basisklasse zum Implementieren der IFilter-Schnittstelle erstellt wird.
- Eine Übersicht über den Indizierungsprozess finden Sie unter Der Indizierungsprozess.
- Eine Übersicht über Dateitypen finden Sie unter Dateitypen.
- Informationen zum Abfragen von Dateizuordnungsattributen für einen Dateityp finden Sie unter PerceivedTypes, SystemFileAssociations und Anwendungsregistrierung.
Zugehörige Themen