CA2149:透明方法不可以呼叫機器碼
型別名稱 |
TransparentMethodsMustNotCallNativeCode |
CheckId |
CA2149 |
分類 |
Microsoft.Security |
中斷變更 |
中斷 |
原因
方法會呼叫 P/Invoke 之類的方法 Stub 呼叫原生函式。
規則描述
任何直接呼叫機器碼的透明方法都會引發此規則,例如透過 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);
}
}
}