Share via


CA2139: I metodi Transparent non possono utilizzare l'attributo HandleProcessCorruptingExceptions

Articolo Valore
ID regola CA2139
Category Microsoft.Security
Modifica Interruzione

Causa

Un metodo trasparente è contrassegnato con l'attributo HandleProcessCorruptedStateExceptionsAttribute .

Nota

Questa regola è stata deprecata. Per altre informazioni, vedere Regole deprecate.

Descrizione regola

Questa regola attiva qualsiasi metodo trasparente e tenta di gestire un'eccezione di danneggiamento del processo usando l'attributo HandleProcessCorruptedStateExceptionsAttribute . Un'eccezione di danneggiamento del processo è una classificazione delle eccezioni CLR versione 4.0 di eccezioni, ad esempio AccessViolationException. L'attributo HandleProcessCorruptedStateExceptionsAttribute può essere usato solo dai metodi critici per la sicurezza e sarà ignorato se applicato a un metodo trasparente. Per gestire le eccezioni di danneggiamento del processo, questo metodo deve diventare critico per la sicurezza o critico per la sicurezza.

Come correggere le violazioni

Per correggere una violazione di questa regola, rimuovere l'attributo HandleProcessCorruptedStateExceptionsAttribute o contrassegnare il metodo con l'attributo SecurityCriticalAttributeSecuritySafeCriticalAttribute o .

Quando eliminare gli avvisi

Non escludere un avviso da questa regola.

Esempio

In questo esempio un metodo transparent è contrassegnato con l'attributo HandleProcessCorruptedStateExceptionsAttribute e avrà esito negativo. Il metodo deve anche essere contrassegnato con l'attributo SecurityCriticalAttributeSecuritySafeCriticalAttribute o .

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

}