CA2139 : Les méthodes transparentes ne peuvent pas utiliser l'attribut HandleProcessCorruptingExceptions

Élément Valeur
ID de la règle CA2139
Category Microsoft.Security
Modification avec rupture Rupture

Cause

Une méthode transparente est marquée avec l’attribut HandleProcessCorruptedStateExceptionsAttribute.

Notes

Cette règle est déconseillée. Pour plus d’informations, consultez Règles dépréciées.

Description de la règle

Cette règle déclenche toute méthode transparente qui essaie de gérer une exception qui endommage un processus à l’aide de l’attribut HandleProcessCorruptedStateExceptionsAttribute. Une exception qui endommage un processus est une classification d’exception CLR version 4.0 des exceptions comme AccessViolationException. L’attribut HandleProcessCorruptedStateExceptionsAttribute peut uniquement être utilisé par des méthodes critiques de sécurité et sera ignoré s’il s’applique à une méthode transparente. Pour gérer les exceptions d’altération des processus, cette méthode doit devenir essentielle pour la sécurité ou critique pour la sécurité.

Comment corriger les violations

Pour corriger une violation de cette règle, supprimez l’attribut HandleProcessCorruptedStateExceptionsAttribute ou marquez la méthode avec l’attribut SecurityCriticalAttribute ou SecuritySafeCriticalAttribute.

Quand supprimer les avertissements

Ne supprimez aucun avertissement de cette règle.

Exemple

Dans cet exemple, une méthode transparente est marquée avec l’attribut HandleProcessCorruptedStateExceptionsAttribute et échoue à la règle. La méthode doit également être marquée avec l’attribut SecurityCriticalAttribute ou 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) { }
        }
    }

}