Filterhandlers registreren

Uw filterhandler moet zijn geregistreerd. U kunt ook een bestaande filterhandler voor een bepaalde bestandsnaamextensie vinden via het register of met behulp van de interface ILoadFilter.

Dit onderwerp is als volgt ingedeeld:

Notitie

Een filterhandler is een implementatie van de IFilter interface.

De GUID's die u nodig hebt voor het registreren van een nieuwe protocolhandler of om een bestaande protocolhandler te vinden, worden vermeld in de volgende tabel.

GUID Gebruiker of toepassing gedefinieerd Beschrijving
89BCB740-6119-101A-BCB7-00DD010655AF Applicatie De IFilter interface-GUID is een registersleutelconstante voor alle filterhandlers.
{PersistentHandlerGUID} Gebruiker Dit is de GUID voor de permanente handler.
{FilterHandlerCLSID} Gebruiker Dit is de klasse-id (CLSID) voor de filterhandler.
{ApplicationGUID} Gebruiker Dit is een tussenliggende (geaggregeerde) GUID.

Filterhandlers moeten worden geregistreerd in HKEY_LOCAL_MACHINE omdat SearchFilterHost.exe wordt uitgevoerd onder het SYSTEEM-account en daarom geen toegang hebben tot registersleutels voor HKEY_CURRENT_USER voor de aangemelde gebruiker. Bovendien moet de groep Gebruikers lees- en uitvoertoegang hebben tot de filterhandler .dll zelf, omdat SearchFilterHost.exe alle beheerdersrechten verwijdert en alleen niet-beheerdersrechten toestaat. Omdat de standaardlocatie van het Visual Studio-project zich in de map van de huidige gebruiker bevindt en dus geen leesmachtigingen voor de groep Gebruikers verleent, moet u de .dll verplaatsen of de ACL's wijzigen om SearchFilterHost.exe toegang toe te staan.

Wanneer u een nieuwe filterhandler registreert, wordt u aangeraden een beschrijvende naam te gebruiken, bijvoorbeeld HTML IFilter.

De nieuwe filterhandler registreren:

  1. Geef de extensie- en permanente handler-GUID op die de filterhandler gebruikt:
    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. Registreer uw filterhandler met de volgende sleutels en waarden:
    HKEY_LOCAL_MACHINE
       Software
          Classes
             CLSID
                {FilterHandlerCLSID}
                   (Default) = {DescriptiveFilterHandlerName}
                   InprocServer32
                      (Default) = DLL Install Path
                      ThreadingModel = Both

Verouderde aanpak voor het registreren van filterhandlers

Deze methode wordt niet aanbevolen voor gebruik. Filters kunnen worden geregistreerd voor een CLSID die een COM-klasse (Component Object Model) vertegenwoordigt en/of voor een bestandsnaamextensie. U kunt beide filters registreren als u een filterhandler voor een klasse moet registreren en een andere filterhandler voor een bestandsnaamextensie binnen de klasse. Houd er rekening mee dat een filterhandler die is geregistreerd voor een bestandsnaamextensie voorrang heeft op een filterhandler voor een CLSID.

Deze vermeldingen zijn standaard OLE-registervermeldingen tot en met inbegrip van de vermelding voor de klasse CLSID\{ApplicationGUID}. Het DLL-sample.dll implementeert het gedrag van actieve objecten voor de .txt klasse. Let op het extra invoeritem, PersistentHandler. Met deze vermelding geeft u de klasse op die verantwoordelijk is voor het brokeren van aanvragen voor de permanente objecten van de voorbeeldklasse. De vermelding onder PersistentAddinsRegistered identificeert de implementatie die verantwoordelijk is voor de interface met de naam 89BCB740-6119-101A-BCB7-00DD010655AF(IID_IFilter). De klasse die IID_IFilter implementeert, bevat standaard OLE-registervermeldingen. Het DLL-bestand inprocServer32 wordt geladen via het standaard OLE-mechanisme.

Windows Search bekijkt het threadingmodel dat is opgegeven voor de filterhandler. Wanneer het threading model is ingesteld op Both, moet de filterhandler thread-safe zijn; als het niet thread-safe is, specificeer dan Apartment. Houd er rekening mee dat filterhandlers altijd thread-veilig moeten zijn.

De volgende voorbeeldregistervermeldingen zijn voor een filterhandler die is geregistreerd voor een klasse- en bestandsnaamextensie. {PersistentHandlerGUID} en {FilterHandlerCLSID} worden gebruikt als variabelen die waarden aangeven die moeten worden opgegeven door de maker van de filterhandler. De waarden zijn van het type 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

Bestaande filterhandlers vervangen

U wordt aangeraden de ingebouwde filterhandlers niet te vervangen voor algemene bestandstypen, zoals .txt, .doc, .html, .URL, enzovoort, omdat dit ongewenste gevolgen kan hebben voor andere systeemonderdelen. Het indexeren van e-mailberichtteksten is bijvoorbeeld afhankelijk van de .txt, .htmlen .rtf filterhandlers.

Als een nieuwe filterhandler voor een bestandstype wordt geïnstalleerd als vervanging voor een bestaande filterregistratie, moet het installatieprogramma de huidige registratie opslaan en herstellen als de nieuwe filterhandler wordt verwijderd. Er is geen mechanisme voor het koppelen van filters. Daarom is de nieuwe filterhandler verantwoordelijk voor het repliceren van de benodigde functionaliteit van het oude filter.

Een filterhandler voor een bepaalde bestandsextensie zoeken

U kunt de interface ILoadFilter gebruiken om een filterhandler voor een bepaalde bestandsnaamextensie te vinden. In de volgende voorbeeldregistervermeldingen ziet u hoe u dit kunt doen voor HTML-bestanden. In dit voorbeeld is de filterhandler voor HTML-documenten nlhtml.dll. De waarden zijn van het type REG_SZ.

De filterhandler voor een bepaalde bestandsnaamextensie zoeken:

  1. Controleer of de extensie voor het type bestanden dat wordt gefilterd, een permanente handler heeft geregistreerd onder de registervermelding \HKEY_LOCAL_MACHINE\SOFTWARE\Classes.extension. Zo ja, laat u deze sleutel {PersistentHandlerGUID} zijn.
    HKEY_LOCAL_MACHINE
       SOFTWARE
          Classes
             .htm
                PersistentHandler
                   {PersistentHandlerGUID}
  1. Als er geen permanente handler is geregistreerd voor de extensie, zoekt u de CLSID die is gekoppeld aan het documenttype onder de registervermelding \HKEY_LOCAL_MACHINE\SOFTWARE\Classes. Laat deze sleutel {ApplicationGUID} zijn. Bepaal vervolgens of een permanente handler is geregistreerd voor de CLSID: met behulp van {ApplicationGUID} zoekt u de permanente handler voor de \HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{ApplicationGUID} vermelding. Laat deze sleutel {PersistentHandlerGUID} zijn.
    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. Bepaal de GUID van de permanente handler: met behulp van {PersistentHandlerGUID} zoekt u de permanente handler-GUID voor het documenttype. De waarde onder de registervermelding HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{PersistentHandlerGUID}\PersistentAddinsRegistered\ 89BCB740-6119-101A-BCB7-00DD010655AF levert de permanente handler-GUID voor dit documenttype op. Laat deze sleutel {FilterHandlerCLSID} zijn.
    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. Bepaal de filterhandler: met behulp van {FilterHandlerCLSID} die in de vorige stap is vastgesteld, zoekt u de filterhandler onder de vermelding \HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{FilterHandlerCLSID}\InprocServer32. In dit voorbeeld is de beschrijvende naam van de filterhandler gebruikt HTML IFilter.
    HKEY_LOCAL_MACHINE
       SOFTWARE
          Classes
             CLSID
                {EEC97550-47A9-11CF-B952-00AA0051FE20}
                   (Default) = HTML IFilter
                    Data type  REG_SZ
                    InprocServer32
                    nlhtml.dll

Aanvullende bronnen

Ontwikkeling van filterhandlers

Over Filterhandlers in Windows Search

aanbevolen procedures voor het maken van filterhandlers in Windows Search

eigenschappen retourneren van een filterhandler

Filterbehandelaars die met Windows worden geleverd

Filterhandlers implementeren in Windows Search

Filterhandlers testen