Condividi tramite


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 che effettua la chiamata sia critico per la sicurezza. 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);
    }
}