CA2138: Los métodos transparentes no deben llamar a métodos con el atributo SuppressUnmanagedCodeSecurity
Elemento | Valor |
---|---|
RuleId | CA2138 |
Category | Microsoft.Security |
Cambio importante | Problemático |
Causa
Un método transparente de seguridad llama a un método marcado con el atributo SuppressUnmanagedCodeSecurityAttribute.
Nota
Esta regla está en desuso. Para más información, consulte Reglas en desuso.
Descripción de la regla
Esta regla se activa en cualquier método transparente que llame directamente al código nativo, por ejemplo, mediante una llamada P/Invoke (invocación de plataforma). Los métodos de interoperabilidad P/Invoke y COM marcados con el atributo SuppressUnmanagedCodeSecurityAttribute dan lugar a que se realice un LinkDemand contra el método de llamada. Dado que el código transparente de seguridad no puede satisfacer LinkDemands, el código tampoco puede llamar a métodos marcados con el atributo SuppressUnmanagedCodeSecurity o métodos de clase marcados con el atributo SuppressUnmanagedCodeSecurity. Se producirá un error en el método o la demanda se convertirá en una demanda completa.
Las infracciones de esta regla tienen como resultado MethodAccessException en el modelo de transparencia de nivel 2 y una demanda completa de UnmanagedCode en el modelo de transparencia de nivel 1.
Cómo corregir infracciones
Para corregir una infracción de esta regla, quite el atributo SuppressUnmanagedCodeSecurityAttribute y marque el método con el atributo SecurityCriticalAttribute o SecuritySafeCriticalAttribute.
Cuándo suprimir las advertencias
No suprima las advertencias de esta regla.
Ejemplo
using System;
using System.Runtime.InteropServices;
using System.Security;
namespace TransparencyWarningsDemo
{
public class CallSuppressUnmanagedCodeSecurityClass
{
[SuppressUnmanagedCodeSecurity]
[DllImport("kernel32.dll", SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool Beep(uint dwFreq, uint dwDuration);
public void CallNativeMethod()
{
// CA2138 violation - transparent method calling a method marked with SuppressUnmanagedCodeSecurity
// (this is also a CA2149 violation as well, since this is a P/Invoke and not an interface call).
Beep(10000, 1);
}
}
}
Comentarios
https://aka.ms/ContentUserFeedback.
Próximamente: A lo largo de 2024 iremos eliminando gradualmente GitHub Issues como mecanismo de comentarios sobre el contenido y lo sustituiremos por un nuevo sistema de comentarios. Para más información, vea:Enviar y ver comentarios de