CA2138: I metodi Transparent non devono chiamare i metodi con l'attributo SuppressUnmanagedCodeSecurity
Articolo | Valore |
---|---|
ID regola | CA2138 |
Category | Microsoft.Security |
Modifica | Interruzione |
Causa
Un metodo trasparente per la sicurezza chiama un metodo contrassegnato con l'attributo SuppressUnmanagedCodeSecurityAttribute .
Nota
Questa regola è stata deprecata. Per altre informazioni, vedere Regole deprecate.
Descrizione regola
Questa regola viene attivata su qualsiasi metodo trasparente che chiama direttamente nel codice nativo, ad esempio usando una chiamata P/Invoke (platform invoke). I metodi di interoperabilità P/Invoke e COM contrassegnati con l'attributo comportano l'esecuzione SuppressUnmanagedCodeSecurityAttribute di un LinkDemand sul metodo chiamante. Poiché il codice trasparente per la sicurezza non può soddisfare LinkDemands, il codice non può chiamare anche i metodi contrassegnati con l'attributo SuppressUnmanagedCodeSecurity o i metodi della classe contrassegnati con l'attributo SuppressUnmanagedCodeSecurity. Il metodo avrà esito negativo o la richiesta verrà convertita in una richiesta completa.
Le violazioni di questa regola comportano un MethodAccessException nel modello di trasparenza della sicurezza di livello 2 e una richiesta completa per UnmanagedCode nel modello di trasparenza di livello 1.
Come correggere le violazioni
Per correggere una violazione di questa regola, rimuovere l'attributo SuppressUnmanagedCodeSecurityAttribute e contrassegnare il metodo con l'attributo SecurityCriticalAttributeSecuritySafeCriticalAttribute o .
Quando eliminare gli avvisi
Non escludere un avviso da questa regola.
Esempio
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);
}
}
}
Commenti e suggerimenti
https://aka.ms/ContentUserFeedback.
Presto disponibile: Nel corso del 2024 verranno gradualmente disattivati i problemi di GitHub come meccanismo di feedback per il contenuto e ciò verrà sostituito con un nuovo sistema di feedback. Per altre informazioni, vedereInvia e visualizza il feedback per