Udostępnij za pośrednictwem


CA2149: Jawne metody nie mogą wywoływać kodu natywnego

TypeName

TransparentMethodsMustNotCallNativeCode

CheckId

CA2149

Kategoria

Microsoft.Security

Zmiana kluczowa

Kluczowa

Przyczyna

Metoda wywołuje funkcję macierzystą poprzez szablon metody taki jak P/Invoke.

Opis reguły

Ta reguła jest uruchamiana dla każdej przezroczystej metody, która wywołuje bezpośrednio kod macierzysty, na przykład poprzez P/Invoke.Naruszenie tej zasady prowadzi do wyjątku MethodAccessException w poziomie 2 modelu przezroczystości i wymagania UnmanagedCode w modelu przezroczystości poziomu 1.

Jak naprawić naruszenia

Aby naprawić naruszenie tej zasady, należy oznaczyć metodę, która wywołuje kod macierzysty, atrybutem SecurityCriticalAttribute lub SecuritySafeCriticalAttribute.

Kiedy pominąć ostrzeżenia

Nie należy pomijać ostrzeżenia dotyczącego tej reguły.

Przykład

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

}