共用方式為


CA2149:透明方法不可以呼叫機器碼

型別名稱

TransparentMethodsMustNotCallNativeCode

CheckId

CA2149

分類

Microsoft.Security

中斷變更

中斷

原因

方法會呼叫 P/Invoke 之類的方法 Stub 呼叫原生函式。

規則描述

任何直接呼叫機器碼的透明方法都會引發此規則,例如透過 P/Invoke。違反這個規則會在層級 2安全性透明模型中導致 MethodAccessException,並且在層級 1 透明模型中導致對 UnmanagedCode 的完整需求。

如何修正違規

若要修正此規則的違規情形,請在呼叫機器碼的方法標記 SecurityCriticalAttributeSecuritySafeCriticalAttribute 屬性。

隱藏警告的時機

請勿隱藏此規則的警告。

範例

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

}