다음을 통해 공유


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

}