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 중단 승인과 동시에 발생할 수 없습니다.
동일한 FCB(파일 제어 블록)에 대한 배타적 oplock 생성을 요청하는 IRP 호출은 다음과 같습니다.
- 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 호출 간에 비슷한 방식으로 동기화되도록 해야 합니다.