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

Elemento Valor
RuleId CA2149
Category Microsoft.Security
Cambio importante Problemático

Causa

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

Nota

Esta regla está en desuso. Para más información, consulte Reglas en desuso.

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 tienen como resultado MethodAccessException en el modelo de transparencia de nivel 2 y una demanda 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 los atributos SecurityCriticalAttribute o SecuritySafeCriticalAttribute.

Cuándo suprimir las 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);
        }
    }

}