CA2138: Transparentní metody nesmějí volat metody s atributem SuppressUnmanagedCodeSecurity
Název_typu |
TransparentMethodsMustNotCallSuppressUnmanagedCodeSecurityMethods |
CheckId |
CA2138 |
Kategorie |
Microsoft.Security |
Změnit rozdělení |
Rozdělení |
Příčina
Metoda zabezpečení průhledných volá metodu, která je označena SuppressUnmanagedCodeSecurityAttribute atributu.
Popis pravidla
Toto pravidlo je transparentní metodu, která volá přímo do nativního kódu, například pomocí prostřednictvím P/Invoke (platforma vyvolat) volání.P/Invoke a COM interop metody, které jsou označeny SuppressUnmanagedCodeSecurityAttribute výsledek v LinkDemand proti volající metodu v atributu.Protože kód průhledné zabezpečení nemůže splnit LinkDemands, kód také nelze volat metody, které jsou označeny atributem SuppressUnmanagedCodeSecurity nebo metody třídy, která je označena atributem SuppressUnmanagedCodeSecurity.Metoda se nezdaří nebo poptávky budou převedeny na plné poptávky.
Porušení tohoto pravidla vést k MethodAccessException v modelu 2 úrovně zabezpečení průhlednosti a celou poptávku UnmanagedCode v modelu průhlednosti úrovně 1.
Jak opravit porušení
Porušení tohoto pravidla vyřešit, odeberte SuppressUnmanagedCodeSecurityAttribute atributu a označit metodu s SecurityCriticalAttribute nebo SecuritySafeCriticalAttribute atributu.
Při potlačení upozornění
Nepotlačovat upozornění od tohoto pravidla.
Příklad
using System;
using System.Runtime.InteropServices;
using System.Security;
namespace TransparencyWarningsDemo
{
public class CallSuppressUnmanagedCodeSecurityClass
{
[SuppressUnmanagedCodeSecurity]
[DllImport("kernel32.dll", SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool Beep(uint dwFreq, uint dwDuration);
public void CallNativeMethod()
{
// CA2138 violation - transparent method calling a method marked with SuppressUnmanagedCodeSecurity
// (this is also a CA2149 violation as well, since this is a P/Invoke and not an interface call).
Beep(10000, 1);
}
}
}