CA2139 : Les méthodes transparentes ne peuvent pas utiliser l'attribut HandleProcessCorruptingExceptions
TypeName |
TransparentMethodsMustNotHandleProcessCorruptingExceptions |
CheckId |
CA2139 |
Catégorie |
Microsoft.Security |
Modification avec rupture |
Oui |
Cause
Une méthode transparente est marquée avec l'attribut HandleProcessCorruptedStateExceptionsAttribute.
Description de la règle
Cette règle déclenche toute méthode transparente et 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 tel 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 qui endommagent un processus, cette méthode doit devenir critique de sécurité (security-critical) ou critique sécurisée (security-safe-critical).
Comment corriger les violations
Pour résoudre 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 échouera 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) { }
}
}
}