CA2149: Métodos transparentes não devem chamar código nativo
TypeName |
TransparentMethodsMustNotCallNativeCode |
CheckId |
CA2149 |
<strong>Categoria</strong> |
Microsoft.Security |
Alteração significativa |
Quebrando |
Causa
Um método chama uma função nativa por meio de um stub do método como, por exemplo, P/Invoke.
Descrição da regra
Essa regra é acionado em qualquer método transparente que chama diretamente no código nativo, por exemplo, por meio de um P/Invoke. Violações desta regra levam a uma MethodAccessException o modelo de transparência de nível 2, e uma solicitação total de UnmanagedCode no modelo de transparência de nível 1.
Como corrigir violações
Para corrigir uma violação desta regra, marcar o método que chama o código nativo com o SecurityCriticalAttribute ou SecuritySafeCriticalAttribute atributo.
Quando suprimir avisos
Não suprimir um aviso da regra.
Exemplo
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);
}
}
}