Oplock 同步
请求 独占机会锁 (oplock) 的筛选器和文件系统必须将调用同步到系统提供的 oplock 包中。 具体而言,对 oplock FSCTRL 例程的调用 (建立 oplock) ,必须与对 oplock 检查中断例程的调用进行同步。 这两组例程的列表包括:
Oplock FSCTRL 例程:
- 微筛选器: FltOplockFsctrl、 FltOplockFsctrlEx
- 旧版筛选器和文件系统: FsRtlOplockFsctrl、 FsRtlOplockFsctrlEx、 FsRtlUpperOplockFsctrl
Oplock 检查中断例程:
- 微筛选器: FltCheckOplock、 FltCheckOplockEx
- 旧版筛选器和文件系统: FsRtlCheckOplock、 FsRtlCheckOplockEx、 FsRtlCheckOplockEx2、 FsRtlOplockBreakH
处理 oplock 请求时,筛选器和文件系统必须确保以下各项:
- 可能中断 oplock 的 I/O 不能与处理请求并行发生。
- Oplock 请求不能与 oplock 中断确认同时发生。
请求为同一文件控制块创建独占 oplock 的 IRP 调用 (FCB) 为:
- 在 Create.Options 中设置了FILE_OPEN_REQUIRING_OPLOCK位的IRP_MJ_CREATE
- 使用 oplock 控件的IRP_MJ_FILE_SYSTEM_CONTROL
下面是 oplock 同步的一些示例:
处理 oplock 请求时,文件系统会以独占方式获取一些资源,调用 FsRtlOplockFsctrlEx 并释放该资源。
处理 oplock 中断确认时,文件系统将获取共享的同一资源,调用 FsRtlOplockFsctrlEx 并释放该资源。
执行 I/O 时,文件系统将获取共享的同一资源,调用 FsRtlCheckOplockEx2,执行 I/O 并释放资源。
上层文件系统应确保它们以类似的方式在 FsRtlCheckUpperOplock 和 FsRtlUpperOplockFsctrl 调用之间同步。