Oplock 同步處理
要求 獨佔作業鎖定 的篩選和文件系統, (oplocks) 必須將呼叫同步處理至系統提供的 oplock 套件。 特別是,對 oplock FSCTRL 例程的呼叫 (建立 oplock) ,必須針對對 oplock 檢查斷例程的呼叫進行同步處理。 這兩組例程的清單包括:
Oplock FSCTRL 例程:
- Minifilters: FltOplockFsctrl、 FltOplockFsctrlEx
- 舊版篩選和文件系統: FsRtlOplockFsctrl、 FsRtlOplockFsctrlEx、 FsRtlUpperOplockFsctrl
Oplock 檢查中斷例程:
- Minifilters: FltCheckOplock、 FltCheckOplockEx
- 舊版篩選和文件系統:FsRtlCheckOplock、FsRtlCheckOplockEx、FsRtlCheckOplockEx2、FsRtlOplockBreakH
處理 oplock 要求時,篩選和文件系統必須確定下列事項:
- 可能會中斷 oplock 的 I/O 無法與處理要求平行發生。
- Oplock 要求無法與 oplock 中斷通知同時發生。
要求為相同檔案控制區塊建立獨佔作業鎖定的 IRP 呼叫, (FCB) 如下:
- 在 Create.Options 中設定FILE_OPEN_REQUIRING_OPLOCK位的IRP_MJ_CREATE
- 使用 oplock 控制件IRP_MJ_FILE_SYSTEM_CONTROL
以下是作業同步處理的一些範例:
處理 oplock 要求時,文件系統會獨佔取得一些資源、呼叫 FsRtlOplockFsctrlEx,然後釋放資源。
處理 oplock 中斷通知時,文件系統會取得相同的資源分享、呼叫 FsRtlOplockFsctrlEx,然後釋放資源。
執行 I/O 時,文件系統會取得相同的資源分享、呼叫 FsRtlCheckOplockEx2、執行 I/O,以及釋放資源。
上層文件系統應該確保它們以類似的方式同步 處理 FsRtlCheckUpperOplock 和 FsRtlUpperOplockFsctrl 的呼叫。