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