Partager via


Fonction ExInterlockedAddUlong (wdm.h)

La routine ExInterlockedAddUlong ajoute une valeur longue non signée à un entier non signé donné en tant qu’opération atomique.

Syntaxe

ULONG ExInterlockedAddUlong(
  [in, out] PULONG      Addend,
  [in]      ULONG       Increment,
  [in, out] PKSPIN_LOCK Lock
);

Paramètres

[in, out] Addend

Pointeur vers un entier long non signé dont la valeur doit être ajustée par la valeur Incrémenter .

[in] Increment

Spécifie un entier long non signé à ajouter.

[in, out] Lock

Pointeur vers un verrou de rotation à utiliser pour synchroniser l’accès à l’addend.

Valeur retournée

ExInterlockedAddUlong retourne la valeur d’origine (nonumée) de l’addend.

Remarques

Envisagez d’utiliser InterlockedExchangeAdd au lieu de cette routine. InterlockedExchangeAdd peut être plus efficace, car il n’utilise pas de verrou de rotation et il est inclus par le compilateur.

Les routines de prise en charge qui effectuent des opérations verrouillées sont supposées être incapables de provoquer une erreur de page. Autrement dit, ni leur code ni aucune des données qu’ils touchent ne peuvent provoquer une erreur de page sans faire tomber le système. Ils utilisent des verrous de rotation pour obtenir l’atomicité sur les machines multiprocesseurs symétriques. L’appelant doit fournir un stockage résident pour le verrou, qui doit être initialisé avec KeInitializeSpinLock avant l’appel initial à un ExInterlockedXxx.

Le verrou passé à ExInterlockedAddULong est utilisé pour garantir que l’opération d’ajout sur Addend est atomique par rapport à toutes les autres opérations sur la même valeur qui se synchronisent avec ce même verrou de rotation.

Les masques ExInterlockedAddUlong interrompent. Par conséquent, il peut être utilisé pour la synchronisation entre un ISR et un autre code de pilote, à condition que le même verrou ne soit jamais réutilisé dans un appel à une routine qui s’exécute à IRQL = DISPATCH_LEVEL.

Notez que les appels à Xxx verrouillé sont garantis pour être atomiques par rapport aux autres appels Xxx verrouillés sans verrous de rotation fournis par l’appelant.

Les appelants d’ExInterlockedAddUlong s’exécutent sur n’importe quel IRQL. Le stockage du paramètre Addend doit être résident à tous les IRQL.

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 N’importe quel niveau (voir la section Remarques)

Voir aussi

ExInterlockedAddLargeInteger

InterlockedDecrement

InterlockedIncrement

KeInitializeSpinLock