Поделиться через


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

TypeName

TransparentMethodsShouldNotUseSuppressUnmanagedCodeSecurity

CheckId

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