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
ExIsResourceAcquiredExclusiveLite