共用方式為


FsRtlOplockBreakH 函式 (ntifs.h)

FsRtlOplockBreakH 例程會中斷CACHE_HANDLE_LEVEL機會鎖定(oplocks)。

語法

NTSTATUS FsRtlOplockBreakH(
  [in]           POPLOCK                       Oplock,
  [in]           PIRP                          Irp,
  [in]           ULONG                         Flags,
  [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] Flags

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

OPLOCK_FLAG_COMPLETE_IF_OPLOCKED(0x00000001)

指定允許 oplock 中斷繼續,而不會封鎖或擱置造成 oplock 中斷的作業。

OPLOCK_FLAG_IGNORE_OPLOCK_KEYS (0x00000008)

Windows 7 和更新版本支援。

指定允許無論 oplock 鍵為何,CACHE_HANDLE_LEVEL oplock 中斷繼續。

[in, optional] Context

要傳遞至回呼例程的呼叫端定義內容資訊的指標,CompletionRoutine,以及 PostIrpRoutine 參數所指向的回呼例程。

[in, optional] CompletionRoutine

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

此例程宣告如下:

typedef VOID
(*POPLOCK_WAIT_COMPLETE_ROUTINE) (
      IN PVOID Context,
      IN PIRP Irp
      );

此例程具有下列參數:

上下文

傳遞至 Context 參數的內容資訊指標,FsRtlOplockBreakH

Irp

I/O 作業之 IRP 的指標。

[in, optional] PostIrpRoutine

如果要寫入 I/O 作業,則會呼叫呼叫端提供的回呼例程指標。 例程會在 oplock 套件畫上 IRP 之前呼叫。 這個參數是選擇性的,而且可以 NULL

此例程宣告如下:

typedef VOID
(*POPLOCK_FS_PREPOST_IRP) (
      IN PVOID Context,
      IN PIRP Irp
      );

上下文

傳遞至 Context 參數的內容資訊指標,FsRtlOplockBreakH

Irp

I/O 作業之 IRP 的指標。

傳回值

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

傳回碼 描述
STATUS_CANCELLED
IRP 已取消。 STATUS_CANCELLED是錯誤碼。
STATUS_PENDING
IRP 已張貼到工作佇列。 STATUS_PENDING是成功的程序代碼。
STATUS_CANNOT_BREAK_OPLOCK
無法完成機會鎖定 (oplock) 中斷。 IRP 是IRP_MJ_CREATE要求。 FILE_OPEN_REQUIRING_OPLOCK是在作業的 create options 參數中指定,而且有授與的 oplock。 STATUS_CANNOT_BREAK_OPLOCK是錯誤碼。

言論

當作業必須中斷CACHE_HANDLE_LEVEL oplock 時,作業會呼叫 FsRtlOplockBreakH

如果呼叫端在 Flags 參數中指定OPLOCK_FLAG_IGNORE_OPLOCK_KEYS旗標,則不論 oplock 機碼為何,FsRtlOplockBreakH 會中斷所有CACHE_HANDLE_LEVEL oplock。 FsRtlOplockBreakH 的預設行為是中斷索引鍵不符合呼叫端檔案物件索引鍵的 oplock。

迷你篩選程序應該呼叫 FltOplockBreakH,而不是 FsRtlOplockBreakH

要求

要求 價值
最低支援的用戶端 從 Windows 7 開始,FsRtlOplockBreakH 例程可供使用。
目標平臺 普遍
標頭 ntifs.h (include Ntifs.h)
連結庫 NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= APC_LEVEL

另請參閱

FltOplockBreakH

FsRtlInitializeOplock