Registrieren von Filterhandlern
Der Filterhandler muss registriert sein. Sie können auch einen vorhandenen Filterhandler für eine bestimmte Dateierweiterung entweder über die Registrierung oder mithilfe der ILoadFilter-Schnittstelle suchen.
Dieses Thema ist wie folgt organisiert:
- Registrieren von Filterhandlern für Windows Suchen
- Ersetzen vorhandener Filterhandler
- Suchen eines Filterhandlers für eine bestimmte Dateierweiterung
- Weitere Ressourcen
- Verwandte Themen
Hinweis
Ein Filterhandler ist eine Implementierung der IFilter-Schnittstelle.
Registrieren von Filterhandlern für Windows Suchen
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 Anwendungsdefiniert | BESCHREIBUNG |
|---|---|---|
| 89BCB740-6119-101A-BCB7-00DD010655AF | Application | Die IFilter-Schnittstellen-GUID ist eine Registrierungsschlüsselkonst constant für alle Filterhandler. |
| {PersistentHandlerGUID} | User | Dies ist die GUID für den persistenten Handler. |
| {FilterHandlerCLSID} | User | Dies ist der Klassenbezeichner (CLSID) für den Filterhandler. |
| {ApplicationGUID} | User | Dies ist eine zwischengeschaltete (aggregierte) GUID. |
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 über Lese- und Ausführungszugriff auf den Filterhandler .dll selbst verfügen, da SearchFilterHost.exe alle Administratorrechte entfernt und nur Nichtadministratorrechte zu lässt. Da sich der Visual Studio-Standardprojektspeicherort im Verzeichnis des aktuellen Benutzers befindet und daher der Gruppe Benutzer keine Leseberechtigungen erteilt, müssen Sie entweder die .dll verschieben oder die ACLs ändern, um den zugriff SearchFilterHost.exe zu ermöglichen.
Wenn Sie einen neuen Filterhandler registrieren, wird empfohlen, einen beschreibenden Namen zu verwenden, z. B. HTML IFilter.
So registrieren Sie den neuen Filterhandler:
- Geben Sie die Erweiterung und die persistente Handler-GUID an, die den Filterhandler verwendet:
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 Ihren 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 Component Object Model(COM)-Klasse darstellt, und/oder für eine Dateierweiterung. Sie können beide Filter registrieren, wenn Sie einen Filterhandler für eine Klasse und einen anderen Filterhandler für eine Dateierweiterung innerhalb der Klasse registrieren müssen. Beachten Sie, dass ein für eine Dateierweiterung registrierter Filterhandler Vorrang vor einem Filterhandler für eine CLSID hat.
Diese Einträge sind OLE-Standardregistrierungseinträge bis einschließlich des Eintrags für die Klasse CLSID \ {ApplicationGUID}. Die DLLsample.dll implementiert das Verhalten ausgeführter Objekte für die .txt Klasse. Beachten Sie den zusätzlichen Eintrag PersistentHandler. Dieser Eintrag gibt die Klasse an, die für das Brokern von Anforderungen an die persistenten Objekte der Beispielklasse zuständig ist. Der Eintrag unter PersistentAddinsRegistered identifiziert die Implementierung, die für die Schnittstelle 89BCB740-6119-101A-BCB7-00DD010655AF(IID _ IFilter) verantwortlich ist. Die Klasse, die IID _ IFilter implementiert, verfügt über OLE-Standardregistrierungseinträge. Die InprocServer32-DLL wird über den OLE-Standardmechanismus geladen.
Windows Die Suche beobachtet das threading-Modell, das für den Filterhandler angegeben ist. Wenn das Threadingmodell auf Beide festgelegt ist, muss der Filterhandler threadsicher sein. Andernfalls geben Sie Apartment an, wenn es nicht threadsicher ist. Beachten Sie, dass Filterhandler immer threadsicher sein sollten.
Die folgenden Beispielregistrierungseinträge gelten für einen Filterhandler, der für eine Klasse und eine Dateierweiterung 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 für gängige Dateitypen wie .txt, .doc, .html, .url usw. nicht zu ersetzen, da dies unerwünschte Auswirkungen auf andere Systemkomponenten haben kann. Die Indizierung von E-Mail-Nachrichtentexten hängt beispielsweise von .txt, .html und 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 für die Replikation aller erforderlichen Funktionen des alten Filters verantwortlich.
Suchen eines Filterhandlers für eine bestimmte Dateierweiterung
Sie können die ILoadFilter-Schnittstelle verwenden, um einen Filterhandler für eine bestimmte Dateierweiterung zu suchen. Die folgenden Beispielregistrierungseinträge veranschaulichen dies für HTML-Dateien. In diesem Beispiel wird der Filterhandler für HTML-Dokumente nlhtml.dll. Die Werte sind vom Typ REG _ SZ.
So suchen Sie den Filterhandler für eine bestimmte Dateierweiterung:
- Überprüfen Sie, ob die Erweiterung für den Typ der gefilterten Dateien über einen persistenten Handler verfügt, der unter dem Registrierungseintrag \ HKEY _ LOCAL MACHINE SOFTWARE _ \ \ Classes.extension registriert ist. Wenn dies der Fall ist, soll dieser 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 zugeordnet ist, unter dem Registrierungseintrag \ HKEY _ LOCAL MACHINE _ SOFTWARE \ \ Classes. Lassen Sie diesen Schlüssel {ApplicationGUID} verwenden. Bestimmen Sie dann, ob ein persistenter Handler für die CLSID registriert ist: Suchen Sie mit {ApplicationGUID} den persistenten Handler für den \ Eintrag HKEY _ LOCAL MACHINE SOFTWARE Classes _ \ \ \ CLSID \ {ApplicationGUID}. 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: Suchen Sie mit {PersistentHandlerGUID} die persistente Handler-GUID für den Dokumenttyp. Der Wert unter dem Registrierungseintrag HKEY _ LOCAL MACHINE SOFTWARE Classes _ \ \ \ CLSID \ {PersistentHandlerGUID} \ PersistentAddinsRegistered \ 89BCB740-6119-101A-BCB7-00DD010655AF gibt die persistente Handler-GUID für diesen Dokumenttyp zurück. Lassen Sie diesen Schlüssel {FilterHandlerCLSID} verwenden.
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: Suchen Sie mit {FilterHandlerCLSID} aus dem vorherigen Schritt den Filterhandler unter dem Eintrag \ HKEY _ LOCAL MACHINE SOFTWARE Classes _ \ \ \ CLSID \ {FilterHandlerCLSID} \ InprocServer32. In diesem Beispiel wird der beschreibende Filterhandlername HTML IFilter verwendet.
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 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 Dateiassoziationsattributen für einen Dateityp finden Sie unter PerceivedTypes, SystemFileAssociations und Application Registration.
Verwandte Themen
Informationen zu Filterhandlern in Windows Search
Bewährte Methoden zum Erstellen von Filterhandlern in Windows Suchen
Zurückgeben von Eigenschaften von einem Filterhandler
Filterhandler, die mit Windows