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