다음을 통해 공유


CA2145: 투명한 메서드는 SuppressUnmanagedCodeSecurityAttribute로 데코레이팅해서는 안 됩니다.

TypeName

TransparentMethodsShouldNotUseSuppressUnmanagedCodeSecurity

CheckId

CA2145

범주

Microsoft.Security

변경 수준

주요 변경

원인

SecuritySafeCriticalAttribute 메서드로 표시된 또는 SuppressUnmanagedCodeSecurityAttribute 특성으로 표시된 메서드가 들어 있는 형식인 투명 메서드입니다.

규칙 설명

SuppressUnmanagedCodeSecurityAttribute 특성으로 데코레이팅된 메서드에 이를 호출하는 메서드에 대한 암시적 LinkDemand가 배치되어 있습니다. 이 LinkDemand는 호출 코드가 보안을 중요시 하도록 요구합니다. SecurityCriticalAttribute 특성이 있는 SuppressUnmanagedCodeSecurity를 사용하는 메서드를 표시하면 이 요구 사항을 메서드 호출자에 대해 더욱 명확하게 만들어줍니다.

위반 문제를 해결하는 방법

이 규칙 위반 문제를 해결하려면 메서드 또는 형식을 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);
    }
}