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