Partager via


ExAcquireResourceExclusiveLite, fonction (wdm.h)

La routine ExAcquireResourceExclusiveLite acquiert la ressource donnée pour un accès exclusif par le thread appelant.

Syntaxe

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

Paramètres

[in, out] Resource

Pointeur vers la ressource à acquérir.

[in] Wait

Spécifie le comportement de la routine chaque fois que la ressource ne peut pas être acquise immédiatement. Si TRUE, l’appelant est placé dans un état d’attente jusqu’à ce que la ressource puisse être acquise. Si FALSE, la routine retourne immédiatement, que la ressource puisse être acquise.

Valeur de retour

ExAcquireResourceExclusiveLite retourne TRUE si la ressource est acquise. Cette routine retourne FALSE si le d’attente d’entrée est FALSE et que l’accès exclusif ne peut pas être accordé immédiatement.

Remarques

La liste suivante décrit si et quand un appelant reçoit un accès exclusif à une ressource donnée :

  • Si la ressource n’est actuellement pas détenue, l’accès exclusif est accordé immédiatement au thread actuel.

  • Si l’appelant avait déjà acquis la ressource pour un accès exclusif, le thread actuel reçoit le même type d’accès récursivement.

  • Si l’appelant a un accès partagé à la ressource, l’appelant doit libérer le verrou avant qu’il tente de le réacquire exclusivement.

  • Si la ressource est actuellement détenue comme exclusive par un autre thread ou si l’appelant a uniquement un accès partagé à la ressource, le thread actuel est placé dans un état d’attente jusqu’à ce que la ressource puisse être acquise.

Si deux threads contiennent chacun un verrou partagé sur la même ressource et que les deux tentent d’acquérir le verrou exclusivement sans libérer leur verrou partagé, ils bloquent. Cela signifie que chaque thread attend que l’autre libère sa conservation partagée sur le verrou, et que l’autre ne libère pas sa conservation partagée jusqu’à ce que l’autre ne le fasse.

L’appelant peut libérer la ressource en appelant ExReleaseResourceLite ou ExReleaseResourceForThreadLite.

La remise d’APC du noyau normal doit être désactivée avant d’appeler cette routine. Désactivez la remise d’APC du noyau normal en appelant KeEnterCriticalRegion. La remise doit rester désactivée jusqu’à ce que la ressource soit libérée, à quel moment elle peut être réenable en appelant KeLeaveCriticalRegion. Pour plus d’informations, consultez Désactivation des API.

Exigences

Exigence Valeur
plateforme cible Universel
d’en-tête wdm.h (include Wdm.h, Ntddk.h, Ntifs.h)
bibliothèque NtosKrnl.lib
DLL NtosKrnl.exe
IRQL IRQL <= APC_LEVEL
règles de conformité DDI exclusiveResourceAccess(wdm), HwStorPortProhibitedDDIs(storport), IrqlExApcLte3(wdm), WithinCriticalRegion(storport), WithinCriticalRegion(storport), WithinCriticalRegion(wdm)

Voir aussi

ExAcquireResourceSharedLite

ExGetExclusiveWaiterCount

ExGetSharedWaiterCount

ExInitializeResourceLite

ExIsResourceAcquiredExclusiveLite

ExReinitializeResourceLite

ExReleaseResourceForThreadLite

ExReleaseResourceLite

KeEnterCriticalRegion

KeLeaveCriticalRegion