CA2149 : Les méthodes transparentes ne doivent pas appeler du code natif

Élément Valeur
ID de la règle CA2149
Category Microsoft.Security
Modification avec rupture Rupture

Cause

Une méthode appelle une fonction native par le biais d’un stub de méthode tel que P/Invoke.

Notes

Cette règle est déconseillée. Pour plus d’informations, consultez Règles dépréciées.

Description de la règle

Cette règle se déclenche sur toute méthode transparente qui appelle directement en code natif (par exemple, via un appel P/Invoke). Les violations de cette règle provoquent une exception MethodAccessException dans le modèle de transparence de niveau de sécurité 2, et une demande complète pour le code UnmanagedCode dans le modèle de transparence de niveau 1.

Comment corriger les violations

Pour corriger une violation de cette règle, marquez la méthode qui appelle le code natif avec l’attribut SecurityCriticalAttribute ou SecuritySafeCriticalAttribute.

Quand supprimer les avertissements

Ne supprimez aucun avertissement de cette règle.

Exemple

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

}