Partilhar via


CA2111: Ponteiros não deverá ser visíveis

TypeName

PointersShouldNotBeVisible

CheckId

CA2111

<strong>Categoria</strong>

Microsoft.Security

Alteração significativa

Quebrando

Causa

Um público ou protegido System.IntPtr ou System.UIntPtr campo não é somente leitura.

Descrição da regra

IntPtre UIntPtr são tipos de ponteiro são usados para acessar a memória não gerenciada.Se um ponteiro não é particular, interno ou somente leitura, o código mal-intencionado pode alterar o valor do ponteiro, potencialmente permitindo o acesso aos locais arbitrários na memória ou causando falhas de aplicativo ou sistema.

Se você pretende acesso seguro para o tipo que contém o campo de ponteiro, consulte CA2112: Tipos de seguros não devem expor campos.

Como corrigir violações

Proteja o ponteiro, tornando-o somente leitura, interna ou privada.

Quando suprimir avisos

Elimina um aviso esta regra, se você não confiar no valor do ponteiro.

Exemplo

O código a seguir mostra os ponteiros que violam e satisfazem a regra.Observe que os ponteiros não-particulares também violam a regra CA1051: Não declarar os campos de instância visível.

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

Regras relacionadas

CA2112: Tipos de seguros não devem expor campos

CA1051: Não declarar os campos de instância visível

Consulte também

Referência

System.IntPtr

System.UIntPtr