Синхронизация Oplock
Фильтры и файловые системы, запрашивающие монопольные оппортунистические блокировки (oplock), должны синхронизировать вызовы с предоставляемым системой пакетом oplock. В частности, вызовы процедур oplock FSCTRL (для установления блокировок) должны быть синхронизированы с вызовами процедур oplock проверка-break. Список обоих наборов подпрограмм включает:
Процедуры Oplock FSCTRL:
- Минифильтры: FltOplockFsctrl, FltOplockFsctrlEx
- Устаревшие фильтры и файловые системы: FsRtlOplockFsctrl, FsRtlOplockFsctrlEx, FsRtlUpperOplockFsctrl
Процедуры прерывания проверка Oplock:
- Минифильтры: FltCheckOplock, FltCheckOplockEx
- Устаревшие фильтры и файловые системы: FsRtlCheckOplock, FsRtlCheckOplockEx, FsRtlCheckOplockEx2, FsRtlOplockBreakH
При обработке запроса oplock фильтры и файловые системы должны обеспечить следующее:
- Операции ввода-вывода, которые могут нарушить блокировку, не могут выполняться параллельно с обработкой запроса.
- Запросы Oplock не могут выполняться одновременно с подтверждением прерывания oplock.
Вызовы IRP, запрашивающие создание монопольных блокировок для одного блока управления файлами (FCB), являются следующими:
- IRP_MJ_CREATE с битом FILE_OPEN_REQUIRING_OPLOCK в Create.Options
- IRP_MJ_FILE_SYSTEM_CONTROL с элементами управления oplock
Ниже приведены некоторые примеры синхронизации oplock.
При обработке запроса oplock файловая система получает только некоторые ресурсы, вызывает FsRtlOplockFsctrlEx и освобождает ресурс.
При обработке подтверждения прерывания операции файловая система получает тот же общий ресурс, вызывает FsRtlOplockFsctrlEx и освобождает ресурс.
При выполнении операций ввода-вывода файловая система получает тот же общий ресурс, вызывает FsRtlCheckOplockEx2, выполняет операции ввода-вывода и освобождает ресурс.
Верхние файловые системы должны обеспечивать синхронизацию вызовов FsRtlCheckUpperOplock и FsRtlUpperOplockFsctrl аналогичным образом.