次の方法で共有


CA2111: ポインターは参照可能にすることはできません

TypeName

PointersShouldNotBeVisible

CheckId

CA2111

[カテゴリ]

Microsoft.Security

互換性に影響する変更点

あり

原因

パブリックまたはプロテクトの System.IntPtr フィールドまたは System.UIntPtr フィールドが読み取り専用ではありません。

規則の説明

IntPtrUIntPtr は、アンマネージ メモリにアクセスするときに使用するポインターの型です。ポインターがプライベート、内部、または読み取り専用のいずれでもない場合、悪意のあるコードで、ポインターの値が変更される可能性があります。結果的に、メモリの任意の位置にアクセスされたり、アプリケーション エラーやシステム エラーの原因になります。

ポインターのフィールドを含む型に対するアクセスを保護するには、「CA2112: セキュリティで保護された型はフィールドを公開してはなりません」を参照してください。

違反の修正方法

読み取り専用、内部、またはプライベートにすることで、ポインターを保護します。

警告を抑制する状況

ポインターの値に依存していない場合は、この規則による警告を抑制します。

使用例

この規則に違反するポインターと適合するポインターを次のコードに示します。ポインターをプライベートにしないと、規則「CA1051: 参照できるインスタンス フィールドを宣言しないでください」にも違反するので注意してください。

using System;

namespace SecurityRulesLibrary
{

   public class ExposedPointers
   {
      // Violates rule: PointersShouldNotBeVisible.
      public IntPtr publicPointer1;
      public UIntPtr publicPointer2;
      protected IntPtr protectedPointer;

      // Satisfies the rule.
      internal UIntPtr internalPointer;
      private UIntPtr privatePointer;

      public readonly UIntPtr publicReadOnlyPointer;
      protected readonly IntPtr protectedReadOnlyPointer;
   }
}

関連規則

CA2112: セキュリティで保護された型はフィールドを公開してはなりません

CA1051: 参照できるインスタンス フィールドを宣言しないでください

参照

関連項目

System.IntPtr

System.UIntPtr