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:

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 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:

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

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

Entwickeln von Filterhandlern

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

Implementieren von Filterhandlern in Windows Search

Testen von Filterhandlern