CA2139: 透過的メソッドは、HandleProcessCorruptingExceptions 属性を使用してはならない
TypeName |
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) { }
}
}
}