ExAcquireResourceSharedLite routine
ExAcquireResourceSharedLite 获取一个给定的资源以用于给调用者线程共享访问。
Syntax
BOOLEAN ExAcquireResourceSharedLite(
_Inout_ PERESOURCE Resource,
_In_ BOOLEAN Wait
);
Parameters
Resource [in, out]
指向需要获取的资源。
Wait [in]
当资源不能被立即获取时,指定例程的行为。如为 TRUE,调用者进入等待状态直到资源能被获取,否则例程直接返回,无视资源能否被获取。
Return value
调用者可以通过调用ExReleaseResourceLite 或 ExReleaseResourceForThreadLite之一释放资源。
ExAcquireResourceSharedLite 返回TRUE 如果(或者当)资源获取到时。例程返回FALSE 如果输入的参数 Wait 是 FALSE 并且共享访问权限无法被立即授予时。
Remarks
是否(何时)调用者被授予共享访问取决于以下条件:
·
若资源当前未被(线程)拥有,共享访问权限立即被授予给当前线程。
·
如果调用者已经获取到了资源(共享或者独占访问),当前线程被(递归地?)授予同类型的访问权限。注意调用这个函数并不会转换一个独占式的访问权限为共享式的访问权限。
·
如果资源当前被其他线程共享式拥有,并且没有其他线程正在等待对这个资源进行一个独占式的访问。共享访问权限被立即授予调用者。如果有一个独占式的线程在等待,那么调用者进入等待状态。
·
如果当前资源被其他一个线程独占式拥有,或者是当前有另外一个线程在等待独占式访问这个资源并且调用者并且调用者尚未获取共享式的访问权限,那么当前进程也将进入一个等待状态(Wait 设置为TRUE),或者orExAcquireResourceSharedLite 返回FALSE。
·
调用这个例程之前普通的内核APC投递必须被禁用。通过调用KeEnterCriticalRegion禁用普通内核APC的投递。直到这个资源已经释放之前投递必须保持被禁止的状态,资源释放后在APC投递可以通过调用KeLeaveCriticalRegion重新启用. 更多信息详见 Disabling APCs.
Requirements
Target platform | |
Version | Available starting with Windows 2000. |
Header | Wdm.h (include Wdm.h, Ntddk.h, or Ntifs.h) |
Library | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | <= APC_LEVEL |
DDI compliance rules | IrqlExApcLte3, WithinCriticalRegion, HwStorPortProhibitedDDIs, WithinCriticalRegion(storport) |
See also
ExAcquireResourceExclusiveLite
ExAcquireSharedStarveExclusive
ExAcquireSharedWaitForExclusive
ExConvertExclusiveToSharedLite
ExIsResourceAcquiredSharedLite
ExReleaseResourceForThreadLite