Поделиться через


CA2139: прозрачные методы могут не использовать атрибут HandleProcessCorruptingExceptions

Товар Значение
Идентификатор правила CA2139
Категория Microsoft.Security
Критическое изменение Критическое

Причина

Прозрачный метод помечается атрибутом HandleProcessCorruptedStateExceptionsAttribute .

Примечание.

Это правило устарело. Дополнительные сведения см. в разделе "Устаревшие правила".

Описание правила

Это правило запускает любой метод, который является прозрачным и пытается обработать повреждение процесса с помощью атрибута HandleProcessCorruptedStateExceptionsAttribute . Исключение, поврежденное процессом, — это классификация исключений среды CLR версии 4.0 для таких AccessViolationExceptionисключений. Атрибут HandleProcessCorruptedStateExceptionsAttribute может использоваться только критичными в плане безопасности методами и будет игнорироваться при применении для прозрачного метода. Для обработки поврежденных исключений этот метод должен стать критически важным для безопасности или безопасной безопасности.

Устранение нарушений

Чтобы устранить нарушение этого правила, удалите HandleProcessCorruptedStateExceptionsAttribute атрибут или пометьте метод с SecurityCriticalAttribute помощью атрибута или атрибута SecuritySafeCriticalAttribute .

Когда лучше отключить предупреждения

Для этого правила отключать вывод предупреждений не следует.

Пример

В этом примере прозрачный метод помечается атрибутом HandleProcessCorruptedStateExceptionsAttribute и завершится сбоем правила. Метод также должен быть помечен атрибутом SecurityCriticalAttribute или атрибутом 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) { }
        }
    }

}