Sincronización de interbloqueo
Los filtros y sistemas de archivos que solicitan bloqueos oportunistas exclusivos (oplocks) deben sincronizar las llamadas en el paquete oplock proporcionado por el sistema. En concreto, las llamadas a rutinas fscTRL de oplock (para establecer interbloqueos), deben sincronizarse con las llamadas a rutinas de interrupción de comprobación de bloqueo de oplock. Una lista de ambos conjuntos de rutinas incluye:
Rutinas de Oplock FSCTRL:
- Minifiltros: FltOplockFsctrl, FltOplockFsctrlEx
- Filtros y sistemas de archivos heredados: FsRtlOplockFsctrl, FsRtlOplockFsctrlEx, FsRtlUpperOplockFsctrl
Rutinas de interrupción de la comprobación de interbloqueo:
- Minifiltros: FltCheckOplock, FltCheckOplockEx
- Filtros y sistemas de archivos heredados: FsRtlCheckOplock, FsRtlCheckOplockEx, FsRtlCheckOplockEx2, FsRtlOplockBreakH
Al procesar una solicitud de interbloqueo, los filtros y los sistemas de archivos deben asegurarse de lo siguiente:
- La E/S que podría interrumpir un interbloqueo no se puede producir en paralelo con el procesamiento de la solicitud.
- Las solicitudes de interbloqueo no se pueden producir simultáneamente con confirmaciones de interrupción de interbloqueo.
Las llamadas IRP que solicitan la creación de interbloqueos exclusivos para el mismo bloque de control de archivos (FCB) son:
- IRP_MJ_CREATE con el bit de FILE_OPEN_REQUIRING_OPLOCK establecido en Create.Options
- IRP_MJ_FILE_SYSTEM_CONTROL con controles de interbloqueo
A continuación se muestran algunos ejemplos de sincronización de interbloqueo:
Al procesar una solicitud de interbloqueo, un sistema de archivos adquiriría algún recurso exclusivamente, llamaría a FsRtlOplockFsctrlEx y liberaría el recurso.
Al procesar una confirmación de interrupción de interbloqueo, el sistema de archivos adquiriría ese mismo recurso compartido, llamaría a FsRtlOplockFsctrlEx y liberaría el recurso.
Al realizar E/S, el sistema de archivos adquiriría ese mismo recurso compartido, llamaría a FsRtlCheckOplockEx2, realizaría la E/S y liberaría el recurso.
Los sistemas de archivos superiores deben asegurarse de que se sincronicen entre las llamadas de FsRtlCheckUpperOplock y FsRtlUpperOplockFsctrl de forma similar.