CA2139: Transparente Methoden dürfen das HandleProcessCorruptingExceptions-Attribut nicht verwenden

TypeName

TransparentMethodsMustNotHandleProcessCorruptingExceptions

CheckId

CA2139

Kategorie (Category)

Microsoft.Security

Unterbrechende Änderung

Breaking

Ursache

Eine transparente Methode wird mit dem HandleProcessCorruptedStateExceptionsAttribute-Attribut markiert:

Regelbeschreibung

Diese Regel löst jede Methode aus, die transparent ist und versucht, eine Prozesse beschädigende Ausnahme mit dem HandleProcessCorruptedStateExceptionsAttribute-Attribut zu behandeln.Eine Ausnahme, die einen Prozess beschädigt, entspricht einer Ausnahme der CLR Version 4.0-Ausnahmeklassifizierung, wie AccessViolationException.Das HandleProcessCorruptedStateExceptionsAttribute-Attribut darf nur von sicherheitskritischen Methoden verwendet werden und wird ignoriert, wenn es für eine transparente Methode übernommen wird.Diese Methode muss sicherheitskritisch oder sicherheitsgeschützt sein, um Prozesse beschädigende Ausnahmen behandeln zu können.

Behandeln von Verstößen

Um eine Verletzung dieser Regel zu korrigieren, entfernen Sie das HandleProcessCorruptedStateExceptionsAttribute-Attribut, oder markieren Sie die Methode mit dem SecurityCriticalAttribute-Attribut oder dem SecuritySafeCriticalAttribute-Attribut.

Wann sollten Warnungen unterdrückt werden?

Unterdrücken Sie keine Warnung dieser Regel.

Beispiel

In diesem Beispiel wird eine transparente Methode mit dem HandleProcessCorruptedStateExceptionsAttribute-Attribut markiert, und die Regel schlägt fehlt.Die Methode sollte ebenfalls mit dem SecurityCriticalAttribute-Attribut oder dem SecuritySafeCriticalAttribute-Attribut markiert werden.

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

}