Sinkronisasi Oplock
Filter dan sistem file yang meminta kunci oportunistik eksklusif (oplock) harus menyinkronkan panggilan ke dalam paket oplock yang disediakan sistem. Secara khusus, panggilan ke rutinitas oplock FSCTRL (untuk membangun oplock), harus disinkronkan terhadap panggilan ke rutinitas check-break oplock. Daftar kedua set rutinitas meliputi:
Rutinitas Oplock FSCTRL:
- Minifilter: FltOplockFsctrl, FltOplockFsctrlEx
- Filter warisan dan sistem file: FsRtlOplockFsctrl, FsRtlOplockFsctrlEx, FsRtlUpperOplockFsctrl
Rutinitas check-break Oplock:
- Minifilter: FltCheckOplock, FltCheckOplockEx
- Filter warisan dan sistem file: FsRtlCheckOplock, FsRtlCheckOplockEx, FsRtlCheckOplockEx2, FsRtlOplockBreakH
Saat memproses permintaan oplock, filter dan sistem file harus memastikan hal berikut:
- I/O yang mungkin merusak oplock tidak dapat terjadi secara paralel dengan memproses permintaan.
- Permintaan Oplock tidak dapat terjadi bersamaan dengan pengakuan oplock break.
Panggilan IRP yang meminta pembuatan oplock eksklusif untuk blok kontrol file (FCB) yang sama adalah:
- IRP_MJ_CREATE dengan bit FILE_OPEN_REQUIRING_OPLOCK diatur di Create.Options
- IRP_MJ_FILE_SYSTEM_CONTROL dengan kontrol oplock
Berikut ini adalah beberapa contoh sinkronisasi oplock:
Saat memproses permintaan oplock, sistem file akan memperoleh beberapa sumber daya secara eksklusif, memanggil FsRtlOplockFsctrlEx, dan merilis sumber daya.
Saat memproses pengakuan putus oplock, sistem file akan memperoleh sumber daya yang sama yang dibagikan, memanggil FsRtlOplockFsctrlEx, dan merilis sumber daya.
Saat melakukan I/O, sistem file akan memperoleh sumber daya yang sama yang dibagikan, memanggil FsRtlCheckOplockEx2, melakukan I/O, dan merilis sumber daya.
Sistem file atas harus memastikan bahwa mereka menyinkronkan antara panggilan FsRtlCheckUpperOplock dan FsRtlUpperOplockFsctrl dengan cara yang sama.