CA2149: Métodos transparentes não devem chamar código nativo

TypeName

TransparentMethodsMustNotCallNativeCode

CheckId

CA2149

<strong>Categoria</strong>

Microsoft.Security

Alteração significativa

Quebrando

Causa

Um método chama uma função nativa por meio de um stub do método como, por exemplo, P/Invoke.

Descrição da regra

Essa regra é acionado em qualquer método transparente que chama diretamente no código nativo, por exemplo, por meio de um P/Invoke. Violações desta regra levam a uma MethodAccessException o modelo de transparência de nível 2, e uma solicitação total de UnmanagedCode no modelo de transparência de nível 1.

Como corrigir violações

Para corrigir uma violação desta regra, marcar o método que chama o código nativo com o SecurityCriticalAttribute ou SecuritySafeCriticalAttribute atributo.

Quando suprimir avisos

Não suprimir um aviso da regra.

Exemplo

using System;
using System.Runtime.InteropServices;

namespace TransparencyWarningsDemo
{

    public class CallNativeCodeClass
    {
        [DllImport("kernel32.dll", SetLastError = true)]
        [return: MarshalAs(UnmanagedType.Bool)]
        static extern bool Beep(uint dwFreq, uint dwDuration);

        public void CallNativeMethod()
        {
            // CA2149 violation - transparent method calling native code
            Beep(10000, 1);
        }
    }

}