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
要傳遞至 CompletionRoutine 和 PrePendIrpRoutine 參數所指向之回呼例程的呼叫端定義內容資訊的指標。
[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 |