fltProcessFileLock 函数 (fltkernel.h)

FltProcessFileLock 例程处理并完成文件锁定操作。

语法

FLT_PREOP_CALLBACK_STATUS FLTAPI FltProcessFileLock(
  [in]           PFILE_LOCK         FileLock,
  [in]           PFLT_CALLBACK_DATA CallbackData,
  [in, optional] PVOID              Context
);

参数

[in] FileLock

指向文件的 FILE_LOCK 结构的指针。 此结构必须已由以前调用 FltAllocateFileLockFltInitializeFileLock 初始化。

[in] CallbackData

指向回调数据的指针 (FLT_CALLBACK_DATAIRP_MJ_LOCK_CONTROL 操作的) 结构。

[in, optional] Context

完成操作时要使用的上下文指针。 此上下文指针传递到微筛选器驱动程序在上一次调用 FltAllocateFileLock 中注册的 CompleteLockCallbackDataRoutineUnlockRoutine 回调例程。 此参数是可选的,可以为 NULL。

返回值

FltProcessFileLock 返回下列值之一。

返回代码 说明
FLT_PREOP_COMPLETE 筛选器管理器使用 CallbackData 完成,现在可以完成此操作。
FLT_PREOP_DISALLOW_FASTIO CallbackData 表示快速 I/O 操作,堆栈中的微筛选器驱动程序已禁止将快速 I/O 用于此操作。 筛选器管理器不会将操作发送到不允许该操作的微筛选器驱动程序下的任何微筛选器驱动程序。 在这种情况下,筛选器管理器仅调用操作后回调例程 (和 CompleteLockCallbackDataRoutine 回调,) 不允许快速 I/O 操作的微筛选器驱动程序上方的微筛选器驱动程序。
FLT_PREOP_PENDING 锁定操作已插入。

注解

FltProcessFileLock (IRP_MJ_LOCK_CONTROL) 操作 处理文件锁。 锁定操作可以是快速 I/O 或基于 IRP 的操作。

对于解锁操作,筛选器管理器调用调用调用方在上一次调用 FltAllocateFileLock 中为FILE_LOCK结构注册的 UnlockRoutine 回调例程。

锁定操作完成后,筛选器管理器调用 CompleteLockCallbackDataRoutine (PFLT_COMPLETE_LOCK_CALLBACK_DATA_ROUTINE调用方在上一次调用 FltAllocateFileLock 中为FILE_LOCK结构注册 ) 完成回调例程。

当传递给 FltProcessFileLockCallbackData 参数表示快速 I/O 操作时,不会调用 FltAllocateFileLock 例程的 CompleteLockCallbackDataRoutine 参数中指定的回调。 仅当 CallbackData 中的 I/O 操作是 IRP 且 CompleteLockCallbackDataRoutine 不是 NULL 时,才会调用回调例程。

若要确定 CallbackData 是否表示快速 I/O 操作,请使用 FLT_IS_FASTIO_OPERATION 宏。

若要分配和初始化新的文件锁结构,请调用 FltAllocateFileLock

若要释放已初始化 FILE_LOCK 结构,请调用 FltFreeFileLock

要求

要求
最低受支持的客户端 带有 SP2 的 Windows XP
最低受支持的服务器 带有 SP1 的 Windows Server 2003
目标平台 通用
标头 fltkernel.h (包括 Fltkernel.h)
Library FltMgr.lib
DLL Fltmgr.sys
IRQL <= APC_LEVEL

另请参阅

FILE_LOCK

FLT_CALLBACK_DATA

FLT_IS_FASTIO_OPERATION

FltAllocateFileLock

FltCheckLockForReadAccess

FltCheckLockForWriteAccess

FltFreeFileLock

FltInitializeFileLock

FltUninitializeFileLock

FsRtlProcessFileLock

IRP_MJ_LOCK_CONTROL

PFLT_COMPLETE_LOCK_CALLBACK_DATA_ROUTINE

[PUNLOCK_ROUTINE] (./ntifs/nc-ntifs-punlock_routine.md