CA2139: Métodos transparentes não podem usar o atributo HandleProcessCorruptingExceptions
TypeName |
TransparentMethodsMustNotHandleProcessCorruptingExceptions |
CheckId |
CA2139 |
<strong>Categoria</strong> |
Microsoft.Security |
Alteração significativa |
Quebrando |
Causa
Um método transparente é marcado com o HandleProcessCorruptedStateExceptionsAttribute atributo.
Descrição da regra
Essa regra é acionado a qualquer método que é transparente e tenta lidar com um processo corrompendo exceção usando o HandleProcessCorruptedStateExceptionsAttribute atributo.Um processo corrompendo a exceção é uma classificação de exceção do CLR versão 4.0 de tais exceções AccessViolationException.O atributo HandleProcessCorruptedStateExceptionsAttribute pode ser usado somente por métodos de segurança crítica e será ignorado se for aplicado a um método transparente.Para lidar com exceções de corrupção de processos, este método deverá se tornar crítico de segurança ou segurança safe crítica.
Como corrigir violações
Para corrigir uma violação desta regra, remova o HandleProcessCorruptedStateExceptionsAttribute de atributo ou marca o método com o SecurityCriticalAttribute ou o SecuritySafeCriticalAttribute atributo.
Quando suprimir avisos
Não suprimir um aviso da regra.
Exemplo
Neste exemplo, um método transparente é marcado com o HandleProcessCorruptedStateExceptionsAttribute de atributo e falhará a regra.O método também deve ser marcado com o SecurityCriticalAttribute ou o SecuritySafeCriticalAttribute atributo.
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) { }
}
}
}