fltOplockFsctrl 函数 (fltkernel.h)
FltOplockFsctrl 代表微型筛选器驱动程序执行各种机会锁 (oplock) 操作。
语法
FLT_PREOP_CALLBACK_STATUS FLTAPI FltOplockFsctrl(
[in] POPLOCK Oplock,
[in] PFLT_CALLBACK_DATA CallbackData,
[in] ULONG OpenCount
);
参数
[in] Oplock
文件的不透明不透明锁指针。 此指针必须由之前对 FltInitializeOplock 的调用初始化。
[in] CallbackData
指向 I/O 操作 FLT_CALLBACK_DATA 结构的指针。 此参数是必需的,不能为 NULL。
[in] OpenCount
请求独占 oplock 时文件的用户句柄数。 为级别 2、R 或 RH oplock 请求设置非零值表示文件中存在字节范围锁。 有关 oplock 类型的信息,请参阅 Oplock 概述。
返回值
FltOplockFsctrl 返回某些 FSCTL 操作的FLT_PREOP_PENDING。 有关详细信息,请参阅以下“备注”部分中列出的 FSCTL 代码参考页。 否则, FltOplockFsctrl 返回FLT_PREOP_COMPLETE。
注解
微型筛选器驱动程序调用 FltOplockFsctrl ,以针对创建或文件系统控制 I/O 操作执行各种机会锁操作。
CallbackData 参数指向的FLT_CALLBACK_DATA结构必须表示基于 IRP 的IRP_MJ_FILE_SYSTEM_CONTROL或IRP_MJ_CREATE操作。
如果操作是IRP_MJ_FILE_SYSTEM_CONTROL操作, 则可以将 FltOplockFsctrl 与以下 FSCTL 代码一起使用:
- FSCTL_OPBATCH_ACK_CLOSE_PENDING
- FSCTL_OPLOCK_BREAK_ACK_NO_2
- FSCTL_OPLOCK_BREAK_ACKNOWLEDGE
- FSCTL_OPLOCK_BREAK_NOTIFY
- FSCTL_REQUEST_BATCH_OPLOCK
- FSCTL_REQUEST_FILTER_OPLOCK
- FSCTL_REQUEST_OPLOCK_LEVEL_1
- FSCTL_REQUEST_OPLOCK_LEVEL_2
FSCTL 代码在操作FLT_PARAMETERS结构的 FsControlCode 成员中设置。 有关 FsControlCode 和其他IRP_MJ_FILE_SYSTEM_CONTROL参数的详细信息,请参阅 IRP_MJ_FILE_SYSTEM_CONTROL FLT_PARAMETERS。
有关机会锁的详细信息,请参阅Microsoft Windows SDK文档。
如果操作是 IRP_MJ_CREATE 请求,则如果满足以下所有条件, 则 FltOplockFsctrl 可用于请求挂起的筛选器机会锁:
- OpenCount 参数的值必须为 1。
- IRP_MJ_CREATE请求的 DesiredAccess 参数的值FILE_READ_ATTRIBUTES。 此参数在操作FLT_PARAMETERS结构的 SecurityContext 成员中设置。 有关详细信息,请参阅 IRP_MJ_CREATE FLT_PARAMETERS。
- IRP_MJ_CREATE操作的 ShareAccess 参数的值是FILE_SHARE_READ、FILE_SHARE_WRITE或FILE_SHARE_DELETE。 此参数在操作FLT_PARAMETERS结构的 ShareAccess 成员中设置。 有关详细信息,请参阅 IRP_MJ_CREATE FLT_PARAMETERS。
调用此函数的筛选器和文件系统必须将调用同步到系统提供的 oplock 包中。 有关详细信息,请参阅 Oplock 同步 。
要求
目标平台 | 通用 |
标头 | fltkernel.h (包括 Fltkernel.h) |
Library | FltMgr.lib |
DLL | Fltmgr.sys |
IRQL | <= APC_LEVEL |
请参阅
IRP_MJ_CREATE 的 FLT_PARAMETERS
IRP_MJ_FILE_SYSTEM_CONTROL 的 FLT_PARAMETERS
FSCTL_OPBATCH_ACK_CLOSE_PENDING