CA2149: прозрачные методы не следует вызывать в машинном коде
Товар | Значение |
---|---|
Идентификатор правила | 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);
}
}
}
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по