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)
Library NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= APC_LEVEL
DDI 符合性规则 HwStorPortProhibitedDDI (storport) IrqlExApcLte3 (wdm) InCriticalRegion (storport) , WithinCriticalRegion (storport) , WithinCriticalRegion (wdm)

另请参阅

ExAcquireResourceSharedLite

ExAcquireSharedWaitForExclusive

ExConvertExclusiveToSharedLite

ExGetExclusiveWaiterCount

ExIsResourceAcquiredExclusiveLite

ExIsResourceAcquiredSharedLite