CA2145: прозрачные методы не должны быть снабжены атрибутом SuppressUnmanagedCodeSecurityAttribute

Товар Значение
Идентификатор правила CA2145
Категория Microsoft.Security
Критическое изменение Критическое

Причина

Прозрачный метод, метод, помеченный атрибутом или тип, содержащий метод, помечается SecuritySafeCriticalAttribute атрибутом SuppressUnmanagedCodeSecurityAttribute .

Примечание.

Это правило устарело. Дополнительные сведения см. в разделе "Устаревшие правила".

Описание правила

Методы, SuppressUnmanagedCodeSecurityAttribute украшенные атрибутом, имеют неявный LinkDemand, помещенный на любой метод, который вызывает его. Для этой проверки LinkDemand требуется, чтобы вызывающий код был критическим с точки зрения безопасности. Маркировка метода, использующего SuppressUnmanagedCodeSecurity с атрибутом SecurityCriticalAttribute , делает это требование более очевидным для вызывающих методов.

Устранение нарушений

Чтобы устранить нарушение этого правила, пометьте метод или тип атрибутом SecurityCriticalAttribute .

Когда лучше отключить предупреждения

Для этого правила отключать вывод предупреждений не следует.

Код

using System;
using System.Runtime.InteropServices;
using System.Security;

namespace TransparencyWarningsDemo
{

    public class SafeNativeMethods
    {
        // CA2145 violation - transparent method marked SuppressUnmanagedCodeSecurity.  This should be fixed by
        // marking this method SecurityCritical.
        [DllImport("kernel32.dll", SetLastError = true)]
        [SuppressUnmanagedCodeSecurity]
        [return: MarshalAs(UnmanagedType.Bool)]
        internal static extern bool Beep(uint dwFreq, uint dwDuration);
    }
}