Uso de rutinas de finalización de IRP
Nota
Para lograr una confiabilidad y un rendimiento óptimos, use controladores de minifiltro del sistema de archivos con compatibilidad con el Administrador de filtros de archivos en lugar de controladores de filtro del sistema de archivos heredados. Para migrar el controlador heredado a un controlador de minifiltro, consulte Directrices para migrar controladores de filtro heredados.
Los controladores de filtro del sistema de archivos usan rutinas de finalización similares a las usadas por los controladores de dispositivo. Una rutina de finalización realiza el procesamiento de finalización en un IRP. Cualquier rutina de controlador que pase un IRP hacia abajo al controlador de nivel inferior siguiente puede registrar opcionalmente una rutina de finalización para irP llamando a IoSetCompletionRoutine antes de llamar a IoCallDriver.
Cada rutina de finalización de IRP se define de la siguiente manera:
NTSTATUS
(*PIO_COMPLETION_ROUTINE) (
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp,
IN PVOID Context
);
Las rutinas de finalización se llaman en IRQL <= DISPATCH_LEVEL, en un contexto de subproceso arbitrario.
Dado que se pueden llamar en IRQL DISPATCH_LEVEL, las rutinas de finalización no pueden llamar a rutinas en modo kernel a las que se debe llamar en un IRQL inferior, como IoDeleteDevice. Por el mismo motivo, las estructuras de datos que se usan en una rutina de finalización deben asignarse desde un grupo no paginado.
En esta sección se describen los temas siguientes:
Cómo se realiza el procesamiento de finalización
Comprobación de la marca PendingReturned
Devolver el estado de las rutinas de finalización
Comentarios
https://aka.ms/ContentUserFeedback.
Próximamente: A lo largo de 2024 iremos eliminando gradualmente GitHub Issues como mecanismo de comentarios sobre el contenido y lo sustituiremos por un nuevo sistema de comentarios. Para más información, vea:Enviar y ver comentarios de