Udostępnij za pośrednictwem


CA2145: Jawne metody nie powinny być dekorowane za pomocą SuppressUnmanagedCodeSecurityAttribute

Pozycja Wartość
Ruleid CA2145
Kategoria Microsoft.Security
Zmiana powodująca niezgodność Kluczowa

Przyczyna

Przezroczysta metoda, metoda oznaczona atrybutem SecuritySafeCriticalAttribute lub typ zawierający metodę, jest oznaczona atrybutem SuppressUnmanagedCodeSecurityAttribute .

Uwaga

Ta reguła została przestarzała. Aby uzyskać więcej informacji, zobacz Przestarzałe reguły.

Opis reguły

Metody ozdobione atrybutem SuppressUnmanagedCodeSecurityAttribute mają niejawny element LinkDemand umieszczony na dowolnej metodzie, która ją wywołuje. Ten element LinkDemand wymaga, aby kod wywołujący był krytyczny dla bezpieczeństwa. Oznaczanie metody używającej polecenia SuppressUnmanagedCodeSecurity z atrybutem SecurityCriticalAttribute sprawia, że to wymaganie jest bardziej oczywiste dla wywołań metody .

Jak naprawić naruszenia

Aby naprawić naruszenie tej reguły, oznacz metodę lub typ za pomocą atrybutu SecurityCriticalAttribute .

Kiedy pomijać ostrzeżenia

Nie pomijaj ostrzeżeń dla tej reguły.

Kod

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