FltOplockBreakToNoneEx 函数 (fltkernel.h)

FltOplockBreakToNoneEx 例程立即中断所有机会锁 (oplock) ,而不考虑任何 oplock 键。

语法

FLT_PREOP_CALLBACK_STATUS FLTAPI FltOplockBreakToNoneEx(
  [in]           POPLOCK                                 Oplock,
  [in]           PFLT_CALLBACK_DATA                      CallbackData,
  [in]           ULONG                                   Flags,
  [in, optional] PVOID                                   Context,
  [in, optional] PFLTOPLOCK_WAIT_COMPLETE_ROUTINE        WaitCompletionRoutine,
  [in, optional] PFLTOPLOCK_PREPOST_CALLBACKDATA_ROUTINE PrePostCallbackDataRoutine
);

参数

[in] Oplock

文件的不透明不锁定指针。 此指针必须已由先前对 FltInitializeOplock 的调用初始化。

[in] CallbackData

指向回调数据的指针, (I/O 操作 FLT_CALLBACK_DATA) 结构。

[in] Flags

关联文件 I/O 操作的位掩码。 微筛选器驱动程序设置位以指定 FltOplockBreakToNoneEx 的行为。 Flags 参数具有以下选项:

OPLOCK_FLAG_COMPLETE_IF_OPLOCKED (0x00000001)

允许 oplock 中断继续,而不会阻止或挂起导致 oplock 中断的操作。 通常,仅当 CallbackData 参数指向的回调数据所表示的 I/O 操作是IRP_MJ_CREATE操作时,才使用此标志。

[in, optional] Context

指向要传递给 WaitCompletionRoutinePrePostCallbackDataRoutine 参数指向的回调例程的调用方定义的上下文信息的指针。

[in, optional] WaitCompletionRoutine

指向调用方提供的回调例程的指针。 如果正在进行 oplock 中断,则此例程在中断完成时调用。 此参数是可选的,可以为 NULL。 如果为 NULL,则调用方将进入等待状态,直到完成 oplock 中断。

此例程的声明如下:

typedef VOID
(*PFLTOPLOCK_WAIT_COMPLETE_ROUTINE) (
    __in PFLT_CALLBACK_DATA CallbackData,
 __in_opt PVOID Context
      );

此例程具有以下参数:

CallbackData

指向 I/O 操作的回调数据结构的指针。

上下文

在 Context 参数中传递给 FltOplockBreakToNoneEx上下文信息指针。

[in, optional] PrePostCallbackDataRoutine

指向调用方提供的回调例程的指针,该例程在 I/O 操作要进行笔触时调用。 在 oplock 包向 IRP 提交之前调用例程。 此参数是可选的,可以为 NULL

此例程的声明如下:

typedef VOID
(*PFLTOPLOCK_PREPOST_CALLBACKDATA_ROUTINE) (
    __in PFLT_CALLBACK_DATA CallbackData,
 __in_opt PVOID Context
      );

此例程具有以下参数:

CallbackData

指向 I/O 操作的回调数据结构的指针。

上下文

在 Context 参数中传递给 FltOplockBreakToNoneEx上下文信息指针。

返回值

FltOplockBreakToNoneEx 返回以下FLT_PREOP_CALLBACK_STATUS代码之一:

返回代码 说明
FLT_PREOP_COMPLETE
FltOplockBreakToNoneEx 遇到池分配失败,或对 FsRtlOplockBreakToNoneEx 函数的调用返回错误。 FltOplockBreakToNoneEx 将在 IO_STATUS_BLOCK 结构的 Status 成员中设置错误代码。 IO_STATUS_BLOCK 结构在 FLT_CALLBACK_DATA 回调数据结构的 IoStatus 成员中指定。 CallbackData 参数指向此FLT_CALLBACK_DATA。
FLT_PREOP_PENDING
启动 oplock 中断,导致筛选器管理器将 I/O 操作发布到工作队列。 I/O 操作由 CallbackData 参数指向的回调数据表示。
FLT_PREOP_SUCCESS_WITH_CALLBACK
CallbackData 参数指向的回调数据未插入,并且 I/O 操作已立即执行。 请注意,如果调用方在 Flags 参数中指定OPLOCK_FLAG_COMPLETE_IF_OPLOCKED,则即使 I/O 操作未完成,oplock 中断也可能实际正在进行中。 若要确定是否是这种情况,调用方应检查IO_STATUS_BLOCK结构的 Status 成员中的STATUS_OPLOCK_BREAK_IN_PROGRESS。 IO_STATUS_BLOCK 结构在 FLT_CALLBACK_DATA 回调数据结构的 IoStatus 成员中指定。

注解

有关机会锁的详细信息,请参阅Microsoft Windows SDK文档。

要求

要求
最低受支持的客户端 FltOplockBreakToNoneEx 例程从 Windows 7 开始可用。
目标平台 通用
标头 fltkernel.h (包括 Fltkernel.h)
Library FltMgr.lib
DLL Fltmgr.sys
IRQL <= APC_LEVEL

另请参阅

FLT_CALLBACK_DATA

FltInitializeOplock

FsRtlOplockBreakToNoneEx

IO_STATUS_BLOCK