Partager via


Fonction ExAcquireResourceExclusiveLite (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 la valeur est TRUE, l’appelant est placé dans un état d’attente jusqu’à ce que la ressource puisse être acquise. Si la valeur est FALSE, la routine retourne immédiatement, que la ressource puisse ou non être acquise.

Valeur retournée

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

Remarques

La liste suivante indique 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 actif.

  • Si l’appelant avait déjà acquis la ressource pour un accès exclusif, le thread actuel se voit accorder le même type d’accès de manière récursive.-

  • Si l’appelant dispose d’un accès partagé à la ressource, l’appelant doit libérer le verrou avant de tenter de l’obtenir de nouveau exclusivement.

  • Si la ressource est actuellement détenue en tant qu’exclusive par un autre thread, ou si l’appelant n’a qu’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 se bloquent. Cela signifie que chaque thread attend que l’autre relâche sa conservation partagée sur le verrou, et que ni l’un ni l’autre ne libère sa conservation partagée jusqu’à ce que l’autre 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 APC du noyau normal en appelant KeEnterCriticalRegion. La remise doit rester désactivée jusqu’à ce que la ressource soit libérée. À ce stade, elle peut être réactivée en appelant KeLeaveCriticalRegion. Pour plus d’informations, consultez Désactivation des API.

Configuration requise

Condition requise Valeur
Plateforme cible Universal
En-tête wdm.h (inclure 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