Compartir a través de


CA2149: Los métodos transparentes no deben llamar a código nativo

Nombre de tipo

TransparentMethodsMustNotCallNativeCode

Identificador de comprobación

CA2149

Categoría

Microsoft.Security

Cambio problemático

Motivo

Un método llama a una función nativa a través de un código auxiliar de método como P/Invoke.

Descripción de la regla

Esta regla se desencadena en cualquier método transparente que llame directamente a código nativo, por ejemplo, a través de P/Invoke.Las infracciones de esta regla conducen a una MethodAccessException en el modelo de transparencia de nivel 2, y a una petición completa de UnmanagedCode en el modelo de transparencia de nivel 1.

Cómo corregir infracciones

Para corregir una infracción de esta regla, marque el método que llama al código nativo con el atributo SecuritySafeCriticalAttribute o SecurityCriticalAttribute.

Cuándo suprimir advertencias

No suprima las advertencias de esta regla.

Ejemplo

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);
        }
    }

}