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