共用方式為


FsRtlCheckUpperOplock 函式 (ntifs.h)

FsRtlCheckUpperOplock 例程會在它們持有變更狀態的 oplock 時,在次要或分層文件系統中提供機會性鎖定(oplock)。 次要文件系統,例如網路重新導向器和叢集文件服務,呼叫 FsRtlCheckUpperOplock,當次要文件系統保留在較低文件系統中的 oplock 時,變更狀態。 中斷或升級可能會發生狀態變更。 FsRtlCheckUpperOplock 會在必要時中斷上層文件系統的 oplock,以確認新的較低 oplock 狀態。 呼叫端也可以為中斷通知和擱置狀態的通知提供選擇性回呼。

語法

NTSTATUS FsRtlCheckUpperOplock(
  [in]           POPLOCK                       Oplock,
  [in]           ULONG                         NewLowerOplockState,
  [in, optional] PVOID                         CompletionRoutineContext,
  [in, optional] POPLOCK_WAIT_COMPLETE_ROUTINE CompletionRoutine,
                 POPLOCK_FS_PREPOST_IRP        PrePendRoutine,
  [in]           ULONG                         Flags
);

參數

[in] Oplock

檔案的不透明不透明指標。 此指標必須由先前呼叫 FsRtlInitializeOplock初始化。

[in] NewLowerOplockState

值,表示次要文件系統在較低文件系統中保留的要求 oplock。 這是下列的位 OR 組合:

價值 意義
OPLOCK_LEVEL_CACHE_READ 表示 oplock Read (R) 類型。
OPLOCK_LEVEL_CACHE_WRITE 表示 oplock Write (W) 類型。
OPLOCK_LEVEL_CACHE_HANDLE 表示 oplock Handle (H) 類型。

[in, optional] CompletionRoutineContext

要傳遞至 CompletionRoutinePrePendIrpRoutine 參數所指向之回呼例程的呼叫端定義內容資訊的指標。

[in, optional] CompletionRoutine

呼叫端提供的回呼例程指標。 如果機會鎖定中斷正在進行中,當中斷完成時,就會呼叫此例程。 這個參數是選擇性的,而且可以是 NULL。 如果是 NULL,呼叫端會進入等候狀態,直到機會鎖定中斷完成為止。

此例程的宣告和參數描述如下所示:

typedef VOID
(*POPLOCK_WAIT_COMPLETE_ROUTINE) (
      _In_ PVOID Context,
      _In_opt_ PIRP Irp
      );
參數 描述
內容 傳遞至 CompletionRoutineContext 參數的內容資訊指標,FsRtlCheckUpperOplock
Irp I/O 作業之 IRP 的選擇性指標。 FsRtlCheckUpperOplock 一律將此設定為 NULL。

PrePendRoutine

如果 FsRtlCheckUpperOplock 會傳回STATUS_PENDING,則呼叫端提供的回呼例程指標。 這個參數是選擇性的,而且可以是 NULL。

此例程的宣告和參數描述如下所示:

typedef VOID
(*POPLOCK_FS_PREPOST_IRP) (
      _In_ PVOID Context,
      _in_opt_ PIRP Irp
      );
參數 描述
內容 傳遞至 CompletionRoutineContext 參數的內容資訊指標,FsRtlCheckUpperOplock
Irp I/O 作業之 IRP 的選擇性指標。 FsRtlCheckUpperOplock 一律將此設定為 NULL。

[in] Flags

相關聯檔案 I/O 作業的位掩碼。 文件系統或篩選驅動程式會設定位,以指定 FsRtlCheckUpperOplock的行為。 Flags 參數具有下列選項:

價值 意義
OPLOCK_UPPER_FLAG_CHECK_NO_BREAK (0x00010000) 如果 NewLowerOplockSt ate 的值 會導致任何 oplock 中斷,則傳回STATUS_CANNOT_BREAK_OPLOCK。
OPLOCK_UPPER_FLAG_NOTIFY_REFRESH_READ (0x00020000) 只中斷讀取 (R) 上層 oplock,並通知 R 持有者,他們可能會再次要求 R。所有其他上層 oplock 都會檢查它將會傳回STATUS_CANNOT_BREAK_OPLOCK。

傳回值

FsRtlCheckUpperOplock 會傳回適當的 NTSTATUS 程式代碼,例如下列其中一項:

傳回碼 描述
STATUS_SUCCESS 不需要 oplock 中斷,或已認可中斷。 如果 CompletionRoutine 為 NULL,則在處理 oplock 中斷時,FsRtlCheckUpperOplock 區塊,而不是傳回STATUS_PENDING。
STATUS_CANNOT_BREAK_OPLOCK 無法完成 oplock 中斷。 如需限制中斷的條件,請參閱 旗標
STATUS_PENDING 機會主義鎖定中斷正在進行中。 如果提供,PrePendIrpRoutine 會呼叫為暫止作業的通知。 當 oplock 中斷完成時,會呼叫 CompletionRoutine。 STATUS_PENDING是成功的程序代碼。

要求

要求 價值
最低支援的用戶端 Windows 8.1
目標平臺 普遍
標頭 ntifs.h (include Ntifs.h)
連結庫 NtosKrnl.lib
DLL NtosKrnl.exe
IRQL IRQL <= APC_LEVEL

另請參閱

FsRtlCheckOplockEx

FsRtlUpperOplockFsctrl