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.
Der Filterhandler muss registriert werden. Sie können auch einen vorhandenen Filterhandler für eine bestimmte Dateinamenerweiterung entweder über die Registrierung oder über die ILoadFilter-Schnittstelle suchen.
Dieses Thema ist wie folgt organisiert:
- Registrieren von Filterhandlern für die Windows-Suche
- Ersetzen vorhandener Filterhandler
- Suchen eines Filterhandlers für eine bestimmte Dateierweiterung
- Zusätzliche Ressourcen
- Verwandte Themen
Hinweis
Ein Filterhandler ist eine Implementierung der IFilter-Schnittstelle .
Registrieren von Filterhandlern für Windows Search
Die GUIDs, die Sie zum Registrieren eines neuen Protokollhandlers oder zum Suchen eines vorhandenen Protokollhandlers benötigen, sind in der folgenden Tabelle aufgeführt.
| GUID | Benutzer oder Anwendung definiert | Description |
|---|---|---|
| 89BCB740-6119-101A-BCB7-00DD010655AF | Application | Die GUID der IFilter-Schnittstelle ist eine Registrierungsschlüsselkonstante für alle Filterhandler. |
| {PersistentHandlerGUID} | Benutzer | Dies ist die GUID für den persistenten Handler. |
| {FilterHandlerCLSID} | Benutzer | Dies ist der Klassenbezeichner (CLSID) für den Filterhandler. |
| {ApplicationGUID} | Benutzer | Dies ist eine Zwischen-GUID (aggregierte). |
Filterhandler müssen in HKEY_LOCAL_MACHINE registriert werden, da SearchFilterHost.exe unter dem SYSTEM-Konto ausgeführt wird und daher nicht auf Registrierungsschlüssel für HKEY_CURRENT_USER für den angemeldeten Benutzer zugreifen kann. Darüber hinaus muss die Gruppe "Benutzer" Lese- und Ausführungszugriff auf den Filterhandler .dll selbst haben, da SearchFilterHost.exe alle Administratorrechte entfernt und nur Nicht-Administratorrechte zulässt. Da sich der Standardmäßige Visual Studio-Projektspeicherort im Verzeichnis des aktuellen Benutzers befindet und der Gruppe "Benutzer" keine Leseberechtigungen erteilt, müssen Sie entweder die .dll verschieben oder die ACLs ändern, um SearchFilterHost.exe Zugriff zu ermöglichen.
Wenn Sie einen neuen Filterhandler registrieren, empfiehlt es sich, einen beschreibenden Namen zu verwenden, z. B. HTML-IFilter.
So registrieren Sie den neuen Filterhandler:
- Geben Sie die GUID der Erweiterung und des persistenten Handlers an, die den Filterhandler verwenden soll:
HKEY_LOCAL_MACHINE
Software
Classes
.txt
PersistentHandler
(Default) = {PersistentHandlerGUID}
HKEY_LOCAL_MACHINE
Software
Classes
CLSID
{PersistentHandlerGUID}
PersistentAddinsRegistered
{89BCB740-6119-101A-BCB7-00DD010655AF}l
(Default) = {FilterHandlerCLSID}
- Registrieren Sie den Filterhandler mit den folgenden Schlüsseln und Werten:
HKEY_LOCAL_MACHINE
Software
Classes
CLSID
{FilterHandlerCLSID}
(Default) = {DescriptiveFilterHandlerName}
InprocServer32
(Default) = DLL Install Path
ThreadingModel = Both
Veralteter Ansatz zum Registrieren von Filterhandlern
Dieser Ansatz wird nicht für die Verwendung empfohlen. Filter können für eine CLSID registriert werden, die eine Com-Klasse (Component Object Model) und/oder eine Dateinamenerweiterung darstellt. Sie können beide Filter registrieren, wenn Sie einen Filterhandler für eine Klasse registrieren müssen, und einen anderen Filterhandler für eine Dateinamenerweiterung innerhalb der Klasse. Beachten Sie, dass ein filterhandler, der für eine Dateinamenerweiterung registriert ist, Vorrang vor einem Filterhandler für eine CLSID hat.
Diese Einträge sind standardmäßige OLE-Registrierungseinträge bis einschließlich des Eintrags für die Klasse CLSID\{ApplicationGUID}. Die DLL-sample.dll implementiert das Ausführungsobjektverhalten für die .txt Klasse. Beachten Sie den zusätzliche Eintrag PersistentHandler. Dieser Eintrag gibt die Klasse an, die für das Brokering von Anforderungen an die persistenten Objekte der Beispielklasse verantwortlich ist. Der Eintrag unter PersistentAddinsRegistered identifiziert die Implementierung, die für die Schnittstelle mit dem Namen 89BCB740-6119-101A-BCB7-00DD010655AF(IID_IFilter) verantwortlich ist. Die Klasse, die IID_IFilter implementiert, enthält standardmäßige OLE-Registrierungseinträge. Die InprocServer32-DLL wird über den standardmäßigen OLE-Mechanismus geladen.
Windows Search beobachtet das für den Filterhandler angegebene Threadingmodell. Wenn das Threadingmodell auf "Beide" festgelegt ist, muss der Filterhandler threadsicher sein. andernfalls, wenn es nicht threadsicher ist, geben Sie die Wohnung an. Beachten Sie, dass Filterhandler immer threadsicher sein sollten.
Die folgenden Beispielregistrierungseinträge gelten für einen Filterhandler, der für eine Klassen- und Dateinamenerweiterung registriert ist. {PersistentHandlerGUID} und {FilterHandlerCLSID} werden als Variablen verwendet, die Werte angeben, die vom Ersteller des Filterhandlers angegeben werden müssen. Die Werte sind vom Typ REG_SZ.
HKEY_LOCAL_MACHINE
Software
Classes
.txt
(Default) = SampleFile
SampleFile
(Default) = Class for Sample Files
CLSID
(Default) = {ApplicationGUID}
CLSID
{ApplicationGUID}
(Default) = Sample Files
InprocServer32
(Default) = sample.dll
PersistentHandler
(Default) = {PersistentHandlerGUID}
{PersistentHandlerGUID}
(Default) = Sample file persistent handler
PersistentAddinsRegistered
{89BCB740-6119-101A-BCB7-00DD010655AF}l
(Default) = {FilterHandlerCLSID}
{FilterHandlerCLSID}
(Default) = Sample Files
InprocServer32
(Default) = sampfilt.dll
ThreadingModel = Both
Ersetzen vorhandener Filterhandler
Es wird empfohlen, die integrierten Filterhandler nicht für allgemeine Dateitypen wie .txt, .doc, .html, URL usw. zu ersetzen, da dies unerwünschte Auswirkungen auf andere Systemkomponenten haben kann. Die Indizierung von E-Mail-Nachrichtentexten hängt beispielsweise von den .txt, .htmlund .rtf Filterhandlern ab.
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.
Suchen eines Filterhandlers für eine bestimmte Dateierweiterung
Sie können die ILoadFilter-Schnittstelle verwenden, um einen Filterhandler für eine bestimmte Dateinamenerweiterung zu finden. Die folgenden Beispielregistrierungseinträge veranschaulichen die Vorgehensweise für HTML-Dateien. In diesem Beispiel ist der Filter-Handler für HTML-Dokumente die nlhtml.dll. Die Werte sind vom Typ REG_SZ.
So suchen Sie den Filterhandler für eine bestimmte Dateinamenerweiterung:
- Überprüfen Sie, ob die Erweiterung für den gefilterten Dateityp einen beständigen Handler unter dem Registrierungseintrag \HKEY_LOCAL_MACHINE\SOFTWARE\Classes.extensionregistriert hat. Wenn dies der Fall ist, lassen Sie diesen Schlüssel {PersistentHandlerGUID} sein.
HKEY_LOCAL_MACHINE
SOFTWARE
Classes
.htm
PersistentHandler
{PersistentHandlerGUID}
- Wenn kein persistenter Handler für die Erweiterung registriert ist, suchen Sie die CLSID, die dem Dokumenttyp unter dem Registrierungseintrag \HKEY_LOCAL_MACHINE\SOFTWARE\Classeszugeordnet ist. Lassen Sie diesen Schlüssel {ApplicationGUID} sein. Ermitteln Sie dann, ob ein persistenter Handler für die CLSID registriert ist: Mithilfe von {ApplicationGUID} wird der persistente Handler für den Eintrag \HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{ApplicationGUID} gefunden. Lassen Sie diesen Schlüssel {PersistentHandlerGUID} sein.
HKEY_LOCAL_MACHINE
SOFTWARE
Classes
htmlfile
(Default) = Class for WWW HTML files
CLSID
(Default) = {25336920-03F9-11CF-8FD0-00AA00686F13}
CLSID
{25336920-03F9-11CF-8FD0-00AA00686F13}
PersistentHandler
(Default) = {PersistentHandlerGUID}
- Bestimmen Sie die GUID des persistenten Handlers: Mithilfe von {PersistentHandlerGUID} wird die GUID des persistenten Handlers für den Dokumenttyp gefunden. Der Wert unter dem Registrierungseintrag HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{PersistentHandlerGUID}\PersistentAddinsRegistered\ 89BCB740-6119-101A-BCB7-00DD010655AF liefert die persistente Handler-GUID für diesen Dokumenttyp. Lassen Sie diesen Schlüssel {FilterHandlerCLSID} sein.
HKEY_LOCAL_MACHINE
SOFTWARE
Classes
{PersistentHandlerGUID}
(Default) = HTML File Persistent Handler<dl>
REG_SZ {89BCB740-6119-101A-BCB7-00DD010655AF}
REG_SZ (Default) = {EEC97550-47A9-11CF-B952-00AA0051FE20}
- Bestimmen Sie den Filterhandler: Verwenden Sie {FilterHandlerCLSID}, die im vorherigen Schritt ermittelt wurde, suchen Sie den Filterhandler unter dem Eintrag \HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{FilterHandlerCLSID}\InprocServer32. In diesem Beispiel ist der verwendete beschreibende Filterhandlername HTML-IFilter.
HKEY_LOCAL_MACHINE
SOFTWARE
Classes
CLSID
{EEC97550-47A9-11CF-B952-00AA0051FE20}
(Default) = HTML IFilter
Data type REG_SZ
InprocServer32
nlhtml.dll
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
Informationen zu Filterhandlern in der Windows-Suche
Bewährte Methoden zum Erstellen von Filterhandlern in der Windows-Suche
Zurückgeben von Eigenschaften aus einem Filterhandler
Filterhandler, die mit Windows ausgeliefert werden