CA2145: I metodi Transparent non devono includere SuppressUnmanagedCodeSecurityAttribute
TypeName |
TransparentMethodsShouldNotUseSuppressUnmanagedCodeSecurity |
CheckId |
CA2145 |
Category |
Microsoft.Security |
Breaking Change |
Breaking |
Causa
Il metodo Trasparent, contrassegnato da un metodo SecuritySafeCriticalAttribute oppure un tipo che contiene un metodo contrassegnato dall'attributo SuppressUnmanagedCodeSecurityAttribute.
Descrizione della regola
Metodi decorati con l'attributo SuppressUnmanagedCodeSecurityAttribute dispongono di un LinkDemand implicito posizionato su qualsiasi metodo che lo chiama.Questo LinkDemand richiede che il codice chiamante sia SecurityCritical.Contrassegnare il metodo che utilizza SuppressUnmanagedCodeSecurity con l'attributo SecurityCriticalAttribute rende più ovvio questo requisito per i chiamanti del metodo.
Come correggere le violazioni
Per correggere una violazione di questa regola, contrassegnare il metodo o il tipo con SecurityCriticalAttribute:
Esclusione di avvisi
Non escludere un avviso da questa regola.
Codice
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);
}
}