Предупреждение C28113

Доступ к локальной переменной через интерблокированную функцию

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

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

Пример

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

InterlockedExchange(&local, global)

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

local = InterllockedExchange(&global, global)