Oplock の同期
排他的な便宜的ロック (oplock) を要求するフィルターとファイル システムは、システム提供の便宜的ロックパッケージに呼び出しを同期する必要があります。 特に、(便宜的ロックを確立するために) 便宜的ロック FSCTRL ルーチンの呼び出しは、便宜的ロックチェック中断ルーチンの呼び出しに対して同期する必要があります。 ルーチンの両方のセットの一覧を次に示します。
便宜的ロック FSCTRL ルーチン。
- ミニフィルター: FltOplockFsctrl、 FltOplockFsctrlEx
- レガシ フィルターとファイル システム: FsRtlOplockFsctrl、FsRtlOplockFsctrlEx、FsRtlUpperOplockFsctrl
便宜的ロックチェック中断ルーチン。
- ミニフィルター: FltCheckOplock、 FltCheckOplockEx
- レガシ フィルターとファイル システム: FsRtlCheckOplock、FsRtlCheckOplockEx、FsRtlCheckOplockEx2、FsRtlOplockBreakH
便宜的ロック要求を処理する場合、フィルターとファイル システムは次のことを確認する必要があります。
- 便宜的ロックを中断する可能性のある I/O は、要求の処理と並行して行うことはできません。
- 便宜的ロック要求は、便宜的ロック解除の受信確認と同時に行うことはできません。
同じファイル制御ブロック (FCB) の排他的な便宜的ロックの作成を要求する IRP 呼び出しは次のとおりです。
- Create.Options で FILE_OPEN_REQUIRING_OPLOCK ビットが設定されている IRP_MJ_CREATE
- 便宜的ロックコントロールを使用した IRP_MJ_FILE_SYSTEM_CONTROL
便宜的ロック同期の例を次に示します。
便宜的ロック要求を処理する場合、ファイル システムは一部のリソースを排他的に取得し、FsRtlOplockFsctrlEx を呼び出して、リソースを解放します。
便宜的ロック解除の受信確認を処理する場合、ファイル システムは共有されている同じリソースを取得し、FsRtlOplockFsctrlEx を呼び出して、リソースを解放します。
I/O を実行すると、ファイル システムはその同じリソース共有を取得し、FsRtlCheckOplockEx2 を呼び出し、I/O を実行して、リソースを解放します。
上位のファイル システムでは、FsRtlCheckUpperOplock と FsRtlUpperOplockFsctrl の呼び出しを同様の方法で同期させる必要があります。