次の方法で共有


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