DynamicMethod.IsSecurityCritical Propriedade

Definição

Obtém um valor que indica se o método dinâmico atual é crítico à segurança ou à segurança crítico e, portanto, pode executar operações críticas.

public:
 virtual property bool IsSecurityCritical { bool get(); };
public override bool IsSecurityCritical { get; }
member this.IsSecurityCritical : bool
Public Overrides ReadOnly Property IsSecurityCritical As Boolean

Valor da propriedade

true se o método dinâmico atual for crítico à segurança ou à segurança-crítico; false se for transparente.

Exceções

O método dinâmico não tem um corpo de método.

Comentários

As propriedades IsSecurityCritical, IsSecuritySafeCritical e IsSecurityTransparent relatam o nível de transparência do método dinâmico, como determinado pelo CLR (Common Language Runtime). As combinações dessas propriedades são mostradas na tabela a seguir:

Nível de segurança IsSegurancaCritica IsSecuritySafeCritical IsSecurityTransparent
Crítico true false false
Crítico seguro true true false
Transparent false false true

Usar essas propriedades é muito mais simples do que examinar as anotações de segurança de um assembly e seus tipos, verificar o nível de confiança atual e tentar duplicar as regras do runtime.

A transparência de um método dinâmico depende do módulo ao qual ele está associado. Se o método dinâmico estiver associado a um tipo em vez de um módulo, sua transparência dependerá do módulo que contém o tipo. Os métodos dinâmicos não têm anotações de segurança, portanto, recebem a transparência padrão para o módulo associado.

  • Métodos dinâmicos hospedados anonimamente são sempre transparentes, pois o módulo fornecido pelo sistema que os contém é transparente.

  • A transparência de um método dinâmico associado a um assembly confiável (ou seja, um assembly de nome forte instalado no cache de assembly global) é descrita na tabela a seguir.

    Anotação de Assembly Transparência de nível 1 Transparência de nível 2
    Totalmente transparente Transparent Transparent
    Totalmente crítico Crítico Crítico
    Transparência mista Transparent Transparent
    Independente de segurança Crítico para segurança Crítico

    Por exemplo, se você associar um método dinâmico a um tipo que está em mscorlib.dll, que tem transparência mista de nível 2, o método dinâmico é transparente e não pode executar código crítico. Para obter informações sobre níveis de transparência, consulte Security-Transparent Code, Level 1 e Security-Transparent Code, Level 2.

    Note

    Associar um método dinâmico a um módulo em um assembly de nível 1 confiável que seja independente de segurança, como System.dll, não permite elevação de confiança. Se o conjunto de concessões do código que chama o método dinâmico não incluir o conjunto de concessões de System.dll (ou seja, confiança total), SecurityException será gerado quando o método dinâmico for chamado.

  • A transparência de um método dinâmico associado a um assembly parcialmente confiável depende de como o assembly é carregado. Se o assembly for carregado com confiança parcial (por exemplo, em um domínio de aplicativo em área restrita), o runtime ignorará as anotações de segurança do assembly. O assembly e todos os seus tipos e membros, incluindo métodos dinâmicos, são tratados como transparentes. O runtime prestará atenção às anotações de segurança somente se o assembly de confiança parcial for carregado com confiança total (por exemplo, no domínio de aplicativo padrão de um aplicativo da área de trabalho). Nesse caso, o runtime atribui ao método dinâmico a transparência padrão para métodos de acordo com as anotações do assembly.

Para obter mais informações sobre reflection emit e transparência, consulte Problemas de segurança na reflection emit. Para obter informações sobre transparência, consulte Alterações de segurança.

Aplica-se a

Confira também