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