CA2149: Przezroczyste metody nie musi wywołać do kodu macierzystego
TypeName |
TransparentMethodsMustNotCallNativeCode |
CheckId |
CA2149 |
Kategoria |
Microsoft.Security |
Zmiana kluczowa |
Kluczowa |
Metoda wywołuje funkcję macierzystą poprzez szablon metody taki jak P/Invoke.
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.
Aby naprawić naruszenie tej zasady, należy oznaczyć metodę, która wywołuje kod macierzysty, atrybutem SecurityCriticalAttribute lub SecuritySafeCriticalAttribute.
Nie należy pomijać ostrzeżenia dotyczącego tej reguły.
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);
}
}
}