FltInitializePushLock 函数 (fltkernel.h)
FltInitializePushLock 例程初始化推送锁变量。
语法
VOID FLTAPI FltInitializePushLock(
[out] PEX_PUSH_LOCK PushLock
);
参数
[out] PushLock
指向调用方提供的存储的指针,该存储必须至少为 size of (EX_PUSH_LOCK) 的值,才能初始化推送锁变量。 存储必须在 32 位平台上对齐 4 字节,在 64 位平台上必须是 8 字节对齐的。
返回值
无
备注
对于文件系统微筛选器,推送锁很少是一个不错的选择。 如下所述,其某些特征可能与文件系统固有的重新进入特性不兼容。
推送锁类似于 ERESOURCE 结构 , (也称为“资源”) 通过以下方式:
- 推送锁可由一组线程用于同步。
- 可以获取推送锁进行共享或独占访问。
- 尽管调用方为推送锁变量提供存储,但EX_PUSH_LOCK结构是不透明的:也就是说,其成员保留供系统使用。
- 授予独占访问权限的算法对所有线程都不公平。 如果存在高级别的排他锁争用,则无法保证授予线程独占访问权限的顺序。
- 没有用于在运行时确定推送锁的当前所有者的支持例程。 (ERESOURCE 结构的用户可以调用 ExIsResourceAcquiredExclusiveLite 等例程,以确定当前线程是否具有对 resource.)
-
出于同样的原因,不支持扩展来确定调试时推送锁的当前所有者,从而诊断死锁。 (ERESOURCE 结构的用户可以使用
!locks
kd 或 windbg 中的扩展来查找此信息。) - 没有驱动程序验证程序支持来帮助通过推送锁早期诊断死锁。
- 无法以递归方式获取排他推送锁。
- 当推送锁主要为共享访问获取时,它们比 ERESOURCE 结构更有效。
- 推送锁的存储可以从分页池或非分页池中分配。 只能从非分页池分配 ERESOURCE 结构。
- EX_PUSH_LOCK结构比 ERESOURCE 结构小得多。
若要获取用于独占访问的推送锁,请调用 FltAcquirePushLockExclusive。
若要获取用于共享访问的推送锁,请调用 FltAcquirePushLockShared。
若要释放推送锁,请调用 FltReleasePushLock。
若要删除推送锁,请调用 FltDeletePushLock。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | 此例程在 Microsoft Windows XP SP2、Microsoft Windows Server 2003 SP1 及更高版本上可用。 |
目标平台 | 通用 |
标头 | fltkernel.h (包括 Fltkernel.h) |
Library | FltMgr.lib |
DLL | Fltmgr.sys |
IRQL | <= APC_LEVEL |
另请参阅
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈