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

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

[in, optional] Context

完成操作时要使用的上下文指针。 此上下文指针传递给 CompleteLockCallbackDataRoutineUnlockRoutine 回调例程,该回调例程是在之前调用 FltAllocateFileLock中注册的微型筛选器驱动程序。 此参数是可选的,可以是 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 的操作。

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

锁定操作完成后,筛选器管理器将调用 CompleteLockCallbackDataRoutinePFLT_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
支持的最低服务器 Windows Server 2003 with SP1
目标平台 普遍
标头 fltkernel.h (包括 Fltkernel.h)
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