FltAcquireResourceExclusive 函数 (fltkernel.h)

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

语法

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

参数

[in/out] Resource

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

返回值

没有

言论

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

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

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

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

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

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

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

FltAcquireResourceExclusive 是禁用正常内核 APC 传递的 ExAcquireResourceExclusiveLite 的包装器。

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

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

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

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

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

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

要求

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