CA2149: 투명한 메서드는 네이티브 코드를 호출해서는 안 됩니다.
TypeName |
TransparentMethodsMustNotCallNativeCode |
CheckId |
CA2149 |
범주 |
Microsoft.Security |
변경 수준 |
주요 변경 |
원인
메서드는 P/Invoke 같은 메서드 스텁을 통해 네이티브 함수를 호출합니다.
규칙 설명
이 규칙은 P/Invoke를 통해 네이티브 코드를 직접 호출하는 모든 투명 메서드에 적용됩니다.이 규칙 위반으로 인해 수준 2 투명성 모델에서 MethodAccessException이 발생하고 수준 1 투명성 모델에서 UnmanagedCode에 대한 완전 요청이 발생합니다.
위반 문제를 해결하는 방법
이 규칙의 위반 문제를 해결하려면 SecurityCriticalAttribute 또는 SecuritySafeCriticalAttribute 특성으로 네이티브 코드를 호출하는 메서드를 표시하십시오.
경고를 표시하지 않는 경우
이 규칙에서는 경고를 표시해야 합니다.
예제
using System;
using System.Runtime.InteropServices;
namespace TransparencyWarningsDemo
{
public class CallNativeCodeClass
{
[DllImport("kernel32.dll", SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool Beep(uint dwFreq, uint dwDuration);
public void CallNativeMethod()
{
// CA2149 violation - transparent method calling native code
Beep(10000, 1);
}
}
}