(ntifs.h) FsRtlCheckOplock 函式
FsRtlCheckOplock 例程會將檔案 I/O 作業的 IRP 與檔案目前的商機鎖定同步處理 (oplock) 狀態。
語法
NTSTATUS FsRtlCheckOplock(
[in] POPLOCK Oplock,
[in] PIRP Irp,
[in, optional] PVOID Context,
[in, optional] POPLOCK_WAIT_COMPLETE_ROUTINE CompletionRoutine,
[in, optional] POPLOCK_FS_PREPOST_IRP PostIrpRoutine
);
參數
[in] Oplock
檔案的不透明不透明鎖定指標。 此指標必須由先前呼叫 FsRtlInitializeOplock 來初始化。
[in] Irp
I/O 作業之 IRP 的指標。
[in, optional] Context
要傳遞給 CompletionRoutine 和 PostIrpRoutine 參數所指向之回呼例程之呼叫端定義內容資訊的指標。
[in, optional] CompletionRoutine
呼叫端提供的回呼例程指標。 如果正在進行商機鎖定中斷,則會在中斷完成時呼叫此例程。 這個參數是選擇性的,而且可以是 NULL。 如果是 NULL,則呼叫端會進入等候狀態,直到機會鎖定中斷完成為止。
此例程宣告如下:
typedef VOID
(*POPLOCK_WAIT_COMPLETE_ROUTINE) (
IN PVOID Context,
IN PIRP Irp
);
此例程具有下列參數:
參數 | 描述 |
---|---|
Context | 在 Context 參數中傳遞至 FsRtlCheckOplock 的內容資訊指標。 |
Irp | I/O 作業之 IRP 的指標。 |
[in, optional] PostIrpRoutine
如果 I/O 作業張貼至工作佇列,則呼叫端提供的回呼例程指標。 這個參數是選擇性的,而且可以是 NULL。
此例程宣告如下:
typedef VOID
(*POPLOCK_FS_PREPOST_IRP) (
IN PVOID Context,
IN PIRP Irp
);
此例程具有下列參數:
參數 | 描述 |
---|---|
Context | 在 Context 參數中傳遞至 FsRtlCheckOplock 的內容資訊指標。 |
Irp | I/O 作業之 IRP 的指標。 |
傳回值
FsRtlCheckOplock 例程會傳回STATUS_SUCCESS或適當的 NTSTATUS 程式代碼,例如下列其中一項:
傳回碼 | Description |
---|---|
STATUS_CANCELLED | 已取消 IRP。 STATUS_CANCELLED是錯誤碼。 |
STATUS_CANNOT_BREAK_OPLOCK | 如果 IRP 是IRP_MJ_CREATE,且FILE_OPEN_REQUIRING_OPLOCK位於 IRP 的 CreateOptions 中,則例程不會起始現有商機鎖定的中斷,但失敗並出現STATUS_CANNOT_BREAK_OPLOCK。 |
STATUS_OPLOCK_BREAK_IN_PROGRESS | 商機鎖定中斷正在進行中。 IRP 是IRP_MJ_CREATE要求,而且已在作業的 create options 參數中指定FILE_COMPLETE_IF_OPLOCKED。 STATUS_OPLOCK_BREAK_IN_PROGRESS是成功的程序代碼。 |
STATUS_PENDING | 已起始商機鎖定中斷,且 IRP 的控制已傳遞至 oplock 套件。 如果 CompletionRoutine 為 NULL,此例程會在處理 oplock 中斷時封鎖,而不是傳回STATUS_PENDING。 STATUS_PENDING是成功的程序代碼。 |
備註
FsRtlCheckOplock 會根據下列條件,同步處理 I/O 作業的 IRP 與檔案目前的商機鎖定狀態:
如果 I/O 作業會導致商機鎖定中斷,則會起始商機鎖定中斷。
如果 I/O 作業在作業中斷完成之前無法繼續, FsRtlCheckOplock 會傳回STATUS_PENDING,並呼叫 PostIrpRoutine 參數指向的回呼例程。
如果文件系統或篩選驅動程式使用商機鎖定,則必須從任何可能導致不透明鎖定中斷的 I/O 作業分派例程呼叫 FsRtlCheckOplock 。 此規則適用於下列 I/O 作業類型,因為這些作業可能會導致商機鎖定中斷:
- IRP_MJ_CLEANUP
- IRP_MJ_CREATE
- IRP_MJ_FILE_SYSTEM_CONTROL
- IRP_MJ_FLUSH_BUFFERS
- IRP_MJ_LOCK_CONTROL
- IRP_MJ_READ
- IRP_MJ_SET_INFORMATION
- IRP_MJ_WRITE
如需有關商機鎖定的詳細資訊,請參閱 Windows SDK 檔。
Minifilters 應該呼叫 FltCheckOplock ,而不是 FsRtlCheckOplock。
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | Windows 2000 |
目標平台 | Universal |
標頭 | ntifs.h (包含 FltKernel.h、Ntifs.h) |
程式庫 | NtosKrnl.lib |
Dll | NtosKrnl.exe |
IRQL | <= APC_LEVEL |
另請參閱
FSCTL_OPBATCH_ACK_CLOSE_PENDING