Share via


CA2149: I metodi Transparent non devono effettuare chiamate nel codice nativo

Articolo Valore
ID regola CA2149
Category Microsoft.Security
Modifica Interruzione

Causa

Un metodo chiama una funzione nativa tramite uno stub del metodo, ad esempio P/Invoke.

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 tramite un P/Invoke. Le violazioni di questa regola comportano un MethodAccessException nel modello di trasparenza 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, contrassegnare il metodo che chiama il codice nativo con l'attributo SecurityCriticalAttribute o SecuritySafeCriticalAttribute .

Quando eliminare gli avvisi

Non escludere un avviso da questa regola.

Esempio

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

}