次の方法で共有


警告 C28113

Interlocked 関数経由でローカル変数にアクセスしています

ドライバーは、InterlockedDecrement などの Interlocked エグゼクティブ サポート ルーチンを使用して、ローカル変数にアクセスします。

ドライバーは、ローカル変数のアドレスを別の関数に渡し、その変数を操作するためにインターロックされた関数を使用することが許可されていますが、スタックが予期せずディスクにスワップアウトされること、および変数が使用するすべてのスレッドで正しい有効期間を持っていることを確認することが重要です。

通常、Interlocked エグゼクティブ サポート ルーチンの戻り値は、入力引数の代わりに後続の計算で使用されます。 また、Interlocked ルーチンは、最初の (左端の) 引数のみを保護します。 次の方法で Interlocked ルーチンを使用しても、グローバルの価値は保護されないため、多くの場合、目的を果たしません。

InterlockedExchange(&local, global)

次の形式にすると、データに与える影響を同一に保ちながら、グローバル変数に安全にアクセスできます。

local = InterllockedExchange(&global, global)