Compartilhar via


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

TypeName

TransparentMethodsMustNotCallNativeCode

CheckId

CA2149

Categoria

Microsoft.Security

Alteração Significativa

Quebra

Causa

Um método chama uma função nativo através de um stub do método como P/Invoke.

Descrição da Regra

Esta regra é acionado em qualquer método transparente que chamar diretamente em código nativo, por exemplo, com um P/Invoke.As violações desta regra resultam em MethodAccessException na transparência de nível 2 modelo, e uma procura completa para UnmanagedCode no modelo de transparência de nível 1.

Como Corrigir Violações

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

Quando Suprimir Alertas

Não elimine um alerta desta 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);
        }
    }

}