FltOplockBreakToNoneEx 函数 (fltkernel.h)
FltOplockBreakToNoneEx 例程立即中断所有机会锁(oplocks),而不考虑任何 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的行为。 标志 参数具有以下选项:
OPLOCK_FLAG_COMPLETE_IF_OPLOCKED(0x00000001)
允许 oplock 中断继续,而不会阻止或挂起导致 oplock 中断的作。 通常,仅当 CallbackData 参数指向的回调数据表示的 I/O作是IRP_MJ_CREATE作时,才会使用此标志。
[in, optional] Context
指向要传递给 WaitCompletionRoutine 和 PrePostCallbackDataRoutine 参数指向的回调例程的调用方定义的上下文信息的指针。
[in, optional] WaitCompletionRoutine
指向调用方提供的回调例程的指针。 如果作锁中断正在进行中,则当中断完成时将调用此例程。 此参数是可选的,可以 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代码之一:
返回代码 | 描述 |
---|---|
|
FltOplockBreakToNoneEx 遇到池分配失败,或者调用 FsRtlOplockBreakToNoneEx 函数返回错误。 FltOplockBreakToNoneEx 将在 IO_STATUS_BLOCK 结构的 状态 成员中设置错误代码。 IO_STATUS_BLOCK结构是在 FLT_CALLBACK_DATA 回调数据结构的 IoStatus 成员中指定的。 CallbackData 参数指向此FLT_CALLBACK_DATA。 |
|
已启动作锁中断,这导致筛选器管理器将 I/O作发布到工作队列。 I/O作由 CallbackData 参数指向的回调数据表示。 |
|
CallbackData 参数指向的回调数据未笔接,并且 I/O作会立即执行。 请注意,如果在 Flags 参数中指定的调用方指定OPLOCK_FLAG_COMPLETE_IF_OPLOCKED,则即使 I/O作未插入,oplock 中断实际上也可能正在进行中。 若要确定情况是否为这种情况,调用方应检查 IO_STATUS_BLOCK 结构 状态 成员中的STATUS_OPLOCK_BREAK_IN_PROGRESS。 IO_STATUS_BLOCK结构是在 FLT_CALLBACK_DATA 回调数据结构的 IoStatus 成员中指定的。 |
言论
有关机会锁的详细信息,请参阅 Microsoft Windows SDK 文档。
要求
要求 | 价值 |
---|---|
最低支持的客户端 | FltOplockBreakToNoneEx 例程从 Windows 7 开始可用。 |
目标平台 | 普遍 |
标头 | fltkernel.h (包括 Fltkernel.h) |
库 | FltMgr.lib |
DLL | Fltmgr.sys |
IRQL | <= APC_LEVEL |