Partilhar via


CA2145: os métodos transparentes não devem ser decorados com o SuppressUnmanagedCodeSecurityAttribute

TypeName

TransparentMethodsShouldNotUseSuppressUnmanagedCodeSecurity

CheckId

CA2145

Categoria

Microsoft.Security

Alteração Significativa

Quebra

Causa

Um método transparente, um método marcado com o método de SecuritySafeCriticalAttribute , ou um tipo que contém um método são marcados com o atributo de SuppressUnmanagedCodeSecurityAttribute .

Descrição da Regra

Os métodos decorados com o atributo de SuppressUnmanagedCodeSecurityAttribute têm um LinkDemand implícito colocado em cima de qualquer método que chama.Este LinkDemand requer que o código de chamada é segurança crítico.Marcar o método que usa SuppressUnmanagedCodeSecurity com o atributo de SecurityCriticalAttribute faz esse requisito mais óbvio para chamadores do método.

Como Corrigir Violações

Para corrigir uma violação desta regra, marque o método ou o tipo com o atributo de SecurityCriticalAttribute .

Quando Suprimir Alertas

Não elimine um alerta desta regra.

Código

using System;
using System.Runtime.InteropServices;
using System.Security;

namespace TransparencyWarningsDemo
{

    public class SafeNativeMethods
    {
        // CA2145 violation - transparent method marked SuppressUnmanagedCodeSecurity.  This should be fixed by 
        // marking this method SecurityCritical.
        [DllImport("kernel32.dll", SetLastError = true)]
        [SuppressUnmanagedCodeSecurity]
        [return: MarshalAs(UnmanagedType.Bool)]
        internal static extern bool Beep(uint dwFreq, uint dwDuration);
    }
}