CA2139:透明方法不能使用 HandleProcessCorruptingExceptions 特性

类型名

TransparentMethodsMustNotHandleProcessCorruptingExceptions

CheckId

CA2139

类别

Microsoft.Security

是否重大更改

原因

透明方法用 HandleProcessCorruptedStateExceptionsAttribute 特性标记。

规则说明

此规则触发任何透明方法,并尝试通过使用 HandleProcessCorruptedStateExceptionsAttribute 特性处理过程破坏异常。 进程损坏异常属于异常的 CLR 版本 4.0 异常分类,如 AccessViolationException。 HandleProcessCorruptedStateExceptionsAttribute 特性只由安全关键方法使用,并且如果应用于透明的方法,则将被忽略。 若要处理过程损坏异常,此方法必须成为关键安全类型或成员或安全可靠关键的。

如何解决冲突

要解决此规则的冲突,删除 HandleProcessCorruptedStateExceptionsAttribute 特性,或使用 SecurityCriticalAttributeSecuritySafeCriticalAttribute 特性标记方法。

何时禁止显示警告

不要禁止显示此规则发出的警告。

示例

在此示例中,透明方法将标记为 HandleProcessCorruptedStateExceptionsAttribute 特性并将违反规则。 方法也应该由 SecurityCriticalAttributeSecuritySafeCriticalAttribute 特性标记。

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

}