ExAcquireSharedStarveExclusive 函数 (wdm.h)

ExAcquireSharedStarveExclusive 例程获取给定的资源进行共享访问,而无需等待任何挂起的尝试获取对同一资源的独占访问。

语法

BOOLEAN ExAcquireSharedStarveExclusive(
  [in, out] PERESOURCE Resource,
  [in]      BOOLEAN    Wait
);

参数

[in, out] Resource

指向要获取用于共享访问的资源的指针。

[in] Wait

指定每当无法立即获取资源时例程的行为。 如果 TRUE,则调用方将进入等待状态,直到获取资源。 如果 FALSE,则无论是否可以获取资源,例程都会立即返回。

返回值

如果授予请求的访问权限,ExAcquireSharedStarveExclusive 返回 TRUE。 如果输入 WaitFALSE 且无法立即授予共享访问权限,则此例程将返回 FALSE

言论

是否或何时向调用方提供对给定资源的共享访问权限取决于以下情况:

  • 如果资源当前未拥有,则立即向当前线程授予共享访问权限。
  • 如果调用方已获取资源(用于共享或独占访问),则以递归方式向当前线程授予相同类型的访问。 请注意,进行此调用不会将调用方对给定资源的独占访问权限转换为共享访问。
  • 如果资源当前作为另一个线程共享拥有,则立即向调用方授予共享访问权限,即使另一个线程正在等待对该资源的独占访问。
  • 如果资源当前由另一个线程独占,则调用方要么处于等待状态(Wait 设置为 TRUE),要么 ExAcquireSharedStarveExclusive 返回 FALSE
ExAcquireSharedStarveExclusive 的调用方通常需要快速访问共享资源,以便将独占访问器从执行冗余工作中保存。 例如,文件系统可能会调用此例程来修改缓存的资源,例如缓存中固定的 BCB,然后缓存管理器才能获取对资源的独占访问权限并将缓存写出磁盘。

在调用此例程之前,必须禁用正常的内核 APC 传递。 通过调用 KeEnterCriticalRegion禁用正常的内核 APC 传递。 在释放资源之前,传递必须保持禁用状态,此时可以通过调用 KeLeaveCriticalRegion重新启用它。 有关详细信息,请参阅 禁用 APC

调用方可以通过调用 ExReleaseResourceLiteExReleaseResourceForThreadLite释放资源。

要求

要求 价值
最低支持的客户端 从 Windows 2000 开始可用。
目标平台 普遍
标头 wdm.h (包括 Wdm.h、Ntddk.h、Ntifs.h)
NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= APC_LEVEL
DDI 符合性规则 HwStorPortProhibitedDIS(storport)IrqlExApcLte3(wdm)WithinCriticalRegion(storport)、WithinCriticalRegion(storport)、WithinCriticalRegion(wdm)

另请参阅

ExAcquireResourceSharedLite

ExAcquireSharedWaitForExclusive

ExConvertExclusiveToSharedLite

ExGetExclusiveWaiterCount

ExIsResourceAcquiredExclusiveLite

ExIsResourceAcquiredSharedLite