CS.SV.TRANSP.HPCE

透過的なメソッドは HandleProcessCorruptingExceptions 属性を使用しない場合があります。

この規則は、透過的なメソッドを発動し、HandleProcessCorruptedStateExceptionsAttribute 属性を使用することで、プロセス破損例外を処理するように試みます。プロセス破損例外は、AccessViolationException などの例外の CLR バージョン 4.0 例外分類です。HandleProcessCorruptedStateExceptionsAttribute 属性は、セキュリティクリティカルなメソッドによってのみ使用される場合があり、透過的なメソッドに適用される場合は無視されます。プロセス破損例外を処理するには、このメソッドはセキュリティクリティカルまたはセキュリティセーフクリティカルになる必要があります。

脆弱コード例

コピー
  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) { }
         }
     }
 
 }

この例では、透過的なメソッドは HandleProcessCorruptedStateExceptionsAttribute 属性でマークされており、規則に違反します。このメソッドは、SecurityCriticalAttribute または SecuritySafeCriticalAttribute 属性でマークする必要もあります。