Fonction ExAcquireSharedWaitForExclusive (wdm.h)
La routine ExAcquireSharedWaitForExclusive acquiert la ressource donnée pour l’accès partagé si l’accès partagé peut être accordé et qu’il n’y a pas de serveurs exclusifs.
Syntaxe
BOOLEAN ExAcquireSharedWaitForExclusive(
[in, out] PERESOURCE Resource,
[in] BOOLEAN Wait
);
Paramètres
[in, out] Resource
Pointeur vers la ressource à acquérir pour l’accès partagé.
[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
ExAcquireSharedWaitForExclusive retourne TRUE si l’accès demandé est accordé ou si un propriétaire exclusif libère la ressource. Cette routine retourne FALSE si l’entrée Wait est FALSE et que l’accès partagé ne peut pas être accordé immédiatement.
Remarques
La plupart des pilotes doivent utiliser ExAcquireResourceSharedLite au lieu d’ExAcquireSharedWaitForExclusive.
L’appelant peut libérer la ressource en appelant ExReleaseResourceLite ou ExReleaseResourceForThreadLite.
Si l’accès partagé ne peut pas être accordé immédiatement, l’appelant peut attendre que d’autres threads acquièrent et libèrent la propriété exclusive de la ressource.
Si ou quand l’appelant reçoit un accès partagé à la ressource donnée dépend des éléments suivants :
- Si la ressource n’est actuellement pas propriétaire, l’accès partagé est accordé immédiatement au thread actif.
- Si l’appelant dispose déjà d’un accès exclusif à la ressource, le thread actuel se voit accorder le même type d’accès de manière récursive.
- Si la ressource est actuellement partagée et qu’aucune tentative d’accès exclusif n’est en attente, l’accès partagé est immédiatement accordé à l’appelant.
-
Si la ressource est actuellement partagée, mais qu’une tentative d’accès exclusif est en attente, l’appelant est placé dans un état d’attente (wait défini sur TRUE) ou ExAcquireSharedWaitForExclusive retourne FALSE.
Lorsque le thread actuel attend d’acquérir la ressource jusqu’à ce qu’une propriété exclusive en attente ait été publiée, ExAcquireSharedWaitForExclusive retourne TRUE lorsque le thread actuel se voit accorder un accès partagé à la ressource et reprend l’exécution.
Si l’appelant spécifie TRUE pour le paramètre Wait , l’appelant bloque jusqu’à ce qu’un autre thread libère la ressource au nom de l’appelant, à l’aide d’ExReleaseResourceForThread. Les enregistreurs de pilotes doivent veiller à ce qu’un autre thread libère réellement la ressource ; sinon, l’appelant est bloqué. ExAcquireResourceSharedLite n’ayant pas cette propriété, les pilotes doivent utiliser cette routine, sauf s’ils nécessitent le comportement particulier d’ExAcquireSharedWaitForExclusive.
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 |
---|---|
Client minimal pris en charge | Disponible à partir de Windows 2000. |
Plateforme cible | Universal |
En-tête | wdm.h (inclure Wdm.h, Ntddk.h, Ntifs.h) |
Bibliothèque | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | <= APC_LEVEL |
Règles de conformité DDI | HwStorPortProhibitedDDIs(storport),IrqlExApcLte3(wdm), SpNoWait(storport),WithinCriticalRegion(storport), WithinCriticalRegion(storport), WithinCriticalRegion(wdm) |
Voir aussi
ExAcquireSharedStarveExclusive
ExConvertExclusiveToSharedLite
ExIsResourceAcquiredExclusiveLite