CA2149: прозрачные методы не следует вызывать в машинном коде
TypeName |
TransparentMethodsMustNotCallNativeCode |
CheckId |
CA2149 |
Категория |
Microsoft.Security |
Критическое изменение |
Критическое изменение |
Причина
Метод вызывает собственную функцию через прототип метода, например P/Invoke.
Описание правила
Это правило срабатывает для любого прозрачного метода, который вызывается непосредственно в машинном коде, например, с помощью вызова P/Invoke.Нарушения этого правила могут вызвать исключение MethodAccessException на модели прозрачности 2 уровня и применение полных требований для UnmanagedCode в модели прозрачности 1 уровня.
Устранение нарушений
Чтобы устранить нарушение данного правила, отметьте метод, вызывающий машинный код, атрибутом 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);
}
}
}