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