Partager via


C28113

Avertissement C28113 : Accès à une variable locale via une fonction Interlocked

Le pilote utilise une routine de prise en charge exécutive Interlocked, comme InterlockedDecrement, pour accéder à une variable locale.

Bien que les pilotes soient autorisés à passer l'adresse d'une variable locale à une autre fonction, puis à utiliser une fonction à blocage pour agir sur cette variable, il est important de vérifier que la pile n'est pas transférée sur le disque de façon inattendue et que la variable possède la durée de vie correcte sur tous les threads susceptibles de l'utiliser.

Exemple

En règle générale, la valeur de retour d'une routine de prise en charge exécutive Interlocked est utilisée dans les calculs suivants, à la place des arguments d'entrée.En outre, les routines Interlocked protègent uniquement le premier argument (le plus à gauche).Utiliser une routine Interlocked de la façon suivante ne protège pas la valeur de global et s'avère souvent inutile.

InterlockedExchange(&local, global)

La forme suivante a le même effet sur les données et accède à la variable globale en toute sécurité.

local = InterllockedExchange(&global, global)