Partager via


Fonction ExAcquireSharedStarveExclusive (wdm.h)

La routine ExAcquireSharedStarveExclusive acquiert une ressource donnée pour l’accès partagé sans attendre les tentatives en attente d’acquisition d’un accès exclusif à la même ressource.

Syntaxe

BOOLEAN ExAcquireSharedStarveExclusive(
  [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

ExAcquireSharedStarveExclusive retourne TRUE si l’accès demandé est accordé. 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

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 a déjà acquis la ressource (pour un accès partagé ou exclusif), le thread actuel bénéficie du même type d’accès de manière récursive. Notez que le fait d’effectuer cet appel ne convertit pas l’accès exclusif d’un appelant à une ressource donnée en accès partagé.
  • Si la ressource est actuellement détenue en tant que partagée par un autre thread, l’accès partagé est accordé immédiatement à l’appelant, même si un autre thread attend un accès exclusif à cette ressource.
  • Si la ressource est actuellement détenue en tant qu’exclusive par un autre thread, l’appelant est placé dans un état d’attente (Wait défini sur TRUE) ou ExAcquireSharedStarveExclusive retourne FALSE.
Les appelants d’ExAcquireSharedStarveExclusive ont généralement besoin d’un accès rapide à une ressource partagée afin d’éviter à un accesseur exclusif d’effectuer un travail redondant. Par exemple, un système de fichiers peut appeler cette routine pour modifier une ressource mise en cache, telle qu’un BCB épinglé dans le cache, avant que le gestionnaire de cache ne puisse acquérir un accès exclusif à la ressource et écrire le cache sur le disque.

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.

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

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),WithinCriticalRegion(storport), WithinCriticalRegion(storport), WithinCriticalRegion(wdm)

Voir aussi

ExAcquireResourceSharedLite

ExAcquireSharedWaitForExclusive

ExConvertExclusiveToSharedLite

ExGetExclusiveWaiterCount

ExIsResourceAcquiredExclusiveLite

ExIsResourceAcquiredSharedLite