Inscription de gestionnaires de filtres

Votre gestionnaire de filtre doit être inscrit. Vous pouvez également localiser un gestionnaire de filtre existant pour une extension de nom de fichier donnée via le Registre ou à l’aide de l’interface ILoadFilter .

Cette rubrique est organisée comme suit :

Note

Un gestionnaire de filtres est une implémentation de l’interface IFilter .

Les GUID dont vous avez besoin pour inscrire un nouveau gestionnaire de protocole ou rechercher un gestionnaire de protocole existant sont répertoriés dans le tableau suivant.

Identifiant Unique Global (GUID) Utilisateur ou application défini Descriptif
89BCB740-6119-101A-BCB7-00DD010655AF Application Le GUID de l’interface IFilter est une constante de clé de Registre pour tous les gestionnaires de filtres.
{PersistentHandlerGUID} Utilisateur Il s’agit du GUID du gestionnaire persistant.
{FilterHandlerCLSID} Utilisateur Il s’agit de l’identificateur de classe (CLSID) du gestionnaire de filtres.
{ApplicationGUID} Utilisateur Il s’agit d’un GUID intermédiaire (agrégé).

Les gestionnaires de filtre doivent être inscrits dans HKEY_LOCAL_MACHINE, car SearchFilterHost.exe s’exécute sous le compte SYSTEM et ne peut donc pas accéder aux clés de Registre pour HKEY_CURRENT_USER pour l’utilisateur connecté. En outre, le groupe Utilisateurs doit disposer d’un accès en lecture et exécution au gestionnaire de filtres .dll lui-même, car SearchFilterHost.exe supprime tous les droits d’administrateur et autorise uniquement les droits non-administrateur. Étant donné que l’emplacement du projet Visual Studio par défaut se trouve dans le répertoire de l’utilisateur actuel et qu’il ne donne pas d’autorisations de lecture au groupe Utilisateurs, vous devez déplacer le .dll ou modifier les listes de contrôle d’accès pour autoriser l’accès SearchFilterHost.exe.

Lorsque vous inscrivez un nouveau gestionnaire de filtres, nous vous recommandons d’utiliser un nom descriptif, par exemple, IFilter HTML.

Pour inscrire votre nouveau gestionnaire de filtres :

  1. Spécifiez l’extension et le GUID du gestionnaire persistant qui utilisera le gestionnaire de filtres :
    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. Inscrivez votre gestionnaire de filtres avec les clés et valeurs suivantes :
    HKEY_LOCAL_MACHINE
       Software
          Classes
             CLSID
                {FilterHandlerCLSID}
                   (Default) = {DescriptiveFilterHandlerName}
                   InprocServer32
                      (Default) = DLL Install Path
                      ThreadingModel = Both

Approche obsolète pour l’inscription de gestionnaires de filtres

Cette approche n’est pas recommandée pour une utilisation. Les filtres peuvent être inscrits pour un CLSID qui représente une classe COM (Component Object Model) et/ou pour une extension de nom de fichier. Vous pouvez inscrire les deux filtres si vous devez inscrire un gestionnaire de filtres pour une classe et un autre gestionnaire de filtres pour une extension de nom de fichier dans la classe. Notez qu’un gestionnaire de filtre inscrit pour une extension de nom de fichier est prioritaire sur un gestionnaire de filtres pour un CLSID.

Ces entrées sont des entrées de Registre OLE standard jusqu’à l’entrée de la classe CLSID\{ApplicationGUID}. La DLL sample.dll implémente le comportement d’objet en cours d’exécution pour la classe .txt. Notez l'entrée supplémentaire, PersistentHandler. Cette entrée spécifie la classe responsable de la gestion des demandes aux objets persistants de la classe d'exemple. L’entrée sous PersistentAddinsRegistered identifie l’implémentation responsable de l’interface nommée 89BCB740-6119-101A-BCB7-00DD010655AF(IID_IFilter). La classe implémentant IID_IFilter a des entrées de Registre OLE standard. La DLL InprocServer32 est chargée via le mécanisme OLE standard.

Windows Search observe le modèle de thread spécifié pour le gestionnaire de filtres. Lorsque le modèle de threading est défini sur Les deux, le gestionnaire de filtres doit être thread safe ; sinon, s’il n’est pas thread safe, spécifiez Apartment. Notez que les gestionnaires de filtre doivent toujours être thread-safe.

Les exemples d’entrées de Registre suivants concernent un gestionnaire de filtres inscrit pour une extension de nom de fichier et de classe. {PersistentHandlerGUID} et {FilterHandlerCLSID} sont utilisés comme variables indiquant les valeurs qui doivent être spécifiées par le créateur du gestionnaire de filtres. Les valeurs sont de 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

Remplacement des gestionnaires de filtres existants

Nous vous recommandons de ne pas remplacer les gestionnaires de filtres intégrés pour les types de fichiers courants tels que .txt, .doc, .html, .url, etc., car cela peut avoir des effets indésirables sur d’autres composants système. L’indexation des corps des messages électroniques dépend des gestionnaires de filtres .txt, .htmlet .rtf, par exemple.

Si un nouveau gestionnaire de filtres pour un type de fichier est installé en remplacement d’une inscription de filtre existante, le programme d’installation doit enregistrer l’inscription actuelle et le restaurer si le nouveau gestionnaire de filtres est désinstallé. Il n’existe aucun mécanisme permettant de chaîner des filtres. Par conséquent, le nouveau gestionnaire de filtres est chargé de répliquer toutes les fonctionnalités nécessaires de l’ancien filtre.

Recherche d’un gestionnaire de filtre pour une extension de fichier donnée

Vous pouvez utiliser l’interface ILoadFilter pour rechercher un gestionnaire de filtres pour une extension de nom de fichier donnée. Les exemples d’entrées de Registre suivants illustrent comment procéder pour les fichiers HTML. Dans cet exemple, le gestionnaire de filtres pour les documents HTML est nlhtml.dll. Les valeurs sont de type REG_SZ.

Pour rechercher le gestionnaire de filtres pour une extension de nom de fichier donnée :

  1. Vérifiez si l’extension pour le type de fichiers filtrés a un gestionnaire persistant inscrit sous l’entrée de Registre \HKEY_LOCAL_MACHINE\SOFTWARE\Classes.extension. Dans ce cas, laissez cette clé être {PersistentHandlerGUID}.
    HKEY_LOCAL_MACHINE
       SOFTWARE
          Classes
             .htm
                PersistentHandler
                   {PersistentHandlerGUID}
  1. S’il n’existe pas de gestionnaire persistant inscrit pour l’extension, recherchez le CLSID associé au type de document sous l’entrée de Registre \HKEY_LOCAL_MACHINE\SOFTWARE\Classes. Laissez cette clé être {ApplicationGUID}. Déterminez ensuite si un gestionnaire persistant est inscrit pour le CLSID : à l’aide de {ApplicationGUID} localisez le gestionnaire persistant pour l’entrée \HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{ApplicationGUID}. Laissez cette clé être {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. Déterminez le GUID du gestionnaire persistant : à l’aide de {PersistentHandlerGUID}, recherchez le GUID du gestionnaire persistant pour le type de document. La valeur sous l’entrée de Registre HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{PersistentHandlerGUID}\PersistentAddinsRegistered\ 89BCB740-6119-101A-BCB7-00DD010655AF génère le GUID du gestionnaire persistant pour ce type de document. Laissez cette clé être {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. Déterminez le gestionnaire de filtres : à l’aide de {FilterHandlerCLSID} qui a été déterminé à l’étape précédente, recherchez le gestionnaire de filtres sous l’entrée \HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{FilterHandlerCLSID}\InprocServer32. Dans cet exemple, le nom du gestionnaire de filtre descriptif utilisé est IFilter HTML.
    HKEY_LOCAL_MACHINE
       SOFTWARE
          Classes
             CLSID
                {EEC97550-47A9-11CF-B952-00AA0051FE20}
                   (Default) = HTML IFilter
                    Data type  REG_SZ
                    InprocServer32
                    nlhtml.dll

Ressources supplémentaires

Développement de gestionnaires de filtres

À propos des gestionnaires de filtres dans Windows Search

Meilleures pratiques pour la création de gestionnaires de filtres dans Windows Search

Retour de propriétés à partir d’un gestionnaire de filtres

Gestionnaires de filtres fournis avec Windows

Implémentation de gestionnaires de filtres dans Windows Search

Test des gestionnaires de filtres