CA2111: Los punteros no deben estar visibles

Elemento Valor
RuleId CA2111
Category Microsoft.Security
Cambio importante Problemático

Causa

Un campo System.IntPtr o System.UIntPtr público o protegido no es de solo lectura.

Nota

Esta regla está en desuso. Para más información, consulte Reglas en desuso.

Descripción de la regla

IntPtr y UIntPtr son tipos de puntero que se usan para acceder a la memoria no administrada. Si un puntero no es privado, interno o de solo lectura, el código malintencionado puede cambiar el valor del puntero, lo que podría permitir el acceso a ubicaciones arbitrarias en memoria o provocar errores en la aplicación o el sistema.

Si tiene previsto proteger el acceso al tipo que contiene el campo de puntero, consulte CA2112: Los tipos protegidos no deben exponer campos.

Cómo corregir infracciones

Proteja el puntero haciendo que sea de solo lectura, interno o privado.

Cuándo suprimir las advertencias

Suprima una advertencia de esta regla si no se basa en el valor del puntero.

Ejemplo

En el código siguiente se muestran punteros que infringen y cumplen la regla. Observe que los punteros no privados también infringen la regla CA1051: No declarar campos de instancia visibles.

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: Los tipos seguros no deben exponer campos

CA1051: No declarar campos de instancia visibles

Consulte también