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)
Library FltMgr.lib
IRQL <= APC_LEVEL

另请参阅

FltAcquirePushLockExclusive

FltAcquirePushLockSharedEx

FltDeletePushLock

FltInitializePushLock

FltReleasePushLock

FsRtlEnterFileSystem

KeEnterCriticalRegion