次の方法で共有


C28113

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

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

ドライバーは、ローカル変数のアドレスを別の関数に渡してから、interlocked 関数を使用してその変数を操作できますが、スタックが予期せずにディスクにスワップ アウトされないことと、使用されるすべてのスレッドで変数に適切な有効期間が設定されることを確認する必要があります。

使用例

通常、Interlocked エグゼクティブ サポート ルーチンの戻り値は、入力引数の代わりに後続の計算で使用されます。また、Interlocked ルーチンは、最初の (左端の) 引数のみを保護します。以下のようにして Interlocked ルーチンを使用すると、global の値は保護されないため、多くの場合は意味がありません。

InterlockedExchange(&local, global)

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

local = InterllockedExchange(&global, global)