Compartir a través de


CA2145: Los métodos transparentes no deben ser representativos con el atributo SuppressUnmanagedCodeSecurityAttribute

TypeName

TransparentMethodsShouldNotUseSuppressUnmanagedCodeSecurity

Identificador de comprobación

CA2145

Categoría

Microsoft.Security

Cambio problemático

Problemático

Motivo

Un método transparente, un método que está marcado con el método SecuritySafeCriticalAttribute, o un tipo que contiene un método que está marcado con el atributo SuppressUnmanagedCodeSecurityAttribute.

Descripción de la regla

Los métodos decorados con el atributo SuppressUnmanagedCodeSecurityAttribute tienen una LinkDemand implícita colocada en cualquier método que la llame.Esta LinkDemand requiere que el código de llamada sea crítico para la seguridad.Marcar el método que utiliza SuppressUnmanagedCodeSecurity con el atributo SecurityCriticalAttribute hace este requisito más obvio para los llamadores del método.

Cómo corregir infracciones

Para corregir una infracción de esta regla, marque el método o tipo con el atributo SecurityCriticalAttribute.

Cuándo suprimir advertencias

No suprima las advertencias de esta regla.

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