Freigeben über


CA2111: Zeiger sollten nicht sichtbar sein.

TypeName

PointersShouldNotBeVisible

CheckId

CA2111

Kategorie

Microsoft.Security

Unterbrechende Änderung

Breaking

Ursache

Ein öffentliches oder geschütztes System.IntPtr-Feld oder System.UIntPtr-Feld ist nicht schreibgeschützt.

Regelbeschreibung

IntPtr und UIntPtr sind Zeigertypen, die verwendet werden, um auf nicht verwalteten Arbeitsspeicher zuzugreifen. Wenn ein Zeiger nicht privat, intern oder schreibgeschützt ist, kann bösartiger Code den Wert des Zeigers ändern und damit Zugriffe auf beliebige Speicherbereiche ermöglichen oder Anwendungs- bzw. Systemfehler verursachen.

Wenn Sie Zugriff auf den Typ, der das Zeigerfeld enthält, schützen möchten, lesen Sie CA2112: Gesicherte Typen sollten keine Felder verfügbar machen..

Behandeln von Verstößen

Schützen Sie den Zeiger, indem Sie ihn als schreibgeschützt, intern oder privat deklarieren.

Wann sollten Warnungen unterdrückt werden?

Unterdrücken Sie eine Warnung dieser Regel, wenn der Wert des Zeigers nicht von maßgeblicher Bedeutung ist.

Beispiel

Im folgenden Code werden Zeiger veranschaulicht, die gegen die Regel verstoßen, und Zeiger, die der Regel entsprechen. Beachten Sie, dass auch nicht-private Zeiger gegen die Regel CA1051: Sichtbare Instanzfelder nicht deklarieren verstoßen.

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;
   }
}

Verwandte Regeln

CA2112: Gesicherte Typen sollten keine Felder verfügbar machen.

CA1051: Sichtbare Instanzfelder nicht deklarieren

Siehe auch

Referenz

System.IntPtr

System.UIntPtr