Las profundidades del I/O de Windows (6.ª entrega, final) — Cómo funcionan los minifiltros y la investigación de retrasos con Procmon
· Actualizado el: · Go Komura · Windows, Win32, I/O, Minifiltros, Núcleo, Controladores de dispositivo, Seguridad, Investigación de fallos
Historial de revisiones (primera versión, publicada el 29 Jul 2026)
- Primera publicación
Citar este artículo(DOI (archivo registrado): 10.5281/zenodo.22175386)
Los DOI siguientes remiten a versiones ya archivadas y pueden diferir del texto actual. Para citar el texto actual, utilice la URL de esta página.
Go Komura (2026). Las profundidades del I/O de Windows (6.ª entrega, final) — Cómo funcionan los minifiltros y la investigación de retrasos con Procmon. KomuraSoft LLC. https://comcomponent.com/es/blog/windows-minifilter-filter-drivers/
- DOI (archivo registrado)
- 10.5281/zenodo.22175386
- DOI (última versión registrada)
- 10.5281/zenodo.22175387
En un PC concreto, solo abrir un archivo lleva tiempo. En equipos con software antivirus, las compilaciones y las copias masivas de archivos se vuelven lentas. Por otro lado, al iniciar Process Monitor se ve un registro de operaciones de archivo aunque no se haya cambiado la propia aplicación.
La clave para entender ambas cosas es el controlador de filtro del sistema de archivos, que vigila y controla el I/O de archivos mientras está en curso. Windows ofrece un punto de extensión precisamente para eso.1
En esta entrega final de la serie «Las profundidades del I/O de Windows» tratamos el minifiltro, el modelo de implementación estándar actual. La primera mitad cubre el mecanismo; la segunda lo conecta con un procedimiento para, con fltmc y Procmon, averiguar en qué entorno y en qué operación se va lento. Incluso para desarrolladores de aplicaciones que no escriben controladores, debería servir de mapa para aislar problemas de rendimiento.
1. Primero la conclusión
Un minifiltro es un controlador que registra en el Filter Manager (FltMgr) incluido en Windows «qué operaciones trata y en qué etapa». FltMgr llama a los callbacks según ese registro y según una posición relativa llamada altitud. Desde la aplicación, la operación de archivo es la misma, pero el trabajo de los filtros que hay por el camino puede afectar al resultado y al tiempo que lleva.2
Dicho esto, «hay un filtro» y «ese filtro es la causa de la lentitud» son cosas distintas. fltmc es una herramienta para comprobar la configuración y Procmon, para observar las operaciones. Ninguna de las dos es una herramienta para afirmar la causa a partir de un listado o de un solo número.
Este artículo se lee en torno a las distinciones siguientes.
| Qué se quiere comprobar | Dónde mirar | Lo que eso solo no dice |
|---|---|---|
| Qué filtros están cargados | fltmc filters |
Si ese filtro trató la operación en cuestión |
| Qué está conectado al volumen de destino | fltmc instances |
El tiempo que gastó cada filtro |
| Qué operaciones de archivo llevan tiempo | Eventos de Procmon y Duration | El componente que produjo todo el retraso |
| En qué gasta tiempo el análisis de Defender | El analizador de rendimiento de Defender | Problemas de rendimiento de otros productos o de la aplicación en conjunto |
En el diagrama, una línea continua marca una relación que siempre se cumple y una línea discontinua una relación condicional (las condiciones están en la explicación de cada relación en la página de detalle). La lista completa de relaciones (34 en total, con evidencia y grado de certeza) y las definiciones de los conceptos principales están reunidas en la página de detalle del mapa de conocimiento (en japonés). Datos: JSON-LD / Turtle
2. Historia de los que se interponen — de los filtros heredados a FltMgr
Un controlador de filtro del sistema de archivos vigila y controla las peticiones dirigidas al sistema de archivos o a otro filtro. Se usa en antivirus, cifrado, copia de seguridad, etc., y no solo registra peticiones: también puede cambiar parámetros o denegar el acceso. «Interceptar» aquí no es una interrupción de hardware de la CPU. Significa intervenir en el camino de tratamiento del I/O.1
En el modelo heredado, el propio filtro conecta su objeto de dispositivo a la pila de dispositivos, pasa las peticiones hacia abajo y trata la finalización. El orden de conexión, la retirada segura y la coexistencia con otros filtros quedan en un alcance amplio a cargo de quien implementa.
En el modelo de minifiltro, en cambio, FltMgr asume el trabajo común, como la conexión a la pila, y cada controlador registra solo los callbacks de las operaciones que necesita. Un minifiltro sigue siendo un controlador en modo kernel, y el objeto de controlador no desaparece. Lo que cambia es el mecanismo para participar en la pila del sistema de archivos.3
flowchart TB
accTitle: Modelo heredado y modelo de minifiltro
accDescr: Diagrama que compara el modelo heredado, en el que el propio filtro se conecta a la pila, y el de minifiltro, en el que se registra el tratamiento en FltMgr.
ROOT["Cómo participar en el I/O de archivos"]
ROOT -->|"Modelo heredado"| LEG["El propio filtro se conecta"]
ROOT -->|"Modelo de minifiltro"| MINI["Registrar el tratamiento en FltMgr"]
LEG --> OWN["Implementar conexión y finalización"]
MINI --> SHARED["FltMgr se ocupa del trabajo común"]
Figura 1: Comparación entre el modelo en el que el propio filtro se conecta a la pila y el modelo en el que se registra el tratamiento en FltMgr.
La figura muestra una configuración en la que FltMgr se conecta a la pila en lugar del minifiltro. En la práctica, para coexistir con filtros heredados, FltMgr a veces se conecta en varias posiciones como varios marcos (frames). La coexistencia tiene restricciones de colocación, y pasar a minifiltro no resuelve por sí solo todos los problemas de compatibilidad.2
FltMgr reduce la inestabilidad de la posición según el orden de carga y también ayuda a la descarga en caliente. Sin embargo, solo se puede retirar un controlador que implemente el callback correspondiente y permita la descarga. No es una garantía de que, durante una investigación, se pueda quitar cualquier filtro.3
3. Cómo se mueve un minifiltro — callbacks pre/post
Un minifiltro registra como destino, por ejemplo, las operaciones de apertura y creación correspondientes a IRP_MJ_CREATE, o las de escritura correspondientes a IRP_MJ_WRITE. El callback pre es el tratamiento antes de pasar hacia abajo; el callback post, el de la etapa en que el resultado vuelve desde abajo. Se pueden registrar ambos, o solo el lado que hace falta.2
La figura siguiente es el caso en que A y B tratan ambos la misma operación, pasan la petición hacia abajo en pre y piden la llamada a post.
sequenceDiagram
accTitle: Orden de los callbacks cuando se pasa hacia abajo y se recibe la finalización
accDescr: Si A y B registran la operación de destino, la pasan hacia abajo y piden post, pre se llama desde la altitud más alta y post en el orden inverso.
participant FM as FltMgr
participant A as Filtro A (alto)
participant B as Filtro B (bajo)
participant FS as Sistema de archivos
FM->>A: pre
FM->>B: pre
FM->>FS: Pasar hacia abajo
FS-->>FM: Resultado del tratamiento
FM-->>B: post
FM-->>A: post
Figura 2: En un ida y vuelta habitual, pre va de la altitud más alta a la más baja y post en el orden inverso. No todas las peticiones recorren este ida y vuelta.
El valor de retorno de pre decide el tratamiento posterior. Los representativos se ordenan así.45
| Valor de retorno de pre | Significado |
|---|---|
FLT_PREOP_SUCCESS_NO_CALLBACK |
Seguir hacia abajo y no pedir el propio post |
FLT_PREOP_SUCCESS_WITH_CALLBACK |
Seguir hacia abajo y pedir también el propio post al completar |
FLT_PREOP_COMPLETE |
Completar con el resultado que uno indica. Rechazar es un ejemplo |
FLT_PREOP_PENDING |
Dejar en espera la operación basada en IRP correspondiente y reanudar o completar más tarde |
Si un filtro completa la petición en pre, esa petición no sigue hacia los filtros ni el sistema de archivos que están más abajo. Tampoco se llama el post del filtro que devolvió FLT_PREOP_COMPLETE; la finalización vuelve al lado superior que ya había recibido la petición y pedido post. Por tanto, es importante no pensar que «como está registrado, se llaman siempre pre y post».4
Además, dejar en espera no es solo añadir tiempo de espera. El controlador que lo hace tiene la responsabilidad de reanudar o completar la petición de forma adecuada. En la implementación también se tratan restricciones de tipo de operación, IRQL, vida del búfer, cancelación, etc. La tabla de este artículo es un mapa del tratamiento, no un procedimiento de implementación tal cual.5
3.1 El Fast I/O también entra, pero eso no significa que «se vea todo el I/O»
FltMgr no trata solo el I/O basado en IRP: también incluye Fast I/O y las operaciones de callback de filtro del sistema de archivos (FSFilter). Es un error entender que «como no usa IRP, el minifiltro no lo ve». A la inversa, tampoco es exacto que todo acceso se convierta necesariamente en un IRP y recorra la misma secuencia de callbacks.2
El alcance de lo que se puede observar cambia con el volumen al que está conectado, las operaciones registradas, las condiciones de exclusión al registrar y si la petición se completa más arriba. Tampoco cada acceso a memoria a un archivo asignado en memoria se registra como un evento de I/O de archivo. Los filtros heredados también tienen un mecanismo para tratar Fast I/O; el propio soporte de Fast I/O no es una función exclusiva de los minifiltros.36
4. Altitud — la «elevación» que decide el orden
Si varios filtros intervienen en la misma operación, hay que decidir en qué orden se tratan. Esa posición relativa la especifica la altitud (altitude). Cuanto mayor es el número, más lejos del sistema de archivos; cuanto menor, más cerca. No es la prioridad del subproceso ni un número que represente el rendimiento o la importancia del producto.7
El ajuste se escribe en la definición de instancia del controlador, y lo que realmente se conecta a un volumen es una instancia. La misma definición se aplica a varios volúmenes, así que no se emite una altitud distinta por volumen. Un mismo controlador puede tener varias definiciones, pero asignar varias altitudes no es un uso habitual.7
Los grupos de orden de carga por uso y las bandas de números están definidos así.
flowchart TB
accTitle: Bandas de altitud de minifiltro por uso
accDescr: Cuanto mayor es el número, más lejos del sistema de archivos está la posición relativa. La figura es un extracto de algunos grupos y no cubre de la más alta a la más baja.
TOP["Lado de número mayor"] --> M["Activity Monitor: 360000-389999"]
M --> U["Undelete: 340000-349999"]
U --> AV["Anti-Virus: 320000-329999"]
AV --> R["Replication: 300000-309999"]
R --> B["Continuous Backup: 280000-289999"]
B --> LOW["Hacia grupos de uso más abajo"]
Figura 3: Extracto de las bandas de altitud por uso. En la práctica también hay bandas por encima de Activity Monitor, y un filtro de vigilancia no queda siempre en lo más alto de toda la pila.
La primera altitud se solicita a Microsoft. Si en el mismo grupo de orden de carga ya se tiene asignado un valor entero, también existe el mecanismo de crear una altitud con parte decimal a partir de ese valor y comunicársela a Microsoft. No significa que un desarrollador sin un valor entero previo pueda usar un número cualquiera a su gusto.7
En desarrollo, según Request a Filter Altitude Identifier, se envía a fsfcomm@microsoft.com un correo de texto ASCII con el asunto Filter altitude request. Se rellenan el nombre de la empresa, un contacto de la empresa de uso a largo plazo, el nombre del producto y la URL, la descripción, el nombre de archivo del controlador, el tipo de filtro, el tipo de inicio, el grupo y el número deseados, etc. La guía oficial indica prever 30 días laborables de tramitación, y no está garantizado obtener el número pedido. Es un punto a confirmar en la fase de planificación del desarrollo y la distribución.8
5. Presentación de los habitantes — su PC visto con fltmc
Cuando se entiende el mecanismo, se comprueba la configuración real. Abra un símbolo del sistema como administrador y ejecute los siguientes comandos de lectura.910
:: Lista de filtros del sistema de archivos cargados
fltmc filters
:: Estado de conexión de filtros y volúmenes
fltmc instances
:: Lista de volúmenes
fltmc volumes
fltmc filters es la misma lista que fltmc sin argumentos. Lo que sigue es un ejemplo explicativo de cómo leer las columnas, no un resultado de medición de esta máquina. Las altitudes usan valores de asignación publicados; la composición de las filas y el número de instancias son ilustrativos.11
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
| Columna | Cómo leerla |
|---|---|
| Filter Name | Nombre del filtro. No tiene por qué coincidir con el nombre del producto |
| Num Instances | Número de instancias conectadas. No siempre coincide con el número de volúmenes distintos |
| Altitude | Posición relativa respecto a otros filtros. El detalle también se comprueba por instancia |
| Frame | Número de marco de FltMgr. <Legacy> indica un filtro heredado |
Que un nombre esté en filters y que esté conectado al volumen donde está el archivo en cuestión se comprueban por separado. En una comparación de configuraciones, el punto es mirar hasta instances. Aunque se confirme el destino de conexión, eso no dice el registro de callbacks para esa operación ni el tratamiento que realmente se hizo.10
5.1 Filtros que se ven a menudo
WdFilter es el filtro de Microsoft Defender, con asignación 328010 en la banda Anti-Virus. cldflt es el filtro de archivos en la nube que sostiene Cloud Files API, con asignación 409500. En Files On-Demand de OneDrive, el marcador de posición local y el proveedor de sincronización se coordinan para obtener los datos necesarios. No significa que cada vez que se abre un archivo se descargue necesariamente el conjunto.1112
La vigilancia del sistema de archivos de Procmon también usa un minifiltro. Si se compara fltmc filters antes y después de iniciarlo, en algunos entornos se puede confirmar un controlador cuyo nombre empieza por PROCMON. No dé por fijos el número del final ni el momento de carga y descarga; compruebe el estado de su máquina.
Sin embargo, la vigilancia del Registro, de procesos y de subprocesos de Procmon no se realiza toda con un minifiltro del sistema de archivos. Además, una línea de Procmon no significa un acceso al disco físico. Observar operaciones de archivo y observar el comportamiento del dispositivo de almacenamiento son capas distintas.13
6. Dónde gasta tiempo el antivirus
Si la configuración espera el resultado del análisis a mitad de una operación de archivo, ese tiempo de espera entra en el tiempo hasta que la aplicación termina la operación. En una compilación que crea y actualiza muchos archivos pequeños, las comprobaciones de uno en uno también se acumulan. Dicho esto, no está decidido que en cada acceso se vuelva a leer el archivo entero; las condiciones y el momento del análisis varían según el producto y la configuración.14
Lo que sigue es un diagrama conceptual del caso en que la inspección posterior a la apertura se hace antes de devolver el resultado a la aplicación. No es un diagrama que garantice la implementación interna de un producto concreto ni el orden de tratamiento de todos los archivos.
sequenceDiagram
accTitle: Ejemplo de una configuración que espera el resultado del análisis para completar la apertura
accDescr: Ilustra una configuración de producto que inspecciona en post-create. No muestra la implementación de todos los productos ni garantiza un análisis en cada ocasión.
participant APP as Aplicación
participant AV as Minifiltro AV
participant FS as Sistema de archivos
APP->>AV: Abrir el archivo
AV->>FS: Comprobar las condiciones y pasar hacia abajo
FS-->>AV: Apertura establecida
Note over AV: En este ejemplo se espera el resultado de la inspección en post-create
alt Si la inspección lo permite
AV-->>APP: Resultado de éxito
else Si hay que rechazar
Note over AV: Cancelar la apertura según las restricciones
Note over AV: No se deshacen los cambios de creación o sobrescritura
AV-->>APP: Resultado de error
end
Figura 4: Ejemplo de una configuración que espera el resultado de la inspección en post-create. Las condiciones y el momento reales de la inspección varían según el producto, y esto solo no basta para identificar la causa de un retraso.
En términos técnicos, existe el mecanismo de llamar a FltCancelFileOpen en el callback post de un create que tuvo éxito, establecer un estado de error y tratar la apertura como fallida. Sin embargo, no es una función que deshaga cambios en el archivo. No elimina un archivo recién creado ni restaura el contenido anterior a una sobrescritura, y la llamada tiene restricciones como hacerse antes de crear el identificador.15
6.1 Una exclusión no es «retirar el filtro»
Una exclusión reduce el destino del análisis al que se aplica esa configuración. No es un ajuste que retire el propio filtro de la pila, ni un ajuste que surta efecto de forma común en el EDR, la copia de seguridad o el filtro de cifrado de otro fabricante. Incluso dentro de la misma familia de productos, no hay que identificar la exclusión del antivirus con la de otras funciones de protección.14
Por tanto, si sigue lento tras excluir, lo que hay que pensar no es necesariamente que «el ajuste está roto». Queda margen para comprobar el destino de aplicación, la directiva de administración, otro filtro, el sistema de archivos, la red, la espera del lado de la aplicación, etc. A la inversa, aunque se acelere al excluir, ese resultado solo no llega a decir que no hay factores distintos del análisis.
Una exclusión amplia o detener una función de protección no es el primer paso de investigación. Primero registre los registros y las condiciones de reproducción y, si hace falta un cambio, confirme el riesgo con el administrador y decida el alcance, el plazo y el procedimiento para volver atrás. El trato de un falso positivo también se cubre en «Si una aplicación Windows de desarrollo propio es tratada como virus».14
6.2 Dev Drive es una opción, con condiciones, para limitar el impacto del análisis
En un lugar de archivos de desarrollo, Dev Drive también entra en consideración. El modo de rendimiento de Microsoft Defender hace asíncrono el análisis de las aperturas de archivo a las que se aplica y limita el impacto en el rendimiento dejando la protección. Microsoft lo sitúa como una alternativa más segura a la exclusión de carpetas en uso de desarrollo.1617
Sin embargo, las premisas incluyen que sea un Dev Drive de confianza, que Defender funcione como antivirus principal y que la protección en tiempo real esté habilitada. No es que el mismo comportamiento se obtenga al indicar una carpeta NTFS habitual, ni que todos los productos antivirus pasen a un análisis asíncrono. En Dev Drive también se comprueba la directiva de conexión de filtros y la compatibilidad con los productos de seguridad y de copia de seguridad necesarios.1716
7. Investigar «solo ese entorno va lento»
En la investigación se avanza en este orden: identificar la operación lenta → comparar la configuración del volumen de destino → confirmar los candidatos con mediciones adicionales. Que sea siempre lento, solo la primera vez o solo a veces no es razón para sacar el filtro de los candidatos.
7.1 Primero alinee las condiciones de reproducción
Antes de comparar, registre la versión de la aplicación, el contenido de la operación, los archivos de entrada, el destino de guardado, el usuario de ejecución y las versiones del sistema operativo y del producto de seguridad. No mezcle en la comparación archivos locales y rutas UNC, ni archivos en la nube aún no obtenidos con archivos ya obtenidos en local.
Separe también la primera vez de las siguientes. Si cambian el estado de la caché, el avance de la sincronización o la presencia de otros procesos, el mismo trabajo puede llevar un tiempo distinto. Reproduzca varias veces y haga corresponder el tiempo transcurrido de la aplicación en conjunto con la franja en la que se tomó el rastro.
7.2 Encontrar la operación lenta con Procmon
Inicie Procmon como administrador, detenga la captura una vez y borre los eventos existentes. Si acota el destino, registra solo mientras reproduce la operación necesaria y luego detiene, resulta más fácil releerlo. Las operaciones básicas también se cubren en «Guía práctica de Process Monitor».13
- En Options > Select Columns… muestre Duration.
- En Filter > Filter… (Ctrl+L) indique el nombre de proceso o el PID de destino, pulse Add y aplique. Si un proceso hijo o un servicio es quien hace el I/O real, inclúyalos también en la investigación.
- Inicie la captura, reproduzca el síntoma y detenga. Compruebe juntos Operation, Path, Result y Duration y, si hace falta, acote el destino con una condición de filtro de Duration o con Tools > File Summary.
No dependa del procedimiento de «haga clic en el encabezado Duration de la lista de eventos para ordenar». En un problema en el que ocurren en masa operaciones cortas, extraer solo los Duration largos deja fuera candidatos de causa, así que compruebe también el recuento. Además, CreateFile aparece no solo en la creación nueva, sino también en la apertura de un archivo existente. Lea no solo el nombre de la operación, sino el detalle.1318
El Duration de aquí es el tiempo de la operación que Procmon observó como ese evento. No es el tiempo de ejecución de un minifiltro concreto. Puede incluir esperas del sistema de archivos inferior, del dispositivo, de la red, etc. Sumar los Duration de operaciones en paralelo no tiene por qué coincidir con el tiempo transcurrido de la aplicación en conjunto.
7.3 Convertir la diferencia de fltmc en «candidatos»
Tome fltmc filters y fltmc instances en el entorno rápido y en el lento, y compare los filtros conectados al destino de guardado en cuestión. Separe, como sigue, el hecho observado de su interpretación.
| Lo que se pudo observar | Qué comprobar a continuación |
|---|---|
| Solo el entorno lento tiene un filtro concreto | Conexión al volumen de destino, versión y directiva del producto |
| La misma configuración, pero solo uno es lento | Destino del análisis, caché, ajustes del producto, condiciones de almacenamiento o de red |
| La apertura de una ruta concreta lleva tiempo | Pila de la operación, obtención desde la nube o espera de red, resultado de diagnóstico del producto |
| Solo la primera vez, o de forma esporádica | Inspección inicial, cambio del archivo, hora de sincronización o de copia de seguridad |
Que el nombre de un filtro aparezca en la pila es una pista para investigar ese camino de tratamiento. Sin embargo, que el nombre figure no es, por sí solo, prueba de que ese controlador estuvo en ejecución largo rato. Si hace falta, tome también con Windows Performance Recorder/Analyzer la ejecución de CPU y las esperas, y coteje con la información de diagnóstico del producto.19
Si se sospecha de Defender, el analizador de rendimiento oficial permite comprobar los archivos y procesos con más carga de análisis. En PowerShell de administrador en un entorno compatible se inicia el registro, se reproduce el síntoma con otra operación y se detiene con Enter. Lo que sigue es un ejemplo que también crea la carpeta de destino del registro.20
$traceDirectory = Join-Path $env:TEMP 'DefenderPerformance'
New-Item -ItemType Directory -Path $traceDirectory -Force | Out-Null
$tracePath = Join-Path $traceDirectory ('scan-{0}.etl' -f (Get-Date -Format 'yyyyMMdd-HHmmss'))
# Reproducir la operación de destino durante el registro y detenerlo con Enter
New-MpPerformanceRecording -RecordTo $tracePath
# Comprobar los archivos con más impacto en el análisis
Get-MpPerformanceReport -Path $tracePath -TopFiles 10 -TopScansPerFile 5
Lo que muestra este informe es también información sobre el análisis de Defender. No pase tal cual a la lista de exclusiones las rutas que salen arriba; compruebe si se relacionan con la lentitud en la reproducción. El registro tomado puede incluir nombres de archivo o de usuario, así que preste atención también al destino de guardado y de compartición.
La comparación cambiando la configuración se hace después de reunir las evidencias hasta aquí. Probar fltmc unload en producción o reescribir la altitud para cambiar el orden no se toma como un trato habitual.
8. El cierre de la serie — el mapa de las seis entregas
En el conjunto de la serie hemos visto desde la llamada a la API de la aplicación hasta la resolución de nombres, la petición de I/O, la notificación de finalización, la caché y el sistema de archivos. El minifiltro de esta entrega está en la posición que vigila y controla las peticiones al sistema de archivos.
flowchart TB
accTitle: El punto de vista que trata cada entrega de la serie de I/O de Windows
accDescr: Diagrama conceptual que relaciona el tema de cada entrega. No es un solo camino de ejecución, ni significa que todas las llamadas a API pasen por IRP, disco e IOCP.
APP["Operación de archivo de la aplicación"]
SYNC["2.ª entrega: I/O síncrono y asíncrono"]
IOM["1.ª entrega: el administrador de I/O e IRP"]
FLT["6.ª entrega: FltMgr y minifiltros"]
FS["5.ª entrega: estructura interna de NTFS"]
CACHE["4.ª entrega: el administrador de caché"]
IOCP["3.ª entrega: IOCP y el tratamiento tras la finalización"]
APP -. "método de llamada" .-> SYNC
APP -. "estructura del tratamiento de la petición" .-> IOM
IOM -. "vigilancia y control del I/O de archivos" .-> FLT
FLT -. "si sigue hacia abajo" .-> FS
FS -. "coordinación en I/O con caché habilitada" .- CACHE
SYNC -. "método de notificación de finalización correspondiente" .-> IOCP
Figura 5: Diagrama conceptual de la relación entre las entregas de la serie. No todo el I/O pasa por todas las cajas, y hay caminos que completan sin acceso a un dispositivo ni interrupción. IOCP es también el mecanismo de notificación de finalización que se usa con el identificador y el ajuste de notificación correspondientes.
La figura no es un rastro de ejecución único. El camino cambia en Fast I/O, en peticiones que se pueden tratar en caché y en peticiones que completan sin pasar hacia abajo. No hacer corresponder uno a uno la llamada a la API, la operación del sistema de archivos, el IRP y el acceso al disco físico es el punto de atención al unir las entregas.2
- 1.ª entrega: panorama del sistema de I/O — resolución de nombres, objetos, IRP y pila de dispositivos
- 2.ª entrega: I/O síncrono y asíncrono — modo del identificador, OVERLAPPED, trato de la finalización
- 3.ª entrega: IOCP y el grupo de subprocesos de .NET — notificación de finalización y continuación del tratamiento
- 4.ª entrega: el administrador de caché — escritura, caché, reflejo en el almacenamiento
- 5.ª entrega: estructura interna de NTFS — MFT, flujos, vínculos, diario
- 6.ª entrega: minifiltros (este artículo) — vigilancia y control del I/O de archivos e investigación de retrasos que dependen del entorno
9. Resumen — al cierre de la serie
Un minifiltro interviene en el I/O de archivos a través de los callbacks que prepara FltMgr. En un ida y vuelta habitual, pre va de la altitud más alta a la más baja y post en el orden inverso, pero el camino real cambia según lo registrado y según si se completa a mitad de camino.
Conocer este mecanismo permite explicar por qué en Procmon aparecen operaciones de archivo y por qué un producto de seguridad puede influir en el tiempo de acceso a archivos. Al mismo tiempo, se ve también el alcance de lo que se puede vigilar y lo que esa observación sola no dice.
Cuando «solo ese entorno va lento», acote la operación con Procmon, confirme el destino de conexión con fltmc instances y apóyelo con las funciones de diagnóstico del producto y comparaciones en condiciones alineadas. Las exclusiones y Dev Drive se eligen después, comprobando las condiciones de aplicación y el impacto en la protección. Con ese orden se puede avanzar en la investigación sin debilitar la protección solo por una conjetura.
La estructura tratada en la serie no sirve para afirmar una sola causa, sino como un mapa para decidir qué medir a continuación. Pensar por separado qué puede ocurrir bajo una línea de la aplicación es el primer paso para poner un fallo o un problema de rendimiento en una forma que se pueda reproducir y explicar.
Artículos relacionados
- Las profundidades del I/O de Windows (1.ª entrega): panorama del sistema de I/O
- Las profundidades del I/O de Windows (4.ª entrega): el administrador de caché
- Las profundidades del I/O de Windows (5.ª entrega): estructura interna de NTFS
- Guía práctica de Process Monitor
- Falsos positivos de Microsoft Defender y su impacto en el rendimiento
- Investigación con Process Explorer, Handle y VMMap
- Lista mínima de comprobación de seguridad para aplicaciones Windows
Áreas de consultoría relacionadas
En KomuraSoft LLC investigamos problemas de rendimiento y fallos de aplicaciones de negocio de Windows del tipo «solo en el PC del cliente las operaciones de archivo van lentas» o «el comportamiento cambió al introducir un producto de seguridad». También es objeto de investigación la etapa en la que no se sabe si la causa es un filtro, la aplicación, el sistema de archivos o la red.
Al ponerse en contacto, indique, en la medida en que se sepa, la operación que se vuelve lenta, el entorno en el que ocurre y en el que no, si se usa local, una carpeta compartida o la nube, y el producto de seguridad instalado. El modo de compartir registros o archivos que contengan información confidencial, consúltelo primero.
Referencias
-
Microsoft Learn, About file system filter drivers. Sobre el papel y los usos de los filtros del sistema de archivos. ↩ ↩2
-
Microsoft Learn, Filter Manager Concepts. Sobre FltMgr, las instancias, el orden pre/post, las operaciones de destino y la coexistencia con filtros heredados. ↩ ↩2 ↩3 ↩4 ↩5
-
Microsoft Learn, Advantages of the Filter Manager Model. Sobre las ventajas del modelo de minifiltro y el mecanismo de tratar operaciones seleccionadas. ↩ ↩2 ↩3
-
Microsoft Learn, PFLT_PRE_OPERATION_CALLBACK. Sobre los valores de retorno del callback pre y las restricciones de cada uno. ↩ ↩2
-
Microsoft Learn, Processing I/O Operations. Sobre dejar en espera y reanudar el I/O, y la consideración del contexto de ejecución. ↩ ↩2
-
Microsoft Learn, FAST_IO_DISPATCH structure. Sobre el camino de tratamiento de Fast I/O, incluido el modelo heredado. ↩
-
Microsoft Learn, Load order groups and altitudes for minifilter drivers. Sobre la posición relativa, la definición de instancia, las bandas de números por uso y las altitudes decimales. ↩ ↩2 ↩3
-
Microsoft Learn, Request a Filter Altitude Identifier. Sobre el método de solicitud, los datos necesarios y el plazo de tramitación. ↩
-
Microsoft Learn, Blocking legacy file system filter drivers. Sobre las columnas de salida de fltmc y la indicación Legacy de la columna Frame. ↩
-
Microsoft Learn, Tools for minifilter development and testing. Sobre la enumeración de filtros, instancias y volúmenes con fltmc y otras herramientas. ↩ ↩2
-
Microsoft Learn, Allocated altitudes. Sobre la lista pública de nombres de filtro y altitudes asignadas. ↩ ↩2
-
Microsoft Learn, Cloud Files API. Sobre la base de la sincronización en la nube que usa marcadores de posición. ↩
-
Microsoft Learn, Process Monitor - Sysinternals. Sobre la vigilancia del sistema de archivos, el Registro, procesos y subprocesos, y la visualización de filtros y de la pila. ↩ ↩2 ↩3
-
Microsoft Learn, Configure custom exclusions for Microsoft Defender Antivirus. Sobre el destino de las exclusiones y el impacto en la protección. ↩ ↩2 ↩3
-
Microsoft Learn, FltCancelFileOpen. Sobre la cancelación de la apertura en post-create y la restricción de que no se deshacen los cambios del archivo. ↩
-
Microsoft Learn, Set up a Dev Drive on Windows 11. Sobre el uso de Dev Drive, el ajuste de confianza, la conexión de filtros y las precauciones de seguridad. ↩ ↩2
-
Microsoft Learn, Protect Dev Drive using performance mode. Sobre el Dev Drive de confianza, las condiciones de funcionamiento de Defender y el análisis asíncrono. ↩ ↩2
-
Microsoft Learn, CreateFileW. Sobre el papel de la API, que incluye la apertura de un archivo existente y la creación nueva. ↩
-
Microsoft Learn, Windows Performance Recorder. Sobre el registro del comportamiento del sistema y de las aplicaciones basado en ETW. ↩
-
Microsoft Learn, Performance analyzer for Microsoft Defender Antivirus. Sobre el registro del análisis y el análisis de la carga por archivo y por proceso. ↩
Artículos relacionados
Artículos recientes con las mismas etiquetas para profundizar en temas cercanos.
Las profundidades de la E/S de Windows (parte 1) — Toda lectura y escritura se convierte en un IRP: panorama general del sistema de E/S
Primera entrega de la serie que explica desde la base el sistema de E/S de Windows: el espacio de nombres del Administrador de objetos, l...
Las profundidades de la E/S de Windows (parte 5) — Estructura interna de NTFS: comprender el sistema de archivos a partir de la MFT
Quinta entrega de la serie ilustrada sobre la estructura interna de NTFS. Organiza, desde el punto de vista del desarrollador, la MFT y l...
Las profundidades de la E/S de Windows (parte 4) — El administrador de caché: ¿cuándo llega su WriteFile al disco?
Cuarta entrega de la serie ilustrada sobre el administrador de caché de Windows. Organiza la caché implementada como asignación de archiv...
Las profundidades de la E/S de Windows (parte 2) ── E/S síncrona y asíncrona: el verdadero significado de OVERLAPPED
Segunda entrega de la serie que explica con diagramas la E/S síncrona y la E/S asíncrona (E/S superpuesta) de Windows. Organiza el signif...
Las profundidades de la E/S de Windows (parte 3) — Puertos de finalización de E/S (IOCP) y el grupo de subprocesos de .NET: el sótano de async/await
Tercera entrega de la serie ilustrada sobre el puerto de finalización de E/S (IOCP). Organiza el diseño que unifica la cola de finalizaci...
Temas relacionados
Estas páginas sitúan el tema en un contexto más amplio de servicios y decisiones.
Temas técnicos de Windows
Portal sobre desarrollo de Windows, investigación de fallos y aprovechamiento de activos existentes.
Investigación de fallos y problemas prolongados
Fallos intermitentes, diagnóstico de comunicaciones, bloqueos prolongados y pruebas de rutas de error.
Servicios relacionados con este tema
El artículo está directamente relacionado con los siguientes servicios.
Desarrollo de aplicaciones para Windows
Aplicaciones empresariales, integración de dispositivos y herramientas de comunicación, de los requisitos al desarrollo.
Preguntas frecuentes
Preguntas habituales en las consultas sobre el tema del artículo.
- ¿En qué se diferencian un controlador de filtro del sistema de archivos y un minifiltro?
- Un controlador de filtro del sistema de archivos es el término general para un controlador que vigila o controla el I/O de archivos. Un minifiltro es una de las formas de implementarlo: registra callbacks por operación en el Filter Manager (FltMgr) de Windows. La diferencia principal respecto al modelo heredado es que FltMgr se ocupa del trabajo común, como la conexión a la pila y el tratamiento de la finalización. La posición relativa entre minifiltros la decide la altitud. La descarga en caliente solo es posible si ese controlador la admite y permite que se le retire.
- ¿El antivirus analiza todos los accesos a archivos cada vez?
- No necesariamente. Un minifiltro se llama según condiciones como los volúmenes a los que está conectado y las operaciones que registró. Qué analiza a partir de ahí depende de la directiva del producto, de si el archivo ha cambiado, de las exclusiones, etc. Tener un mecanismo que vigila el I/O de archivos no es lo mismo que volver a analizar el archivo entero en cada acceso.
- ¿Una exclusión del antivirus es un ajuste que retira el controlador de filtro?
- Por lo general, no. Es un ajuste que omite, para el destino excluido, el análisis al que se aplica esa configuración. Tampoco desactiva de golpe el EDR, la copia de seguridad o el cifrado de otro fabricante. Lo que cubre una exclusión varía según el producto y la función de protección, y una exclusión amplia de carpeta debilita la protección. En una investigación de rendimiento, mida primero y cambie la configuración solo en el alcance mínimo acordado con el administrador.
- ¿Process Monitor basta por sí solo para identificar un controlador de filtro lento?
- Procmon ayuda a encontrar operaciones lentas y las rutas implicadas, pero Duration no es el tiempo de proceso de un minifiltro concreto. Que el nombre de un controlador aparezca en una pila tampoco basta para afirmar la causa. Confirme la conexión al volumen en cuestión con fltmc y apóyelo con las funciones de diagnóstico del producto, rastros adicionales y comparaciones en condiciones alineadas. El registro de Procmon tampoco es un recuento exhaustivo de todos los accesos al disco físico.
- Si la compilación es lenta, ¿moverla a un Dev Drive mejora siempre?
- No siempre. El modo de rendimiento de Microsoft Defender tiene premisas como un Dev Drive de confianza, que Defender sea el antivirus principal y que la protección en tiempo real esté habilitada. Hace asíncrono el análisis de las aperturas de archivo a las que se aplica para limitar el impacto, pero no es una función que resuelva el comportamiento de productos de otros fabricantes ni otros cuellos de botella como la CPU o la red.
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.