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:
- Registro de controladores de filtros para Windows Search
- Reemplazar controladores de filtros existentes
- Buscar un controlador de filtros para una extensión de archivo determinada
- Recursos adicionales
- Temas relacionados
Nota
Un controlador de filtro es una implementación de la interfaz IFilter .
Registro de controladores de filtros para Windows Search
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:
- 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}
- 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:
- 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}
- 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}
- 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}
- 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
- El ejemplo de código IFilterSample , disponible en GitHub, muestra cómo crear una clase base IFilter para implementar la interfaz IFilter .
- Para obtener información general sobre el proceso de indexación, consulte El proceso de indexación.
- Para obtener información general sobre los tipos de archivo, consulte Tipos de archivo.
- Para consultar los atributos de asociación de archivos de un tipo de archivo, vea PerceivedTypes, SystemFileAssociations y Application Registration.
Temas relacionados
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