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 之前,无需调用 KeEnterCriticalRegion 或 FsRtlEnterFileSystem。
若要在获取推送锁后释放它,请调用 FltReleasePushLock。 每次调用 FltAcquirePushLockShared 必须与对 FltReleasePushLock 的后续调用匹配。
若要获取推送锁以独占访问,请调用 FltAcquirePushLockExclusive。
若要初始化推送锁,请调用 FltInitializePushLock。
若要删除推送锁,请调用 FltDeletePushLock。
要求
要求 | 值 |
---|---|
目标平台 | 通用 |
标头 | fltkernel.h (包括 Fltkernel.h) |
Library | FltMgr.lib |
IRQL | <= APC_LEVEL |