FltAcquirePushLockShared 函数 (fltkernel.h)

FltAcquirePushLockShared 例程获取由调用线程进行共享访问的给定推送锁。

语法

VOID FLTAPI FltAcquirePushLockShared(
  [in, out] PEX_PUSH_LOCK PushLock
);

参数

[in, out] PushLock

类型为 PEX_PUSH_LOCK的不透明推送锁指针。 此指针必须由之前调用 FltInitializePushLock进行初始化。

返回值

没有。

言论

FltAcquirePushLockShared 例程获取由调用线程进行共享访问的给定推送锁。

推送锁类似于 ERESOURCE 结构(也称为资源),因为它们可以获取共享或独占访问。 有关推送锁的详细信息,请参阅 FltInitializePushLock的参考条目。

与 ERESOURCE 结构不同,无法以递归方式获取推送锁。 如果调用方已获取推送锁进行独占访问,系统将挂起。 如果调用方已获取共享访问的推送锁,则它可以再次接收共享访问。 但是,每次调用 FltAcquirePushLockShared 都必须匹配后续调用 FltReleasePushLock

当向调用方提供对给定推送锁的共享访问权限时,取决于以下情况:

  • 如果推送锁当前未拥有,则立即向当前线程授予共享访问权限。

  • 如果已获取推送锁供另一个线程共享访问,并且没有线程正在等待对推送锁的独占访问,则立即向调用方授予共享访问权限。 如果存在排他服务员,则调用方将进入等待状态。

  • 如果已获取推送锁供另一个线程进行独占访问,或者如果有另一个线程等待独占访问,则当前线程将进入等待状态,直到可以获取推送锁。

由于 FltAcquirePushLockShared 禁用正常的内核 APC 传递,因此在调用 fltAcquirePushLockShared 之前,无需调用 KeEnterCriticalRegionFsRtlEnterFileSystem

若要在获取推送锁后释放推送锁,请调用 FltReleasePushLock。 对 FltAcquirePushLockShared 的每个调用都必须匹配对 FltReleasePushLock的后续调用。

若要获取推送锁进行独占访问,请调用 FltAcquirePushLockExclusive

若要初始化推送锁,请调用 FltInitializePushLock

若要删除推送锁,请调用 FltDeletePushLock

要求

要求 价值
目标平台 普遍
标头 fltkernel.h (包括 Fltkernel.h)
FltMgr.lib
IRQL <= APC_LEVEL

另请参阅

FltAcquirePushLockExclusive

FltAcquirePushLockSharedEx

FltDeletePushLock

FltInitializePushLock

FltReleasePushLock

FsRtlEnterFileSystem

KeEnterCriticalRegion