次の方法で共有


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

}