FltAcquirePushLockExclusive 函数 (fltkernel.h)
FltAcquirePushLockExclusive 宏获取给定的推送锁,供调用线程进行独占访问。
语法
VOID FLTAPI FltAcquirePushLockExclusive(
[in, out] PEX_PUSH_LOCK PushLock
);
参数
[in, out] PushLock
类型为 PEX_PUSH_LOCK的不透明推送锁指针。 此指针必须由之前调用 FltInitializePushLock进行初始化。
返回值
没有。
言论
FltAcquirePushLockExclusive 获取给定的推送锁供调用线程进行独占访问。
推送锁类似于 ERESOURCE 结构(也称为资源),因为它们可以获取共享或独占访问。 有关推送锁的详细信息,请参阅 FltInitializePushLock的参考条目。
与 ERESOURCE 结构不同,无法以递归方式获取推送锁。 如果调用方已获取推送锁进行独占或共享访问,线程将挂起。
当调用方获得对给定推送锁的独占访问权限时,取决于以下情况:
如果推送锁当前未拥有,则会立即向当前线程授予独占访问权限。
如果已获取推送锁供另一个线程进行独占或共享访问,则当前线程将进入等待状态,直到可以获取推送锁。
由于 FltAcquirePushLockExclusive 禁用正常的内核 APC 传递,因此在 调用 fltAcquirePushLockExclusive之前,无需调用 KeEnterCriticalRegion 或 FsRtlEnterFileSystem。
若要在获取推送锁后释放推送锁,请调用 FltReleasePushLock。 对 FltAcquirePushLockExclusive 的每个调用都必须匹配对 FltReleasePushLock的后续调用。
若要获取用于共享访问的推送锁,请调用 FltAcquirePushLockShared。
若要初始化推送锁,请调用 FltInitializePushLock。
若要删除推送锁,请调用 FltDeletePushLock。
要求
要求 | 价值 |
---|---|
目标平台 | 普遍 |
标头 | fltkernel.h (包括 Fltkernel.h) |
库 | FltMgr.lib |
IRQL | <= APC_LEVEL |