Freigeben über


CA2149: Transparente Methoden dürfen keine Aufrufe in systemeigenen Code durchführen

TypeName

TransparentMethodsMustNotCallNativeCode

CheckId

CA2149

Kategorie

Microsoft.Security

Unterbrechende Änderung

Breaking

Ursache

Eine Methode ruft durch einen Methodenstub, z. B. P/Invoke, eine systemeigene Funktion auf.

Regelbeschreibung

Diese Regel wird für jede transparente Methode ausgelöst, die einen direkten Aufruf in systemeigenem Code ausführt, z. B. mit P/Invoke. Verstöße gegen diese Regel führen im Sicherheitstransparenzmodell der Ebene 2 zu einer MethodAccessException und einer vollständige Anforderung für UnmanagedCode im Transparenzmodell der Ebene 1.

Behandeln von Verstößen

Um eine Verletzung dieser Regel zu korrigieren, markieren Sie die Methode, mit der der systemeigene Code aufgerufen wird, mit dem SecurityCriticalAttribute-Attribut oder dem SecuritySafeCriticalAttribute-Attribut.

Wann sollten Warnungen unterdrückt werden?

Unterdrücken Sie keine Warnung dieser Regel.

Beispiel

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

}