CA2139: os métodos transparentes talvez não usem o atributo HandleProcessCorruptingExceptions
TypeName |
TransparentMethodsMustNotHandleProcessCorruptingExceptions |
CheckId |
CA2139 |
Categoria |
Microsoft.Security |
Alteração Significativa |
Quebra |
Causa
Um método transparente é marcado com o atributo de HandleProcessCorruptedStateExceptionsAttribute .
Descrição da Regra
Esta regra é disparada qualquer método que é transparente e tenta controlar um processo que compromete a exceção usando o atributo de HandleProcessCorruptedStateExceptionsAttribute .Um processo que compromete a exceção é uma classificação da exceção de versão 4,0 do CLR de exceções por AccessViolationException.O atributo de HandleProcessCorruptedStateExceptionsAttribute pode ser usado apenas por métodos importantes de segurança, e será ignorado se for aplicado a um método transparente.Para controlar o processo que compromete exceções, esse método deve se tornar crítico segurança ou segurança seguro- crítico.
Como Corrigir Violações
Para corrigir uma violação desta regra, remova o atributo de HandleProcessCorruptedStateExceptionsAttribute , ou marcar o método com SecurityCriticalAttribute ou atributo de SecuritySafeCriticalAttribute .
Quando Suprimir Alertas
Não elimine um alerta desta regra.
Exemplo
Neste exemplo, um método transparente é marcado com o atributo de HandleProcessCorruptedStateExceptionsAttribute e falhará a regra.O método também deve ser marcado com SecurityCriticalAttribute ou atributo de SecuritySafeCriticalAttribute .
using System;
using System.Runtime.InteropServices;
using System.Runtime.ExceptionServices;
using System.Security;
namespace TransparencyWarningsDemo
{
public class HandleProcessCorruptedStateExceptionClass
{
[DllImport("SomeModule.dll")]
private static extern void NativeCode();
// CA2139 violation - transparent method attempting to handle a process corrupting exception
[HandleProcessCorruptedStateExceptions]
public void HandleCorruptingExceptions()
{
try
{
NativeCode();
}
catch (AccessViolationException) { }
}
}
}