Condividi tramite


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

TypeName

TransparentMethodsMustNotCallNativeCode

CheckId

CA2149

Category

Microsoft.Security

Breaking Change

Breaking

Causa

Un metodo chiama una funzione nativa tramite un metodo stub quale P/Invoke.

Descrizione della regola

Questa regola funziona su qualsiasi metodo trasparente che chiama direttamente in codice nativo, ad esempio, tramite P/Invoke. Violazioni di questa regola conducono a MethodAccessException nel modello trasparente di livello 2 e ad una richiesta completa per UnmanagedCode nel modello della 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.

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

}