FsRtlOplockBreakToNoneEx 函数 (ntifs.h)
FsRtlOplockBreakToNoneEx 例程立即中断所有机会锁 (oplocks) ,而不考虑任何 oplock 键。
语法
NTSTATUS FsRtlOplockBreakToNoneEx(
[in, out] 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, out] Oplock
文件的不透明不锁定指针。 此指针必须已通过先前对 FsRtlInitializeOplock 的调用进行初始化。
[in] Irp
指向 I/O 操作的 IRP 的指针。
[in] Flags
关联文件 I/O 操作的位掩码。 文件系统或筛选器驱动程序设置位以指定 FsRtlOplockBreakToNoneEx 的行为。 Flags 参数具有以下选项:
OPLOCK_FLAG_COMPLETE_IF_OPLOCKED (0x00000001)
指定允许 oplock 中断继续,而不会阻止或挂起导致 oplock 中断的操作。 通常,仅当 Irp 参数指向的 IRP 声明IRP_MJ_CREATE操作时,才使用此标志。
[in, optional] Context
指向调用方定义的上下文信息的指针,该信息要传递给 CompletionRoutine 和 PostIrpRoutine 参数指向的回调例程。
[in, optional] CompletionRoutine
指向调用方提供的回调例程的指针。 如果正在进行 oplock 中断,则此例程在中断完成时调用。 此参数是可选的,可以为 NULL。 如果为 NULL,则调用方将进入等待状态,直到完成 oplock 中断。
此例程的声明如下:
typedef VOID
(*POPLOCK_WAIT_COMPLETE_ROUTINE) (
IN PVOID Context,
IN PIRP Irp
);
此例程具有以下参数:
上下文
在 Context 参数中传递给 FsRtlOplockBreakToNoneEx 的上下文信息指针。
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 参数中传递给 FsRtlOplockBreakToNoneEx 的上下文信息指针。
Irp
指向 I/O 操作的 IRP 的指针。
返回值
FsRtlOplockBreakToNoneEx 返回STATUS_SUCCESS或相应的 NTSTATUS 代码,如以下代码之一:
返回代码 | 说明 |
---|---|
|
IRP 已取消。 STATUS_CANCELLED是错误代码。 |
|
正在中断 oplock。 因此,IRP 已吊坠。 STATUS_PENDING是一个成功的代码。 |
|
正在进行 oplock) (机会性锁中断。 STATUS_OPLOCK_BREAK_IN_PROGRESS是 FsRtlOplockBreakToNoneEx 返回的成功代码,如果调用方在 Flags 参数中设置OPLOCK_FLAG_COMPLETE_IF_OPLOCKED并且必须断开 oplock。 |
注解
有关机会锁的详细信息,请参阅Microsoft Windows SDK文档。
微筛选器应调用 FltOplockBreakToNoneEx 而不是 FsRtlOplockBreakToNoneEx。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | FsRtlOplockBreakToNoneEx 例程从 Windows 7 开始可用。 |
目标平台 | 通用 |
标头 | ntifs.h (包括 Ntifs.h) |
Library | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | <= APC_LEVEL |