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
要傳遞至 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) | 如果 NewLowerOplockSt ate 的值 |
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 |