CA2149:透明方法不得调入本机代码

类型名

TransparentMethodsMustNotCallNativeCode

CheckId

CA2149

类别

Microsoft.Security

是否重大更改

原因

通过方法存根(如 P/Invoke)调用本机函数的方法。

规则说明

对于直接调用到本机代码中(例如通过使用 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);
        }
    }

}