Partilhar via


CA2145: Métodos transparentes não devem ser decorados com o SuppressUnmanagedCodeSecurityAttribute.

TypeName

TransparentMethodsShouldNotUseSuppressUnmanagedCodeSecurity

CheckId

CA2145

<strong>Categoria</strong>

Microsoft.Security

Alteração significativa

Quebrando

Causa

Um método transparente, um método marcado com o SecuritySafeCriticalAttribute método ou um tipo que contém um método está marcado com o SuppressUnmanagedCodeSecurityAttribute atributo.

Descrição da regra

Métodos decorados com o SuppressUnmanagedCodeSecurityAttribute atributo ter um LinkDemand implícito colocada em qualquer método que chama o proprietário. Este LinkDemand requer que o código de chamada crítica de segurança. Marcar o método que usa SuppressUnmanagedCodeSecurity com o SecurityCriticalAttribute atributo faz essa exigência mais óbvia para chamadores do método.

Como corrigir violações

Para corrigir uma violação desta regra, marcar o método ou digitar com o SecurityCriticalAttribute atributo.

Quando suprimir avisos

Não suprimir um aviso da 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);
    }
}