fltAcquireResourceExclusive 函数 (fltkernel.h)
FltAcquireResourceExclusive 例程获取给定的资源,以供调用线程进行独占访问。
语法
VOID FLTAPI FltAcquireResourceExclusive(
[in/out] PERESOURCE Resource
);
参数
[in/out] Resource
指向不透明 ERESOURCE 结构的指针。 此结构必须由调用方从非分页池中分配,并通过调用 ExInitializeResourceLite 或 ExReinitializeResourceLite 进行初始化。
返回值
无
备注
FltAcquireResourceExclusive 获取由调用线程进行独占访问的给定资源。
以下情况确定是否或何时向调用方授予对给定资源的独占访问权限:
如果当前不拥有该资源,则会立即授予对当前线程的独占访问权限。
如果调用方已获取独占访问权限的资源,则以递归方式向当前线程授予相同类型的访问权限。
对资源具有共享访问权限的调用方必须释放锁,然后以独占方式重新获取它。
如果资源当前由另一个线程作为独占拥有,或者调用方仅对资源具有共享访问权限,则当前线程将进入等待状态,直到获取资源。
如果两个线程都在同一资源上持有一个共享锁,并且两个线程都尝试以独占方式获取锁而不释放其共享锁,则它们将死锁。 这意味着每个线程将等待另一个线程释放其在锁上的共享保留,并且两者都不会释放其共享保留,直到另一个线程释放。
FltAcquireResourceExclusive 是 ExAcquireResourceExclusiveLite 的包装器,用于禁用正常的内核 APC 传递。
由于 FltAcquireResourceExclusive 禁用正常的内核 APC 传递,因此在调用 FltAcquireResourceExclusive 之前,无需调用 KeEnterCriticalRegion 或 FsRtlEnterFileSystem。
若要在获取资源后释放资源,请调用 FltReleaseResource。 每次成功调用 FltAcquireResourceExclusive 都必须与对 FltReleaseResource 的后续调用相匹配。
若要获取用于共享访问的资源,请调用 FltAcquireResourceShared。
若要从系统的资源列表中删除资源,请调用 ExDeleteResourceLite。
若要初始化资源以供重用,请调用 ExReinitializeResourceLite。
有关 ERESOURCE 结构的详细信息,请参阅 ERESOURCE 例程简介。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | Windows XP SP2 |
最低受支持的服务器 | Windows Server 2003 SP1 |
标头 | fltkernel.h |
Library | FltMgr.lib |
IRQL | IRQL <= APC_LEVEL |