Compartilhar via


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) { }
        }
    }

}