FsRtlCheckUpperOplock 函式 (ntifs.h)

FsRtlCheckUpperOplock 例程提供 oplock (oplock) 檢查次要或分層文件系統時,保留變更狀態的作業鎖定。 次要文件系統,例如網路重新導向器和叢集文件服務,在次要文件系統保留在較低文件系統的 oplock 時呼叫 FsRtlCheckUpperOplock ,變更狀態。 狀態變更可能會因為中斷或升級而發生。 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 讀取 (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) 如果 NewLowerOplockState 的值導致任何 oplock 中斷,則傳回STATUS_CANNOT_BREAK_OPLOCK。
OPLOCK_UPPER_FLAG_NOTIFY_REFRESH_READ (0x00020000) 僅中斷讀取 (R) 上限 oplock,並通知 R 持有者可能會再次要求 R。所有其他上層 oplock 會檢查它將會傳回STATUS_CANNOT_BREAK_OPLOCK。

傳回值

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

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

規格需求

需求
最低支援的用戶端 Windows 8.1
目標平台 Universal
標頭 ntifs.h (包含 Ntifs.h)
程式庫 NtosKrnl.lib
Dll NtosKrnl.exe
IRQL IRQL <= APC_LEVEL

另請參閱

FsRtlCheckOplockEx

FsRtlUpperOplockFsctrl