fltAcquireResourceExclusive 函数 (fltkernel.h)

FltAcquireResourceExclusive 例程获取给定的资源,以供调用线程进行独占访问。

语法

VOID FLTAPI FltAcquireResourceExclusive(
  [in/out] PERESOURCE Resource
);

参数

[in/out] Resource

指向不透明 ERESOURCE 结构的指针。 此结构必须由调用方从非分页池中分配,并通过调用 ExInitializeResourceLiteExReinitializeResourceLite 进行初始化。

返回值

备注

FltAcquireResourceExclusive 获取由调用线程进行独占访问的给定资源。

以下情况确定是否或何时向调用方授予对给定资源的独占访问权限:

  • 如果当前不拥有该资源,则会立即授予对当前线程的独占访问权限。

  • 如果调用方已获取独占访问权限的资源,则以递归方式向当前线程授予相同类型的访问权限。

  • 对资源具有共享访问权限的调用方必须释放锁,然后以独占方式重新获取它。

  • 如果资源当前由另一个线程作为独占拥有,或者调用方仅对资源具有共享访问权限,则当前线程将进入等待状态,直到获取资源。

如果两个线程都在同一资源上持有一个共享锁,并且两个线程都尝试以独占方式获取锁而不释放其共享锁,则它们将死锁。 这意味着每个线程将等待另一个线程释放其在锁上的共享保留,并且两者都不会释放其共享保留,直到另一个线程释放。

FltAcquireResourceExclusiveExAcquireResourceExclusiveLite 的包装器,用于禁用正常的内核 APC 传递。

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

若要在获取资源后释放资源,请调用 FltReleaseResource。 每次成功调用 FltAcquireResourceExclusive 都必须与对 FltReleaseResource 的后续调用相匹配。

若要获取用于共享访问的资源,请调用 FltAcquireResourceShared

若要从系统的资源列表中删除资源,请调用 ExDeleteResourceLite

若要初始化资源以供重用,请调用 ExReinitializeResourceLite

有关 ERESOURCE 结构的详细信息,请参阅 ERESOURCE 例程简介

要求

要求
最低受支持的客户端 Windows XP SP2
最低受支持的服务器 Windows Server 2003 SP1
标头 fltkernel.h
Library FltMgr.lib
IRQL IRQL <= APC_LEVEL