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