CA2145: 透過的メソッドを SuppressUnmanagedCodeSecurityAttribute で修飾してはならない
TypeName |
TransparentMethodsShouldNotUseSuppressUnmanagedCodeSecurity |
CheckId |
CA2145 |
カテゴリ |
Microsoft.Security |
互換性に影響する変更点 |
あり |
原因
透過的メソッド、SecuritySafeCriticalAttribute 属性が設定されたメソッド、またはメソッドを含む型に SuppressUnmanagedCodeSecurityAttribute 属性が設定されています。
規則の説明
SuppressUnmanagedCodeSecurityAttribute 属性で修飾されたメソッドには、それを呼び出すメソッドに対して適用される暗黙的な LinkDemand があります。 この LinkDemand では、呼び出し元のコードがセキュリティ クリティカルなコードである必要があります。 SuppressUnmanagedCodeSecurity を使用するメソッドに SecurityCriticalAttribute 属性を設定すると、メソッドの呼び出し元に対してこの要件がより明確になります。
違反の修正方法
この規則違反を修正するには、メソッドまたは型に対して SecurityCriticalAttribute 属性を設定します。
警告を抑制する状況
この規則による警告は抑制しないでください。
コード
using System;
using System.Runtime.InteropServices;
using System.Security;
namespace TransparencyWarningsDemo
{
public class SafeNativeMethods
{
// CA2145 violation - transparent method marked SuppressUnmanagedCodeSecurity. This should be fixed by
// marking this method SecurityCritical.
[DllImport("kernel32.dll", SetLastError = true)]
[SuppressUnmanagedCodeSecurity]
[return: MarshalAs(UnmanagedType.Bool)]
internal static extern bool Beep(uint dwFreq, uint dwDuration);
}
}