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