次の方法で共有


CA2145: 透過的メソッドを SuppressUnmanagedCodeSecurityAttribute で修飾してはならない

TypeName

TransparentMethodsShouldNotUseSuppressUnmanagedCodeSecurity

CheckId

CA2145

[カテゴリ]

Microsoft.Security

互換性に影響する変更点

あり

原因

透過的メソッド、SecuritySafeCriticalAttribute 属性が設定されたメソッド、またはメソッドを含む型に SuppressUnmanagedCodeSecurityAttribute 属性が設定されています。

規則の説明

SuppressUnmanagedCodeSecurityAttribute 属性で修飾されたメソッドには、それを呼び出すメソッドに対して適用される暗黙的な LinkDemand があります。この LinkDemand では、呼び出し元のコードがセキュリティ クリティカルなコードである必要があります。SuppressUnmanagedCodeSecurity を使用するメソッドに SecurityCriticalAttribute 属性を設定すると、メソッドの呼び出し元に対してこの要件がより明確になります。

違反の修正方法

この規則違反を修正するには、メソッドまたは型に対して SecurityCriticalAttribute 属性を設定します。

警告を抑制する状況

この規則による警告は抑制しないでください。

Dd997570.collapse_all(ja-jp,VS.110).gifコード

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