Registro de controladores de filtro

El controlador de filtro debe estar registrado. También puede buscar un controlador de filtro existente para una extensión de nombre de archivo determinada a través del Registro o mediante la interfaz ILoadFilter .

Este tema se organiza de la siguiente manera:

Nota

Un controlador de filtro es una implementación de la interfaz IFilter .

Los GUID que necesita para registrar un nuevo controlador de protocolo o para buscar un controlador de protocolo existente se muestran en la tabla siguiente.

GUID Usuario o aplicación definido Descripción
89BCB740-6119-101A-BCB7-00DD010655AF Application El GUID de la interfaz IFilter es una constante de clave del Registro para todos los controladores de filtro.
{PersistentHandlerGUID} Usuario Este es el GUID del controlador persistente.
{FilterHandlerCLSID} Usuario Este es el identificador de clase (CLSID) del controlador de filtros.
{ApplicationGUID} Usuario Se trata de un GUID intermedio (agregado).

Los controladores de filtro deben estar registrados en HKEY_LOCAL_MACHINE porque SearchFilterHost.exe se ejecuta en la cuenta SYSTEM y, por lo tanto, no puede acceder a las claves del Registro para HKEY_CURRENT_USER para el usuario que ha iniciado sesión. Además, el grupo Usuarios debe tener acceso de lectura y ejecución al propio controlador de filtros .dll porque SearchFilterHost.exe quita todos los derechos de administrador y solo permite derechos que no sean de administrador. Dado que la ubicación predeterminada del proyecto de Visual Studio está en el directorio del usuario actual y, por tanto, no concede permisos de lectura al grupo Usuarios, debe mover el .dll o cambiar las ACL para permitir el acceso SearchFilterHost.exe.

Al registrar un nuevo controlador de filtros, se recomienda usar un nombre descriptivo, por ejemplo, IFilter HTML.

Para registrar el nuevo controlador de filtros:

  1. Especifique la extensión y el GUID del controlador persistente que usará el controlador de filtro:
    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. Registre el controlador de filtros con las siguientes claves y valores:
    HKEY_LOCAL_MACHINE
       Software
          Classes
             CLSID
                {FilterHandlerCLSID}
                   (Default) = {DescriptiveFilterHandlerName}
                   InprocServer32
                      (Default) = DLL Install Path
                      ThreadingModel = Both

Enfoque obsoleto para registrar controladores de filtros

Este enfoque no se recomienda para su uso. Los filtros se pueden registrar para un CLSID que representa una clase Component Object Model (COM) o para una extensión de nombre de archivo. Puede registrar ambos filtros si necesita registrar un controlador de filtros para una clase y otro controlador de filtro para una extensión de nombre de archivo dentro de la clase . Tenga en cuenta que un controlador de filtros registrado para una extensión de nombre de archivo tiene prioridad sobre un controlador de filtro para un CLSID.

Estas entradas son entradas estándar del Registro OLE hasta e incluyen la entrada de la clase CLSID\{ApplicationGUID}. El sample.dll DLL implementa el comportamiento del objeto en ejecución para la clase .txt. Anote la entrada adicional PersistentHandler. Esta entrada especifica la clase que es responsable de la intermediación de solicitudes a los objetos persistentes de la clase de ejemplo. La entrada en PersistentAddinsRegistered identifica la implementación responsable de la interfaz denominada 89BCB740-6119-101A-BCB7-00DD010655AF(IID_IFilter). La clase que implementa IID_IFilter tiene entradas estándar del Registro OLE. El archivo DLL InprocServer32 se carga a través del mecanismo OLE estándar.

Windows Search observa el modelo de subprocesos especificado para el controlador de filtros. Cuando el modelo de subprocesos se establece en Ambos, el controlador de filtros debe ser seguro para subprocesos; de lo contrario, si no es seguro para subprocesos, especifique Apartment. Tenga en cuenta que los controladores de filtro siempre deben ser seguros para subprocesos.

Las entradas del Registro de ejemplo siguientes son para un controlador de filtro registrado para una extensión de nombre de archivo y clase. {PersistentHandlerGUID} y {FilterHandlerCLSID} se usan como variables que indican los valores que el creador del controlador de filtros debe especificar. Los valores son de tipo 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

Reemplazar controladores de filtros existentes

Se recomienda no reemplazar los controladores de filtro integrados para tipos de archivo comunes, como .txt, .doc, .html, .url, etc., porque hacerlo puede tener efectos no deseados en otros componentes del sistema. La indexación de cuerpos de mensajes de correo electrónico depende de los controladores de filtro de .txt, .html y .rtf, por ejemplo.

Si se instala un nuevo controlador de filtros para un tipo de archivo como reemplazo de un registro de filtro existente, el instalador debe guardar el registro actual y restaurarlo si se desinstala el nuevo controlador de filtros. No hay ningún mecanismo para encadenar filtros. Por lo tanto, el nuevo controlador de filtros es responsable de replicar cualquier funcionalidad necesaria del filtro anterior.

Buscar un controlador de filtros para una extensión de archivo determinada

Puede usar la interfaz ILoadFilter para buscar un controlador de filtro para una extensión de nombre de archivo determinada. En las entradas del Registro de ejemplo siguientes se muestra cómo hacerlo para los archivos HTML. En este ejemplo, el controlador de filtros para documentos HTML es nlhtml.dll. Los valores son de tipo REG_SZ.

Para buscar el controlador de filtro para una extensión de nombre de archivo determinada:

  1. Compruebe si la extensión para el tipo de archivos filtrados tiene un controlador persistente registrado en la entrada del Registro \HKEY_LOCAL_MACHINE\SOFTWARE\Classes.extension. Si es así, deje que esta clave sea {PersistentHandlerGUID}.
    HKEY_LOCAL_MACHINE
       SOFTWARE
          Classes
             .htm
                PersistentHandler
                   {PersistentHandlerGUID}
  1. Si no hay un controlador persistente registrado para la extensión, busque el CLSID asociado al tipo de documento en la entrada del Registro \HKEY_LOCAL_MACHINE\SOFTWARE\Classes. Deje que esta clave sea {ApplicationGUID}. A continuación, determine si se registra un controlador persistente para clSID: con {ApplicationGUID} busque el controlador persistente para la entrada \HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{ApplicationGUID}. Deje que esta clave sea {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. Determine el GUID del controlador persistente: mediante {PersistentHandlerGUID} busque el GUID del controlador persistente para el tipo de documento. El valor de la entrada del Registro HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{PersistentHandlerGUID}\PersistentAddinsRegistered\ 89BCB740-6119-101A-BCB7-00DD010655AF produce el GUID del controlador persistente para este tipo de documento. Deje que esta clave sea {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. Determine el controlador de filtro: con {FilterHandlerCLSID} determinado en el paso anterior, busque el controlador de filtro en la entrada \HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{FilterHandlerCLSID}\InprocServer32. En este ejemplo, el nombre del controlador de filtro descriptivo usado es IFilter HTML.
    HKEY_LOCAL_MACHINE
       SOFTWARE
          Classes
             CLSID
                {EEC97550-47A9-11CF-B952-00AA0051FE20}
                   (Default) = HTML IFilter
                    Data type  REG_SZ
                    InprocServer32
                    nlhtml.dll

Recursos adicionales

Desarrollo de controladores de filtros

Acerca de los controladores de filtro en Windows Search

Procedimientos recomendados para crear controladores de filtro en Windows Search

Devolver propiedades de un controlador de filtros

Controladores de filtro que se envían con Windows

Implementación de controladores de filtro en Windows Search

Probar controladores de filtro