CA2149:透明方法不得调入本机代码
类型名 |
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);
}
}
}