只有在開啟檔案的現有數據流時,才適用下列規定(也就是,新建立的數據流不能有已存在的 oplock)。
注意 當處理任何 oplock 的 IRP_MJ_CREATE 時,如果所需的存取僅包含 FILE_READ_ATTRIBUTES、FILE_WRITE_ATTRIBUTES 或 SYNCHRONIZE,除非指定 FILE_RESERVE_OPFILTER,否則 oplock 不會中斷。 如果建立成功,指定 FILE_RESERVE_OPFILTER 必然導致 oplock 中斷。 為了簡潔明了,下表省略了先前所述的內容,因為它適用於所有 oplocks。
| 要求類型 | 條件 |
|---|---|
|
層級 1 |
在下列情況下,IRP_MJ_CREATE中斷:
|
|
如果「oplock」已中斷:
|
|
|
層級 2 |
在下列情況下,IRP_MJ_CREATE中斷:
|
|
如果 oplock 已中斷:
|
|
|
批次 |
在發生如下狀況時,IRP_MJ_CREATE操作失敗:
|
|
如果 oplock 已中斷:
|
|
|
篩選器 |
在下列情況下,IRP_MJ_CREATE失效:
|
|
如果 oplock 已中斷:
|
|
|
參閱 |
在下列情況下,IRP_MJ_CREATE中斷:
|
|
如果 oplock 被中斷:
|
|
|
Read-Handle |
在下列情況下,IRP_MJ_CREATE中斷:
|
|
如果 oplock 已中斷:
|
|
|
讀寫 |
在下列情況下,IRP_MJ_CREATE中斷:
|
|
如果 oplock 已中斷:
|
|
|
讀取:Write-Handle |
在下列情況下,IRP_MJ_CREATE中斷:
|
|
如果 oplock 已中斷:
|
當處理 IRP_MJ_CREATE 作業時,文件系統會進行 Batch 和 Filter oplocks 的額外檢查(而不只是檢查 oplock 套件本身),這個過程會影響文件系統是否要求 oplock 套件執行中斷處理。 在此情況下,一個資料流上的操作可能會影響相同檔案中其他資料流的oplock(即下列準則清單的最後兩項)。 如果符合下列一個或多個條件,文件系統會將要求傳送至 oplock 套件,以執行 oplock 中斷處理:
如果這是開啟的網路查詢,且 KTM 交易存在,請要求中斷。 否則,請勿在開啟網路查詢時要求中斷。
如果在替代數據流上執行 SUPERSEDE、OVERWRITE 或 OVERWRITE_IF 作業,且未指定FILE_SHARE_DELETE,而且主要數據流上有 Batch 或 Filter oplock,請在主要數據流上要求中斷 Batch 或 Filter oplock。
如果在主要資料流上執行 SUPERSEDE、OVERWRITE 或 OVERWRITE_IF 作業,且已要求 DELETE 存取,並且任何替代資料流上有 Batch 或 Filter oplock,請要求在所有有這些替代資料流的資料流上中斷 Batch 或 Filter oplock。
當文件系統決定要求 oplock 套件執行 oplock 中斷處理時,會套用上表中所列的規則。
中斷 Batch 和 Filter oplock 的檢查會在進行共用存取檢查之前發生。 這表示即使開啟要求最終因為共用違規而失敗,Batch 或 Filter oplock 仍會中斷。