Inscription de gestionnaires de filtres

Votre gestionnaire de filtre doit être inscrit. Vous pouvez également rechercher 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 :

Notes

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 pour rechercher un gestionnaire de protocole existant sont répertoriés dans le tableau suivant.

GUID Utilisateur ou application défini Description
89BCB740-6119-101A-BCB7-00DDD010655AF 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) pour le gestionnaire de filtre.
{ApplicationGUID} Utilisateur Il s’agit d’un GUID intermédiaire (agrégé).

Les gestionnaires de filtres 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 de l’utilisateur connecté. En outre, le groupe Utilisateurs doit avoir 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 n’accorde donc 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 filtre, nous vous recommandons d’utiliser un nom descriptif, par exemple HTML IFilter.

Pour inscrire votre nouveau gestionnaire de filtre :

  1. Spécifiez l’extension et le GUID du gestionnaire persistant qui utilisera le gestionnaire de filtre :
    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 des gestionnaires de filtres

Cette approche n’est pas recommandée. 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 filtre 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 filtre pour un CLSID.

Ces entrées sont des entrées de Registre OLE standard jusqu’à et y compris l’entrée pour la classe CLSID\{ApplicationGUID}. Le sample.dll 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 du répartiteur des demandes vers les objets persistants de l’exemple de classe. 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 Both, le gestionnaire de filtre doit être thread-safe ; sinon, s’il n’est pas thread-safe, spécifiez Apartment. Notez que les gestionnaires de filtres doivent toujours être thread-safe.

Les exemples d’entrées de Registre suivants concernent un gestionnaire de filtres inscrit pour une classe et une extension de nom de fichier. {PersistentHandlerGUID} et {FilterHandlerCLSID} sont utilisés comme variables indiquant des 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 de messages électroniques dépend des gestionnaires de filtres .txt, .html et .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 la restaurer si le nouveau gestionnaire de filtre est désinstallé. Il n’existe aucun mécanisme pour chaîner les filtres. Par conséquent, le nouveau gestionnaire de filtre 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 filtre 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. Si aucun gestionnaire persistant n’est 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}, recherchez 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 de 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-00DDD010655AF génère le GUID de 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 filtre : à l’aide de {FilterHandlerCLSID} qui a été déterminé à l’étape précédente, recherchez le gestionnaire de filtre sous l’entrée \HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{FilterHandlerCLSID}\InprocServer32. Dans cet exemple, le nom du gestionnaire de filtre descriptif utilisé est HTML IFilter.
    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 filtre fournis avec Windows

Implémentation de gestionnaires de filtres dans Windows Search

Test des gestionnaires de filtres