Las profundidades del I/O en Windows (6.ª entrega, final) ── Controladores de filtro y minifiltros: por qué Procmon y el análisis antivirus pueden interceptar el I/O

· Actualizado el: · · Windows, Win32, I/O, Minifiltros, Núcleo, Controladores de dispositivo, Seguridad, Investigación de fallos

Última entrega de la serie «Las profundidades del I/O en Windows».

Desde que en la primera entrega dibujamos, en el diagrama de la pila de dispositivos, un recuadro llamado «filtro del sistema de archivos (antivirus, cifrado, Procmon, etc.)», los que se interponen en el camino han ido asomando una y otra vez a lo largo de esta serie. La razón por la que Procmon puede registrar todo el I/O (primera entrega). «El acceso a archivos solo es lento en ese entorno» (segunda entrega). El punto de reanálisis (reparse point) que hace que OneDrive empiece a descargar en el instante en que se abre un archivo (quinta entrega). En esta entrega abordamos por fin de frente ese propio mecanismo de interposición —los controladores de filtro del sistema de archivos y los minifiltros— y recogemos todos los cabos sueltos de la serie.

1. La conclusión, antes que nada

  • «Interceptar el I/O» es un punto de extensión reconocido oficialmente por el sistema operativo. Un filtro del sistema de archivos puede ver, reescribir, denegar o procesar en su lugar las solicitudes dirigidas al sistema de archivos (capítulo 2). 1
  • El estándar actual son los minifiltros. Para resolver los problemas del modelo heredado que se interponía directamente en la pila de dispositivos (orden indeterminado, imposibilidad de descargarlo), el diseño evolucionó hacia el registro de callbacks en el Filter Manager (FltMgr) incluido en Windows (capítulo 2). 23
  • El funcionamiento se basa en callbacks pre/post. Se invocan antes y después de cada operación, en el orden de registro, es decir, por orden de altitude. Dejar pasar, completar, denegar o reescribir: las «opciones del controlador» que vimos en la primera entrega se aplican tal cual (capítulo 3). 2
  • La altitude («altura») determina el orden. A cada grupo según su finalidad se le asigna una banda numérica (Activity Monitor 360000-389999, Anti-Virus 320000-329999, etc.), y cada instancia adjunta a un volumen recibe un número único (capítulo 4). 45
  • Los «habitantes» de su PC se pueden ver con fltmc. Procmon (solo mientras está en ejecución), el antivirus, el filtro de nube de OneDrive: todos aparecen en esta lista (capítulo 5).
  • La configuración de exclusiones del antivirus significa «omitir el análisis de ese producto en concreto» y no afecta a otros minifiltros. Excluir implica una contrapartida que debilita la protección; para los volúmenes de desarrollo existe una opción más segura: Dev Drive (análisis asíncrono) (capítulo 6). 67
  • La investigación de «solo ese entorno va lento» parte de la columna Duration de Procmon y de la comparación de la configuración con fltmc (capítulo 7).

2. Historia de los que se interponen — de los filtros heredados a FltMgr

Un controlador de filtro del sistema de archivos es un controlador capaz de interceptar las solicitudes dirigidas al sistema de archivos (o al volumen subyacente). Puede registrar solicitudes, monitorizarlas, modificar su contenido e incluso denegarlas o procesarlas en su lugar; es la base de software como los antivirus, el cifrado, las copias de seguridad o el almacenamiento jerárquico. 1

El modelo de implementación más antiguo (los filtros heredados, o legacy) consistía en apilar el propio objeto de dispositivo directamente en la pila de dispositivos que vimos en la primera entrega. Como mecanismo es sencillo, pero en la práctica estaba plagado de problemas: el orden de apilamiento dependía del orden de carga y era difícil de garantizar; una vez apilado, no se podía retirar de forma segura (no se podía descargar); y era un caldo de cultivo para errores de incompatibilidad entre filtros.

Por eso Windows introdujo el Filter Manager (FltMgr). El propio FltMgr se sitúa en la pila como filtro incluido en el sistema operativo, mientras que cada funcionalidad de filtrado individual registra callbacks en FltMgr en forma de minifiltro. 2

Del modelo de filtros heredados al modelo de minifiltrosComparación entre el modelo heredado, donde los filtros se apilan directamente en la pila de dispositivos con orden dependiente de la carga y sin descarga segura, y el modelo de minifiltros, donde el Filter Manager (FltMgr) es lo único que se sitúa en la pila y los minifiltros registran callbacks con orden determinista según la altitude y posibilidad de carga y descarga en cualquier momentoModelo de minifiltros (estándar actual)Registro de callbacksRegistro de callbacksFilter Manager (FltMgr)Incluido en el SO. Es lo único que se sitúa en la pilaMinifiltro A (altitude alta)Minifiltro B (altitude baja)Sistema de archivosEl orden es determinista según la altitudeSe puede cargar en cualquier momento(los filtros compatibles también se pueden descargar)Modelo heredadoFiltro heredado AFiltro heredado BSistema de archivosEl orden depende de la cargaNo se puede descargar de forma segura

Figura 1: El cambio de generación. De «apilarse» en la pila a «registrarse» en FltMgr

Las ventajas del modelo de minifiltros están enumeradas oficialmente: se pueden cargar en cualquier momento, se puede controlar el orden y, si el filtro implementa un callback de descarga, incluso se puede descargar mientras el sistema está en funcionamiento (los filtros que no lo implementan o que rechazan la descarga no se pueden retirar). 3 Para convivir con los filtros heredados, FltMgr puede situarse en varios puntos de la pila en forma de múltiples «frames», y se garantiza que un minifiltro, al volver a cargarse tras ser descargado, regresa a la misma posición (la misma altitude). 2 Prácticamente todo el software moderno de antivirus, monitorización y sincronización es, hoy en día, un minifiltro.

3. Cómo funciona un minifiltro — los callbacks pre/post

Un minifiltro declara ante FltMgr «en qué operaciones está interesado». Por ejemplo, puede declarar que solo le interesan IRP_MJ_CREATE (abrir) e IRP_MJ_WRITE (escribir). A partir de ahí, cada vez que fluye una de esas operaciones, se invoca antes de la operación (callback pre) y después de la operación (callback post).

Secuencia de los callbacks pre/post entre el Administrador de I/O, FltMgr, los minifiltros y NTFSDiagrama de secuencia que muestra cómo el Administrador de I/O envía una solicitud a FltMgr, que invoca el callback pre de cada minifiltro en orden de altitude descendente antes de pasar la solicitud a NTFS, y luego invoca el callback post de cada minifiltro en orden inverso antes de devolver la finalización al Administrador de I/ONTFSMinifiltro B(altitude baja)Minifiltro A(altitude alta)FltMgrAdministrador de I/ONTFSMinifiltro B(altitude baja)Minifiltro A(altitude alta)FltMgrAdministrador de I/OSolicitud (IRP_MJ_CREATE, etc. El mundo de la 1.ª entrega)Callback preCallback preHacia el sistema de archivosResultado del procesamientoCallback postCallback postCompletado (hacia el flujo de finalización de la 1.ª entrega)

Figura 2: Los callbacks pre/post. A la ida se llaman en orden de altitude descendente; a la vuelta, en orden inverso

¿Qué se puede hacer en cada callback? Se ofrece el mismo esquema que las «tres opciones del controlador» del apartado 4.3 de la primera entrega, pero con una API más segura.

Las cuatro opciones disponibles en el callback pre de un minifiltroDiagrama que muestra que, tras invocarse el callback pre, el minifiltro puede elegir entre dejar pasar la operación, denegarla, completarla él mismo o modificar sus parámetros o contenido antes de dejarla continuarSe invocó el callback pre¿Qué hacer con esta operación?Dejarla pasar(si tampoco necesita post, también se declara)DenegarlaDevuelve de inmediato acceso denegado, etc.Ejemplo: detección de virus, escritura prohibidaCompletarla uno mismoEjemplo: un filtro de nubeobtiene el contenido real y lo entregaModificar parámetros o contenido y dejarla continuarEjemplo: filtro de cifrado

Figura 3: Las opciones del callback pre. «Ver, detener, sustituir y reescribir» son todas posibles de forma oficial

Y aquí se resuelve la tarea pendiente de la cuarta entrega: los minifiltros también pueden estar presentes en Fast I/O (el atajo que no crea un IRP). Esto es posible porque FltMgr hace pasar el mecanismo de callbacks también por la ruta de Fast I/O, por lo que no ocurre, como en la época heredada, que «si pasan por el atajo, no se ven». El hecho de que en el registro de Procmon aparezcan incluso líneas FASTIO_ se debe precisamente a esta posición privilegiada.

4. Altitude — la «altura» determina el orden

Cuando varios filtros están interesados en la misma operación, quién la ve primero es una cuestión crítica. Si el antivirus no la ve antes que el cifrado, terminará escaneando texto cifrado; y si una herramienta de monitorización no está por encima de todos los demás, no podrá observar el conjunto.

Quien determina este orden es la altitude («altura» o «altitud»). Para cada tipo de filtro se definen un grupo de orden de carga (load order group) y una banda numérica. Para ser precisos, la altitude no se asigna al controlador en su conjunto, sino a la «instancia» del minifiltro adjunta a un volumen. El número es único, y cuanto mayor es, más arriba se sitúa en la pila (más cerca de la aplicación). 4 Un mismo controlador puede tener varias definiciones de instancia y aparecer en distintas altitudes; por eso el listado de fltmc instances está organizado por instancia.

Bandas de altitude de los grupos de orden de carga de minifiltrosDiagrama que ordena de arriba a abajo, de mayor a menor altitude, los grupos FSFilter Activity Monitor, FSFilter Undelete, FSFilter Anti-Virus, FSFilter Replication, FSFilter Continuous Backup y bandas adicionales más cercanas al sistema de archivos, mostrando que cada finalidad tiene asignada una altura determinadaMás cerca de la aplicación (número mayor)FSFilter Activity Monitor: 360000-389999Observación y registro de I/O (aquí está Procmon)FSFilter Undelete: 340000-349999Recuperación de archivos eliminadosFSFilter Anti-Virus: 320000-329999Detección y eliminación de virusFSFilter Replication: 300000-309999Replicación remotaFSFilter Continuous Backup: 280000-289999Copia de seguridad continuaMás abajo: Content Screener /Quota Management / System Recovery /y siguen bandas de cifrado, compresión, etc.Más cerca del sistema de archivos (número menor)

Figura 4: Bandas de altitude (extracto). A cada finalidad le corresponde una «altura» determinada

Lo importante es que este número lo asigna y administra Microsoft. 5 Los proveedores no lo eligen libremente, sino que lo solicitan y reciben una asignación; por eso, en cualquier PC se mantiene el orden «la monitorización va por encima del antivirus, y el antivirus por encima del cifrado». Esta fue la respuesta a la «lotería del orden de carga» de la época heredada.

Dónde solicitarla si va a desarrollar su propio minifiltro. Para los desarrolladores, dejamos anotado solo el siguiente paso. La altitude se solicita siguiendo el procedimiento de Request a Filter Altitude Identifier, enviando un correo en inglés a fsfcomm@microsoft.com con el asunto «Filter altitude request». Es necesario completar todos los datos: nombre de la empresa, contacto (un alias de empresa de uso prolongado, no una persona individual), nombre del producto, URL del producto, descripción del filtro, nombre de archivo del controlador, tipo de filtro, tipo de inicio, y el grupo de orden de carga y la altitude deseados. También se indica expresamente que hay que prever unos 30 días hábiles de trámite, que no existe una vía de urgencia, y que el número asignado puede diferir del solicitado. 8 Además, una empresa que ya tenga una altitude entera dentro del mismo grupo de orden de carga puede decidir por su cuenta un valor con decimales a partir de ese número (por ejemplo, 325000.3), en cuyo caso basta con notificarlo por correo a posteriori. 8

5. Presentación de los habitantes — su PC visto con fltmc

Dejemos la teoría por ahora y veamos algo real. Desde un símbolo del sistema con privilegios de administrador:

:: Lista de minifiltros registrados (con su altitude)
fltmc

:: Qué filtros están adjuntos a cada volumen
fltmc instances

:: Verlo desde el lado del volumen
fltmc volumes

fltmc sin argumentos muestra el mismo listado que fltmc filters. La salida tiene 4 columnas, y la documentación de Microsoft incluye un ejemplo con el mismo formato. 9

C:\Windows\system32>fltmc

Filter Name                     Num Instances    Altitude    Frame
------------------------------  -------------  ------------  -----
bindflt                                 1        409800         0
cldflt                                  1        409500         0
WdFilter                                4        328010         0
luafv                                   1        135000         0
FileInfo                                4         45000         0

El listado anterior es un extracto con fines explicativos. Los nombres que aparecen y el número de instancias varían según el entorno, pero como los valores de altitude son valores fijos asignados por Microsoft, se pueden contrastar con el listado público mencionado en el capítulo 4.

Estas son las columnas.

Columna Significado
Filter Name Nombre del filtro (controlador)
Num Instances A cuántos volúmenes está adjunto (el número de instancias del capítulo 4)
Altitude La altitude. Cuanto mayor, más cerca de la aplicación
Frame Número de frame de FltMgr. Si aquí aparece <Legacy>, es señal de que sigue activo un filtro heredado que no usa FltMgr. 9

Con estas cinco líneas ya se puede ver que bindflt y cldflt están en la banda superior FSFilter Top (400000-409999), WdFilter en la banda Anti-Virus (320000-329999) y FileInfo en la banda inferior FSFilter Bottom (40000-49999). El esquema que vimos en el capítulo 4 —«a cada finalidad le corresponde una altura determinada»— se confirma directamente con estos números. Y si vuelve a ejecutar fltmc después de iniciar Procmon, aparecerá una línea adicional cuyo nombre empieza por PROCMON en la banda de Activity Monitor (360000-389999).

Los nombres varían según el entorno, pero los habitantes típicos son, en su mayoría, viejos conocidos de esta serie.

  • WdFilter — el minifiltro de Microsoft Defender. Se sitúa en la banda Anti-Virus. En muchos PCs es el puesto de control por el que pasa obligatoriamente todo el I/O de archivos.
  • cldflt — el filtro de archivos en la nube. Es el brazo ejecutor de Files On-Demand de OneDrive, y prepara el contenido real cuando se abre el punto de reanálisis (el marcador de posición, o placeholder) que vimos en la quinta entrega. 10
  • PROCMON24 (u otro similar) — un minifiltro temporal en la banda de Activity Monitor que solo aparece mientras Process Monitor está en ejecución. Este es el truco que le permite a Procmon ver todo el I/O. 11 Pruebe a ejecutar fltmc antes y después de iniciarlo, y compare.
  • Además, software de copia de seguridad, productos de cifrado (prevención de fugas de información), EDR, almacenamiento virtualizado, etc.: cuanto más corporativo es el PC, más habitantes suele tener.

Al volver a mirar, en esta última entrega, desde fuera de la caja de herramientas la herramienta llamada Procmon que hemos usado desde la primera entrega, se cierra un bonito círculo: «el observador también resultó ser un habitante más del mismo mecanismo que observaba».

6. Dónde consume tiempo el antivirus

El mayor impacto práctico de los filtros es el coste del análisis antivirus. Veamos en un diagrama dónde se genera ese tiempo (los detalles varían según el producto; lo que sigue es un caso típico).

Dónde se genera el coste del análisis antivirus al abrir, escribir y cerrar un archivoDiagrama de secuencia entre la aplicación, el minifiltro antivirus y NTFS que muestra la evaluación previa en pre-create, el análisis del contenido y la posible cancelación de la apertura en post-create si el archivo no ha sido analizado, y el reanálisis de los archivos modificados al cerrarlos, cuyo coste se acumula con una gran cantidad de archivos pequeñosNTFSMinifiltro AVAplicaciónNTFSMinifiltro AVAplicaciónpre-create: evaluación previa de la ruta y la políticaSi el archivo no ha sido analizado,aquí se analiza su contenidoy, si hay un problema, se cancela la apertura── causa principal de la lentitud al abrirLos archivos modificados quedanpendientes de reanálisis, por ejemplo al cerrarlosCon una gran cantidad de archivos pequeños(como los productos intermedios de una compilación),este ida y vuelta se acumula por cada archivoAbrir archivoDejar pasar (ejecutar la apertura)Apertura completada (post-create)Si no hay problemas, se devuelve el handleEscribir y cerrar

Figura 5: Dónde se genera el coste del análisis. Por archivo es mínimo, pero con decenas de miles de archivos se vuelve dominante

Con esto como base, se pueden entender con precisión dos temas prácticos.

El significado técnico de las exclusiones. En el I/O dirigido a rutas que coinciden con la lista de exclusión, se omite el procesamiento de análisis del filtro. El filtro no desaparece de la pila; lo que ocurre en realidad es que la decisión de «no inspeccionar» se toma antes. Y hay otra limitación importante: la exclusión solo surte efecto en el filtro del propio producto que la tiene configurada. La configuración de exclusiones de Microsoft Defender solo cambia el análisis de WdFilter, y no tiene ningún efecto sobre el comportamiento de otros minifiltros coexistentes (antivirus de otros fabricantes, EDR, copia de seguridad, cifrado, etc.). Cuando «sigue lento a pesar de haber añadido la exclusión», sospeche de que otro habitante está consumiendo el tiempo (la comparación con fltmc del capítulo 7). Aunque el efecto es considerable, las exclusiones debilitan de forma segura la protección de esa ubicación. La documentación de Microsoft también advierte repetidamente que, como las exclusiones reducen la defensa, deben mantenerse al mínimo tras una evaluación de riesgos. 6 Tratamos la respuesta práctica a los falsos positivos y su impacto en el rendimiento en «Cuando su aplicación de Windows es tratada como virus».

Dev Drive, la nueva respuesta. Es un volumen dedicado diseñado para cargas de trabajo de desarrollo (gran cantidad de archivos pequeños), en el que Microsoft Defender funciona en modo de rendimiento (análisis asíncrono). Se presenta como una alternativa más segura a la exclusión de carpetas: por defecto no se le adjuntan filtros adicionales, aunque también se advierte con firmeza contra operar retirando todos los filtros. 7 Es la solución que Microsoft recomienda actualmente para quienes quieren «acelerar la compilación, pero les da miedo excluir».

7. Procedimiento para investigar «solo ese entorno va lento»

Para terminar, reunimos en un único procedimiento las herramientas que hemos ido acumulando a lo largo de la serie.

Procedimiento para aislar la lentitud de acceso a archivos causada por filtrosDiagrama de decisión que parte del síntoma de lentitud en un entorno concreto, revisa la columna Duration de Procmon para identificar la operación lenta, compara fltmc instances entre entornos para encontrar diferencias de filtros, y concluye en considerar exclusiones o Dev Drive si la diferencia de filtros es la causa, o sospechar de causas distintas a los filtros en caso contrarioNoNo (esporádica)Síntoma: la misma aplicación es lentaen el acceso a archivos solo en un entorno concretoRevisar la columna Duration en Procmonpara ver en qué operación(¿IRP_MJ_CREATE? ¿WRITE?) se consume el tiempo¿Es lenta de forma uniformeuna operación concreta?Comparar fltmc instancescon un entorno rápidoy ver las diferencias de configuración de filtros¿La diferencia de filtroses la causa?Configuración de exclusiones (con evaluación de riesgo)o considerar Dev Drive / consultar al proveedorSospechar de algo distinto a los filtros:caché (4.ª entrega), fragmentación o MFT (5.ª entrega),destino de red (UNC), el propio dispositivo

Figura 6: Cómo aislar la lentitud causada por los filtros. La clave está en el «tiempo por operación» y en las «diferencias de configuración de filtros entre entornos»

Hay dos puntos clave. Primero, Procmon dispone del tiempo transcurrido (Duration) por cada operación. Si logra descomponer «es lento» en «qué operación es lenta», la búsqueda del culpable ya está a medio camino. Segundo, la diferencia entre entornos suele deberse a diferencias en la configuración de filtros. Máquina de desarrollo frente a producción, PC propio frente a PC del cliente: basta con poner en paralelo la salida de fltmc para que aparezcan los candidatos sospechosos.

Los primeros tres pasos si nunca ha usado Procmon. La columna Duration no se muestra por defecto, así que anotamos aquí solo las operaciones necesarias para no quedarse atascado.

  1. Inicie Procmon.exe como administrador.
  2. Abra menú Options > Select Columns… y marque Duration en la lista de columnas.
  3. En menú Filter > Filter… (Ctrl+L), indique Process Name / is / el nombre del .exe en cuestión / Include, pulse el botón Add y después OK (si no pulsa Add, la condición no se aplicará).

Después, haga clic en la columna Duration para ordenar, y las operaciones que más tiempo consumen se agruparán arriba. Para totales por proceso o por archivo, también puede usar menú Tools > File Summary. El manejo general de ProcMon está recopilado en «Guía práctica de Process Monitor (ProcMon)».

8. El cierre de la serie — el mapa de las seis entregas

Con esto hemos abierto todos los recuadros del mapa que dibujamos en la primera entrega. Reunámoslo todo en una sola imagen.

Mapa completo de las seis entregas de la serie Las profundidades del I/O en WindowsDiagrama que sitúa a la aplicación en la parte superior y muestra el recorrido a través del I/O síncrono y asíncrono, IOCP y el thread pool de .NET, el Administrador de I/O y el IRP, los filtros y minifiltros, NTFS en colaboración con el Cache Manager, y finalmente la pila de almacenamiento y el dispositivo, con la finalización volviendo a IOCP y de ahí a la aplicaciónLa finalización vuelve aquíEl I/O con caché habilitada colabora(el sistema de archivos invoca la función de caché)Interrupción → finalización (1.ª entrega)AplicaciónReadFile / WriteFile / async-await2.ª entrega: I/O síncrono y asíncronoModos del handle y OVERLAPPED3.ª entrega: IOCP y el thread pool de .NETRecepción de la finalización y ejecución de la continuación1.ª entrega: Administrador de I/O e IRPResolución de nombres, los tres objetos, la pila de dispositivos6.ª entrega: Filtros y minifiltrosFltMgr, altitude, pre/post4.ª entrega: Cache ManagerVistas de 256 KB, lazy writer, Fast I/O(trabaja en colaboración con NTFS)5.ª entrega: NTFSMFT, streams, enlaces, los dos journalsPila de almacenamiento y dispositivo

Figura 7: El mapa de toda la serie. El Cache Manager no es una «capa por la que se pasa», sino un compañero que colabora con el sistema de archivos; cuando hay un fallo de caché, NTFS emite la solicitud hacia el almacenamiento

9. Resumen — a modo de cierre de la serie

Este es el resumen de la última entrega.

  • Interceptar el I/O es un punto de extensión reconocido oficialmente por el sistema operativo, y el estándar actual es el registro de callbacks en FltMgr (minifiltros). El orden queda determinado de forma determinista por la altitude, cuyos números asigna y administra Microsoft. 245
  • El funcionamiento se basa en los callbacks pre/post. Se puede dejar pasar, denegar, sustituir o reescribir, y también se está presente en Fast I/O. Procmon, Defender y OneDrive son todos habitantes de este mismo mecanismo. 11110
  • Una exclusión equivale a omitir el análisis, y es una contrapartida frente a la protección. Para los volúmenes de desarrollo existe una opción más segura: Dev Drive (análisis asíncrono). 67
  • «Solo ese entorno va lento» se aísla a partir de el Duration de Procmon y las diferencias de configuración de fltmc: las herramientas de la serie se convierten, tal cual, en el procedimiento de investigación.

Y si tuviéramos que resumir la conclusión de toda la serie en una sola línea, sería esta: el I/O de Windows es un diseño coherente en el que el destino se determina mediante un espacio de nombres, las solicitudes se convierten en paquetes (IRP) que fluyen entre capas, y cada capa puede elegir entre «ver, retener o sustituir». Bajo esa única línea que es File.ReadAllText funciona, cada vez, toda la estructura de estas seis entregas. En lugar de memorizar el comportamiento de las API, poder deducir «esto tiene que ser así» a partir de este mapa: eso es lo que esperábamos que se llevara de esta serie. Gracias por acompañarnos en este largo viaje.

Artículos relacionados

Áreas de consultoría relacionadas

En KomuraSoft LLC nos encargamos de investigar problemas de rendimiento y fallos en aplicaciones empresariales de Windows relacionados con controladores de filtro, como «solo es lento en un entorno concreto» o «el software de seguridad interfiere con nuestra aplicación».

Referencias

  1. Microsoft Learn, About file system filter drivers. Sobre el hecho de que un controlador de filtro del sistema de archivos es un controlador opcional capaz de interceptar las solicitudes dirigidas al sistema de archivos o a otros controladores de filtro; que, al interceptar la solicitud, puede ampliar o sustituir funcionalidad antes de que llegue a su destino original, y puede registrar y monitorizar la solicitud, modificar los datos o impedir la acción; y que las utilidades antivirus, los programas de cifrado y los sistemas de gestión de almacenamiento jerárquico son ejemplos de controladores de filtro.  2 3

  2. Microsoft Learn, Filter Manager Concepts. Sobre el hecho de que el Filter Manager (FltMgr) es un controlador en modo kernel incluido en Windows que expone funcionalidad para simplificar el desarrollo de controladores minifiltro; que un minifiltro puede registrar procesamiento antes y después (callbacks pre/post) de las operaciones de I/O; que, para convivir con los filtros heredados, FltMgr puede adjuntarse en varios puntos de la pila de I/O en forma de frames; y que un minifiltro, al ser descargado y vuelto a cargar, regresa a la misma altitude dentro del mismo frame.  2 3 4 5

  3. Microsoft Learn, Advantages of the Filter Manager Model. Sobre las ventajas del modelo Filter Manager frente al modelo de filtros heredados, entre ellas un mejor control del orden de carga de los filtros; que, a diferencia de los filtros heredados, los minifiltros se pueden cargar en cualquier momento; que se pueden descargar; y que se menciona la conexión con volúmenes DAX, entre otras.  2

  4. Microsoft Learn, Load order groups and altitudes for minifilter drivers. Sobre el hecho de que se definen grupos de orden de carga según su finalidad para los filtros del sistema de archivos, y que a cada grupo se le asigna un rango de altitude; que todo controlador de filtro tiene un identificador de altitude único que determina su posición relativa frente a otros filtros dentro de la pila de I/O; y sobre ejemplos de grupos como FSFilter Activity Monitor (360000-389999, observación y notificación de I/O), FSFilter Undelete (340000-349999), FSFilter Anti-Virus (320000-329999, detección y eliminación de virus durante el I/O de archivos), FSFilter Replication (300000-309999) y FSFilter Continuous Backup (280000-289999).  2 3

  5. Microsoft Learn, Allocated altitudes. Sobre el hecho de que la altitude de los minifiltros es asignada y administrada por Microsoft, y de que se mantiene una lista pública de altitudes ya asignadas; y de que en esa lista figuran WdFilter.sys con el valor 328010 en el grupo FSFilter Anti-Virus y cldflt.sys con el valor 409500 en el grupo FSFilter Top.  2 3

  6. Microsoft Learn, Configure and validate exclusions for Microsoft Defender Antivirus. Sobre el hecho de que la configuración de exclusiones de Microsoft Defender hace que los archivos, carpetas o procesos excluidos queden fuera del alcance del análisis; y de que se advierte repetidamente que las exclusiones reducen el nivel de protección, por lo que deben definirse con cautela tras evaluar su necesidad.  2 3

  7. Microsoft Learn, Set up a Dev Drive on Windows 11. Sobre el hecho de que Dev Drive es un volumen diseñado para cargas de trabajo de desarrollo, en el que Microsoft Defender funciona en modo de rendimiento (análisis asíncrono); de que se presenta como una alternativa segura a la exclusión de carpetas (secure alternative to folder exclusions), teniendo en cuenta la velocidad y el rendimiento; de que, por defecto, no se adjuntan filtros adicionales a Dev Drive; y de que se advierte que operar retirando el filtro antivirus supone un riesgo de seguridad grave.  2 3

  8. Microsoft Learn, Request a Filter Altitude Identifier. Sobre el hecho de que la solicitud de una nueva altitude de filtro se realiza enviando un correo en texto ASCII con el asunto «Filter altitude request» a fsfcomm@microsoft.com; que es necesario completar todos los campos: nombre de la empresa, correo de contacto (un alias de empresa de uso prolongado, no una persona individual), nombre del producto, URL del producto, descripción del filtro, nombre de archivo del filtro, tipo de filtro, tipo de inicio, grupo de orden de carga deseado y altitude deseada; que se debe prever un plazo de 30 días hábiles y que no existe otra vía de solicitud aparte de este procedimiento; que Microsoft puede asignar una altitude distinta de la solicitada; y que, si ya se dispone de una altitude entera, se puede crear una altitude propia con decimales dentro del mismo grupo de orden de carga, bastando con notificarlo después.  2

  9. Microsoft Learn, Blocking legacy file system filter drivers. Sobre el hecho de que, al ejecutar fltmc filters en un símbolo del sistema con privilegios de administrador, se listan los filtros en cuatro columnas («Filter Name / Num Instances / Altitude / Frame»); y de que aquellos cuya columna Frame muestra <Legacy> son controladores de filtro del sistema de archivos heredados que no pasan por FltMgr, mientras que en los minifiltros el campo Frame contiene un valor numérico (como 0).  2

  10. Microsoft Learn, Cloud Files API. Sobre el hecho de que la Cloud Files API (el filtro de nube) es la base de los motores de sincronización (como Files On-Demand de OneDrive) que muestran localmente los archivos alojados en la nube como placeholders y obtienen el contenido real al acceder a ellos.  2

  11. Microsoft Learn, Process Monitor - Sysinternals. Sobre el hecho de que Process Monitor es una herramienta de monitorización avanzada que muestra en tiempo real la actividad del sistema de archivos, el registro y los procesos/hilos (tal como se explica en el cuerpo del artículo, se puede observar que, mientras está en ejecución, aparece como minifiltro en el listado de fltmc).  2

Artículos recientes con las mismas etiquetas para profundizar en temas cercanos.

Estas páginas sitúan el tema en un contexto más amplio de servicios y decisiones.

El artículo está directamente relacionado con los siguientes servicios.

Preguntas frecuentes

Preguntas habituales en las consultas sobre el tema del artículo.

¿En qué se diferencian los controladores de filtro del sistema de archivos y los minifiltros?
Ambos son «controladores que interceptan las solicitudes de I/O dirigidas al sistema de archivos», pero pertenecen a generaciones distintas de interceptación. Los filtros heredados (legacy) más antiguos apilaban su propio objeto de dispositivo directamente en la pila de dispositivos del sistema de archivos; como la posición dependía del orden de carga, era difícil garantizar el orden, y una vez cargados no se podían descargar de forma segura, entre otros problemas. Los minifiltros, el estándar actual, registran callbacks en el Filter Manager (FltMgr) incluido en Windows, indicando «quiero que me llames antes y después de esta operación». La posición queda determinada de forma determinista por un número llamado altitude, se pueden cargar en cualquier momento y, si el filtro implementa un callback de descarga, incluso se pueden retirar mientras el sistema está en funcionamiento. Prácticamente todos los filtros modernos —antivirus, cifrado, herramientas de monitorización, sincronización en la nube— están implementados como minifiltros.
¿Por qué el software antivirus puede inspeccionar todos los accesos a archivos?
Porque el sistema operativo ofrece oficialmente un punto de extensión para ello. Un minifiltro puede registrar en el Filter Manager código que se invoca antes (callback pre) y después (callback post) de operaciones como abrir, leer o escribir un archivo. El filtro antivirus se sitúa en la banda de altitude reservada para Anti-Virus (320000-329999) y, por ejemplo, justo después de que se complete la apertura de un archivo (post-create), puede analizar su contenido y, si detecta un problema, cancelar esa apertura para que el acceso falle. Como vimos en la primera entrega de la serie, todo el I/O de archivos fluye por la pila de dispositivos, así que basta con situarse en un punto fijo de ese camino para poder inspeccionar todos los accesos. No es un truco: es un mecanismo integrado en el diseño del sistema operativo.
¿Qué hace técnicamente la configuración de exclusiones (exclusión de carpetas) del antivirus?
Hace que, para el I/O dirigido a rutas que coinciden con la lista de exclusión, el filtro de ese producto omita su procesamiento de análisis. El filtro en sí no desaparece de la pila; lo más cercano a la realidad es que la decisión de «esta ruta no se inspecciona» se toma en una etapa más temprana. Una limitación importante es que la exclusión solo surte efecto en el propio producto que tiene configurada esa exclusión. Por ejemplo, la configuración de exclusiones de Microsoft Defender solo cambia el análisis del filtro de Defender (WdFilter) y no afecta al comportamiento de otros minifiltros coexistentes, como el antivirus de otro fabricante, un EDR o una herramienta de copia de seguridad. Cada producto necesita su propia configuración de exclusiones, así que si «sigue lento a pesar de haber excluido», la causa puede estar en otro filtro. Además, como advierte repetidamente la documentación de Microsoft, las exclusiones debilitan la protección en esa ubicación, por lo que deben mantenerse al mínimo junto con una evaluación de riesgos. Para uso de desarrollo, también vale la pena considerar Dev Drive (modo de rendimiento = análisis asíncrono), diseñado como alternativa segura a la exclusión de carpetas.
¿Cómo registra Process Monitor absolutamente todo el I/O?
Porque el propio Procmon, al iniciarse, se registra en el Filter Manager como un minifiltro dentro de la banda de altitude de Activity Monitor (monitorización de actividad). Si ejecuta fltmc desde un símbolo del sistema con privilegios de administrador mientras Procmon está en ejecución, puede comprobar que aparece en la lista un filtro cuyo nombre empieza por PROCMON. Al estar presente como minifiltro en los callbacks pre/post de las operaciones de I/O de todos los volúmenes, puede registrar sin omisiones qué proceso realizó qué operación sobre qué archivo. Que términos como IRP o Fast I/O, vistos a lo largo de la serie, aparezcan tal cual en la interfaz de Procmon se debe precisamente a que observa desde el propio camino por el que discurre el I/O.
Si la compilación en una máquina de desarrollo es lenta, ¿hay que sospechar de los controladores de filtro?
Sí, merece la pena sospechar de ellos. Una compilación es un cúmulo de creación, lectura, escritura y eliminación de un gran número de archivos pequeños, y cada una de esas operaciones pasa por el conjunto de filtros (en especial el análisis antivirus), por lo que es la carga de trabajo en la que el coste de los filtros suele hacerse más evidente. El procedimiento básico de investigación consiste en revisar la columna Duration en Procmon para ver en qué operación se consume el tiempo, y comparar con fltmc instances las diferencias de configuración de filtros entre entornos. Como medidas, cabe considerar la configuración de exclusiones tras evaluar el riesgo, así como el uso de Dev Drive, diseñado específicamente para volúmenes de desarrollo. En Dev Drive, el antivirus funciona en modo de rendimiento (análisis asíncrono), y Microsoft lo presenta como una alternativa más segura que la configuración de exclusiones.

Perfil del autor

Página de presentación del autor del artículo.

Go Komura

Representante de KomuraSoft LLC

Especializado en desarrollo de software para Windows, consultoría técnica e investigación de fallos, sobre todo en proyectos con sistemas existentes y errores difíciles de reproducir.

Volver al blog