CA2139:透明方法不能使用 HandleProcessCorruptingExceptions 特性
类型名 |
TransparentMethodsMustNotHandleProcessCorruptingExceptions |
CheckId |
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) { }
}
}
}