CA2145: Los métodos transparentes no deben ser representativos con el atributo SuppressUnmanagedCodeSecurityAttribute
Nombre de tipo |
TransparentMethodsShouldNotUseSuppressUnmanagedCodeSecurity |
Identificador de comprobación |
CA2145 |
Categoría |
Microsoft.Security |
Cambio problemático |
Sí |
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.Este LinkDemand requiere que el código que llama 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);
}
}