Sdílet prostřednictvím


CA2149: Transparentní metody nesmějí provádět volání do nativního kódu

TypeName

TransparentMethodsMustNotCallNativeCode

CheckId

CA2149

Kategorie

Microsoft.Security

Narušující změna

Narušující

Příčina

Metoda volá nativní funkci prostřednictvím prázdného kódu metody, jako je P/Invoke.

Popis pravidla

Toto pravidlo je vyvoláno na jakékoli transparentní metodě, která přímo volá nativní kód, například prostřednictvím P/Invoke.Porušení tohoto pravidla vede k vyvolání výjimky MethodAccessException v modelu transparentnosti úrovně 2, a k úplnému požadavku na UnmanagedCode v modelu transparentnosti úrovně 1.

Jak vyřešit porušení

Porušení tohoto pravidla lze vyřešit označením metody, která volá nativního kód, pomocí atributu SecurityCriticalAttribute nebo SecuritySafeCriticalAttribute.

Kdy potlačit upozornění

Nepotlačujte upozornění na toto pravidlo.

Příklad

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

}