CA2139: Jawne metody mogą nie używać atrybutu HandleProcessCorruptingExceptions
TypeName |
TransparentMethodsMustNotHandleProcessCorruptingExceptions |
CheckId |
CA2139 |
Kategoria |
Microsoft.Security |
Zmiana kluczowa |
Kluczowa |
Przyczyna
Przezroczysta metoda jest oznaczona atrybutem HandleProcessCorruptedStateExceptionsAttribute.
Opis reguły
Ta reguła jest wywoływana przez każdą metodę, która jest przejrzysta i próbuje obsłużyć wyjątek uszkodzenia procesu przy użyciu atrybutu HandleProcessCorruptedStateExceptionsAttribute.Wyjątek uszkodzenia procesu jest klasyfikacją wyjątku CLR w wersji 4.0 wyjątków takich jak AccessViolationException.Atrybut HandleProcessCorruptedStateExceptionsAttribute może być używany tylko przez krytyczne pod względem bezpieczeństwa metody i będzie ignorowany jeśli zostanie zastosowany do metody przezroczystej.W celu obsługi wyjątków uszkodzenia procesu, metoda ta musi stać się metodą krytyczną pod względem zabezpieczeń lub krytyczną pod względem bezpieczeństwa zabezpieczeń.
Jak naprawić naruszenia
W celu naprawienia naruszenia tej zasady, należy usunąć atrybut HandleProcessCorruptedStateExceptionsAttribute lub oznaczyć metodę atrybutem SecurityCriticalAttribute lub SecuritySafeCriticalAttribute.
Kiedy pominąć ostrzeżenia
Nie należy pomijać ostrzeżenia dotyczącego tej reguły.
Przykład
W tym przykładzie metoda przezroczysta jest oznaczona atrybutem HandleProcessCorruptedStateExceptionsAttribute i nie spełni reguły.Metoda powinna również być oznaczona atrybutem SecurityCriticalAttribute lub 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) { }
}
}
}