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 结构的指针。 此结构必须由先前调用 FltAllocateFileLock 或 FltInitializeFileLock初始化。
[in] CallbackData
指向 IRP_MJ_LOCK_CONTROL 操作的回调数据(FLT_CALLBACK_DATA)结构的指针。
[in, optional] Context
完成操作时要使用的上下文指针。 此上下文指针传递给 CompleteLockCallbackDataRoutine,UnlockRoutine 回调例程,该回调例程是在之前调用 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。
锁定操作完成后,筛选器管理器将调用 CompleteLockCallbackDataRoutine (PFLT_COMPLETE_LOCK_CALLBACK_DATA_ROUTINE) 完成回调例程,调用方在上一次调用 FltAllocateFileLock中注册了 FILE_LOCK 结构。
当传递给 FltProcessFileLock 的 CallbackData 参数表示快速 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 |
另请参阅
PFLT_COMPLETE_LOCK_CALLBACK_DATA_ROUTINE
[PUNLOCK_ROUTINE](../ntifs/nc-ntifs-punlock_routine.md