次の方法で共有


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

}