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:

Hinweis

Ein Filterhandler ist eine Implementierung der IFilter-Schnittstelle .

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:

  1. 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}
  1. 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:

  1. Ü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}
  1. 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}
  1. 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}
  1. 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

Entwickeln von Filterhandlern

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

Implementieren von Filterhandlern in Windows Search

Testen von Filterhandlern