Compartir a través de


Implementación de controladores de filtro en Windows Search

Es importante que comprenda la estructura DLL necesaria de un controlador de filtro (una implementación de la interfaz IFilter ).

Este tema se organiza de la siguiente manera:

Implementación y exportación de los puntos de entrada de DLL

Cada ARCHIVO DLL de IFilter (indicado por Ifilter.dll en esta sección) debe implementar y exportar los siguientes puntos de entrada. Estos puntos de entrada se suelen exportar mediante un archivo de definición de módulo (.def) para la interfaz IFilter o mediante la palabra clave __declspec(dllexport). El archivo DLL se puede registrar para estar en cualquier carpeta, pero normalmente reside en la carpeta %SystemRoot%\system32.

Los puntos de entrada dll se enumeran y se describen en la tabla siguiente.

Nombre de DLL Descripción del archivo DLL
Dllregisterserver El punto de entrada DllRegisterServer registra el archivo DLL como filtro en el Registro. Para registrar el archivo DLL, ejecute el programa regsvr32.exe con el nombre de archivo DLL de la interfaz IFilter como argumento: regsvr32.exe %SystemRoot%\system32\Ifilter.dll
DllUnregisterServer (Función) El punto de entrada de la función DllUnregisterServer quita el archivo DLL como controlador persistente en el Registro. Para anular el registro del archivo DLL, ejecute el programa regsvr32.exe con la /u marca : regsvr32.exe /u %SystemRoot%\system32\Ifilter.dll
DllGetClassObject (Función) El cliente de indexación de contenido llama al punto de entrada de la función DllGetClassObject , a través del Modelo de objetos componentes (COM), para crear un objeto de generador de clases para la interfaz IFilter y para obtener un puntero a la interfaz de generador de clases de ese objeto.
DllCanUnloadNow (Función) El cliente de indexación de contenido llama al punto de entrada de la función DllCanUnloadNow , a través de COM, para determinar si es posible descargar el archivo DLL de IFilter . La interfaz IFilter se descarga después de que no se use durante un intervalo de tiempo, según lo especificado por el valor del Registro FilterIdleTimeOut.

Implementación de la clase IFilter y el generador de clases

Normalmente, cada DLL de IFilter implementa al menos dos clases, como CFilter y CFilterCF. La clase CFilter genera el objeto de interfaz IFilter que implementa la funcionalidad de filtrado de contenido. Sus funciones miembro implementan los métodos de interfaz de la interfaz IFilter . Cada clase IFilter requiere un identificador de clase único (CLSID), que genera el implementador de la interfaz IFilter .

La clase CFilterCF genera el objeto de generador de clases para la interfaz IFilter . Se llama al generador de clases, a través de su interfaz IClassFactory , mediante el punto de entrada de la función DllGetClassObject del archivo DLL. La clase CFilterCF crea el objeto CFilter y devuelve un puntero a IUnknown. En casos más complejos, un IFilter puede implementar una jerarquía de clases en lugar de la clase CFilter única.

Heredar las interfaces COM

Windows Search 3.0 y versiones posteriores requieren que use IPersistStream por los siguientes motivos:

  • Para garantizar el rendimiento y la compatibilidad futura.
  • Para ayudar a aumentar la seguridad. IFilters implementados con IPersistStream son más seguros porque el contexto en el que se ejecuta la interfaz IFilter no necesita los derechos para abrir archivos en el disco o a través de la red.
  • Aunque Windows Search solo usa IPersistStream, la clase de interfaz IFilter también puede heredar las implementaciones de interfaz IPersistFile Interface o IPersistStorage Interface por motivos de compatibilidad con versiones anteriores.

Estas interfaces se declaran en archivos incluidos en el directorio mssdk\include y tienen identificadores de interfaz (IID) predefinidos. El cliente de indexación de contenido consulta la interfaz IFilter a través de IUnknown para determinar cuál de estas interfaces se usará al filtrar el contenido.

Implementación de los métodos de interfaz COM

La interfaz IFilter implementa los métodos IUnknown para la clase de interfaz IFilter y el generador de clases de interfaz IFilter . En la tabla siguiente se enumeran, en orden de vtable, las interfaces y los métodos específicos de la interfaz IFilter que debe implementar la interfaz IFilter . La interfaz IFilter debe implementar al menos IPersistStream, pero puede implementar interfaces derivadas de IPersist adicionales.

Interfaz COM Método
IClassFactory (Interfaz) CreateInstance, LockServer
IClassFactory2 (Interfaz) GetLicInfo, RequestLicKey, CreateInstanceLic
Ifilter IFilter::Init, IFilter::GetChunk, IFilter::GetText, IFilter::GetValue, IFilter::BindRegion
IPersist (interfaz) GetClassID
IPersistFile (interfaz) IsDirty, Load, Save, SaveCompleted, GetCurFile
IPersistStorage (Interfaz) IsDirty, Load, Save, GetSizeMax
Ipersiststream IsDirty, Load, Save, GetSizeMax

La página de referencia de cada método especifica los parámetros y el comportamiento funcional de ese método. Cada página de referencia también proporciona los códigos de resultado que se van a implementar para ese método. Las páginas de referencia de los métodos IFilter proporcionan los códigos específicos de la interfaz en FACILITY_ITF códigos de resultado que se van a implementar y el cliente de indexación de contenido también puede controlar cualquiera de los códigos de resultado genéricos, como FACILITY_NULL y FACILITY_WIN32. Para obtener más información, vea Estructura de códigos de error COM.

Métodos COM que no están implementados

La interfaz IFilter debe implementar al menos IPersistStream, pero no es necesario implementar interfaces derivadas de IPersist adicionales.

Windows Search no necesita implementar los métodos COM enumerados en la tabla siguiente.

Método que no es necesario Descripción
IPersistStream::IsDirty Los filtros deben devolver E_NOTIMPL.
IPersistStream::Save Los filtros deben devolver E_NOTIMPL.
IPersistStream::GetSizeMax Los filtros deben devolver E_NOTIMPL.
IFilter::BindRegion Los filtros deben devolver E_NOTIMPL.

Recursos adicionales

Desarrollo de controladores de filtros

Descripción 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

Registro de controladores de filtro

Probar controladores de filtro