ExAcquireResourceExclusiveLite 函数 (wdm.h)

ExAcquireResourceExclusiveLite 例程获取给定资源,以便由调用线程进行独占访问。

语法

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

参数

[in, out] Resource

指向要获取的资源的指针。

[in] Wait

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

返回值

如果获取了资源,ExAcquireResourceExclusiveLite 将返回 TRUE。 如果输入 WaitFALSE 且无法立即授予独占访问权限,则此例程返回 FALSE

注解

以下列表描述了调用方是否以及何时获得对给定资源的独占访问权限:

  • 如果当前不拥有资源,则会立即向当前线程授予独占访问权限。

  • 如果调用方已获取独占访问权限的资源,则以递归方式向当前线程授予相同类型的访问权限。-

  • 如果调用方对资源具有共享访问权限,则调用方必须先释放该锁,然后才能尝试以独占方式重新获取该锁。

  • 如果资源当前由另一个线程独占拥有,或者调用方仅对资源具有共享访问权限,则当前线程将进入等待状态,直到可以获取资源。

如果两个线程都在同一资源上保留共享锁,并且两个线程都尝试以独占方式获取锁而不释放其共享锁,则它们将死锁。 这意味着,每个线程将等待另一个线程释放其在锁上的共享保留,并且两个线程都不会释放其共享保留,直到另一个线程释放。

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

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

要求

要求
目标平台 通用
标头 wdm.h(包括 Wdm.h、Ntddk.h、Ntifs.h)
Library NtosKrnl.lib
DLL NtosKrnl.exe
IRQL IRQL <= APC_LEVEL
DDI 符合性规则 ExclusiveResourceAccess (wdm) HwStorPortProhibitedDDI (storport) IrqlExApcLte3 (wdm) InCriticalRegion (storport) 、InCriticalRegion (storport) 、 WithinCriticalRegion (wdm)

另请参阅

ExAcquireResourceSharedLite

ExGetExclusiveWaiterCount

ExGetSharedWaiterCount

ExInitializeResourceLite

ExIsResourceAcquiredExclusiveLite

ExReinitializeResourceLite

ExReleaseResourceForThreadLite

ExReleaseResourceLite

KeEnterCriticalRegion

KeLeaveCriticalRegion