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