Registrieren von Filterhandlern
Ihr Filterhandler muss registriert sein. 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 Windows Search
- Ersetzen vorhandener Filterhandler
- Suchen eines Filterhandlers für eine bestimmte Dateierweiterung
- Weitere Ressourcen
- Zugehörige 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 Anwendungsdefiniert | BESCHREIBUNG |
---|---|---|
89BCB740-6119-101A-BCB7-00DD010655AF | Anwendung | 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 | Hierbei handelt es sich um 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 Nicht-Administratorrechte zulässt. Da sich der Standardspeicherort des Visual Studio-Projekts 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 SearchFilterHost.exe Zugriff zuzulassen.
Wenn Sie einen neuen Filterhandler registrieren, wird empfohlen, einen aussagekräftigen Namen zu verwenden, z. B. HTML-IFilter.
So registrieren Sie Ihren neuen Filterhandler:
- Geben Sie die GUID für Erweiterung und persistenten Handler an, die den Filterhandler verwenden:
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 COM-Klasse (Component Object Model) darstellt, und/oder für eine Dateinamenerweiterung. Sie können beide Filter registrieren, wenn Sie einen Filterhandler für eine Klasse und einen anderen Filterhandler für eine Dateinamenerweiterung innerhalb der Klasse registrieren müssen. 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ätzlichen Eintrag PersistentHandler. Dieser Eintrag gibt die Klasse an, die für das Brokern von Anforderungen an die persistenten Objekte der Beispielklasse verantwortlich 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 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 Apartment an. Beachten Sie, dass Filterhandler immer threadsicher sein sollten.
Die folgenden Beispielregistrierungseinträge beziehen sich auf 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 gängige 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 z. B. von den Filterhandlern .txt, .html und RTF 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 der 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 Dateinamenerweiterung zu finden. Die folgenden Beispielregistrierungseinträge veranschaulichen, wie dies für HTML-Dateien geschieht. 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 angegebene Dateinamenerweiterung:
- Überprüfen Sie, ob die Erweiterung für den Typ der gefilterten Dateien über einen persistenten Handler unter dem Registrierungseintrag \HKEY_LOCAL_MACHINE\SOFTWARE\Classes.extension registriert ist. Wenn dies der Fall ist, lautet dieser Schlüssel {PersistentHandlerGUID}.
HKEY_LOCAL_MACHINE
SOFTWARE
Classes
.htm
PersistentHandler
{PersistentHandlerGUID}
- Wenn kein persistenter Handler für die Erweiterung registriert ist, suchen Sie unter dem Registrierungseintrag \HKEY_LOCAL_MACHINE\SOFTWARE\Classes nach der CLSID, die dem Dokumenttyp zugeordnet ist. Lassen Sie diesen Schlüssel {ApplicationGUID} sein. Ermitteln Sie dann, ob ein persistenter Handler für die CLSID registriert ist: Suchen Sie mithilfe von {ApplicationGUID} nach dem persistenten Handler für den Eintrag \HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{ApplicationGUID}. Dieser Schlüssel ist {PersistentHandlerGUID}.
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 mithilfe von {PersistentHandlerGUID} nach der GUID des persistenten Handlers für den Dokumenttyp. Der Wert unter dem Registrierungseintrag HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{PersistentHandlerGUID}\PersistentAddinsRegistered\ 89BCB740-6119-101A-BCB7-00DD010655AF ergibt die GUID des persistenten Handlers für diesen Dokumenttyp. Dieser Schlüssel ist {FilterHandlerCLSID}.
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 mithilfe von {FilterHandlerCLSID}, der im vorherigen Schritt ermittelt wurde, nach dem 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
Zusätzliche Ressourcen
- Das auf GitHub verfügbare IFilterSample-Codebeispiel veranschaulicht das Erstellen einer IFilter-Basisklasse zum Implementieren der IFilter-Schnittstelle.
- 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
Informationen zu Filterhandlern in Windows Search
Bewährte Methoden zum Erstellen von Filterhandlern in Windows Search
Zurückgeben von Eigenschaften von einem Filterhandler
Filterhandler, die mit Windows ausgeliefert werden