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