Partager via


Fonction FltAcquireResourceExclusive (fltkernel.h)

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

Syntaxe

VOID FLTAPI FltAcquireResourceExclusive(
  [in/out] PERESOURCE Resource
);

Paramètres

[in/out] Resource

Pointeur vers une structure ERESOURCE opaque. Cette structure doit être allouée par l’appelant à partir d’un pool non paginé et initialisée en appelant ExInitializeResourceLite ou ExReinitializeResourceLite.

Valeur de retour

None

Remarques

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

Les circonstances suivantes déterminent si ou quand l’appelant reçoit un accès exclusif à la 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 a déjà acquis la ressource pour l’accès exclusif, le thread actuel se voit accorder le même type d’accès de manière récursive.

  • Les appelants qui ont un accès partagé à la ressource doivent libérer le verrou, puis l’obtenir à 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 tant que l’autre ne le fait pas.

FltAcquireResourceExclusive est un wrapper pour ExAcquireResourceExclusiveLite qui désactive la remise APC normale du noyau.

Étant donné que FltAcquireResourceExclusive désactive la remise APC normale du noyau, il n’est pas nécessaire d’appeler KeEnterCriticalRegion ou FsRtlEnterFileSystem avant d’appeler FltAcquireResourceExclusive.

Pour libérer la ressource après son acquisition, appelez FltReleaseResource. Chaque appel réussi à FltAcquireResourceExclusive doit être mis en correspondance par un appel ultérieur à FltReleaseResource.

Pour acquérir une ressource pour l’accès partagé, appelez FltAcquireResourceShared.

Pour supprimer une ressource de la liste des ressources du système, appelez ExDeleteResourceLite.

Pour initialiser une ressource à réutiliser, appelez ExReinitializeResourceLite.

Pour plus d’informations sur les structures ERESOURCE, consultez Présentation des routines ERESOURCE.

Configuration requise

Condition requise Valeur
Client minimal pris en charge Windows XP SP2
Serveur minimal pris en charge Windows Server 2003 SP1
En-tête fltkernel.h
Bibliothèque FltMgr.lib
IRQL IRQL <= APC_LEVEL