CA2149 : Les méthodes transparentes ne doivent pas appeler du code natif
TypeName |
TransparentMethodsMustNotCallNativeCode |
CheckId |
CA2149 |
Catégorie |
Microsoft.Security |
Modification avec rupture |
Oui |
Cause
Une méthode appelle une fonction native via un stub de méthode tel que P/Invoke.
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 MethodAccessException dans le modèle de transparence de niveau 2, et une demande complète pour UnmanagedCode dans le modèle de transparence de niveau 1.
Comment corriger les violations
Pour résoudre 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);
}
}
}