CA2145 : Les méthodes transparentes ne doivent pas être décorées avec SuppressUnmanagedCodeSecurityAttribute
TypeName |
TransparentMethodsShouldNotUseSuppressUnmanagedCodeSecurity |
CheckId |
CA2145 |
Catégorie |
Microsoft.Security |
Modification avec rupture |
Oui |
Cause
Une méthode transparente, une méthode marquée avec la méthode SecuritySafeCriticalAttribute, ou un type qui contient une méthode est marquée avec l'attribut SuppressUnmanagedCodeSecurityAttribute.
Description de la règle
Les méthodes décorées avec l'attribut SuppressUnmanagedCodeSecurityAttribute ont un LinkDemand implicite placé sur toute méthode qui l'appelle. Ce LinkDemand requiert que le code appelant soit critique de sécurité. Le marquage de la méthode qui utilise SuppressUnmanagedCodeSecurity avec l'attribut SecurityCriticalAttribute rend cette spécification plus évidente pour les appelants de la méthode.
Comment corriger les violations
Pour résoudre une violation de cette règle, marquez la méthode ou le type avec l'attribut SecurityCriticalAttribute.
Quand supprimer les avertissements
Ne supprimez aucun avertissement de cette règle.
Code
using System;
using System.Runtime.InteropServices;
using System.Security;
namespace TransparencyWarningsDemo
{
public class SafeNativeMethods
{
// CA2145 violation - transparent method marked SuppressUnmanagedCodeSecurity. This should be fixed by
// marking this method SecurityCritical.
[DllImport("kernel32.dll", SetLastError = true)]
[SuppressUnmanagedCodeSecurity]
[return: MarshalAs(UnmanagedType.Bool)]
internal static extern bool Beep(uint dwFreq, uint dwDuration);
}
}