Поделиться через


C28113

Предупреждение C28113: доступ к локальной переменной через функцию Interlocked

Драйвер использует служебную исполняемую подпрограмму Interlocked, например InterlockedDecrement, для получения локальной переменной.

Хотя драйверам разрешено передавать адрес локальной переменной в другую функцию, а затем использовать функцию Interlocked для обработки этой переменной, важно убедиться, что стек не будет неожиданно выгружаться на диск, а для переменной задано правильное время существования во всех потоках, которые могут ее использовать.

Пример

Как правило, возвращаемое значение служебной исполняемой подпрограммы Interlocked используется в последующих вычислениях вместо входных аргументов.Кроме того, подпрограммы Interlocked защищают только первый аргумент (крайний левый).Использование подпрограммы Interlocked следующим образом не защищает значение глобальной переменной и зачастую бессмысленно.

InterlockedExchange(&local, global)

Следующая форма оказывает тот же эффект на данные и обеспечивает безопасный доступ к глобальной переменной.

local = InterllockedExchange(&global, global)