Substituindo as verificações de segurança

Normalmente, uma verificação de segurança examina cada chamador na pilha de chamadas para garantir que cada chamador tenha sido concedido a permissão especificada. No entanto, você pode substituir o resultado de verificações de segurança chamando Assert, Deny, ou PermitOnly em uma permissão individual, objeto ou uma permissão a definir objeto. Dependendo de qual desses métodos que você chamar, você pode fazer com que a verificação de segurança para o êxito ou falha, mesmo que as permissões de todos os chamadores na pilha talvez não tenham sido verificadas.

Observação importanteImportante

No .NET Framework versão 4, o suporte de tempo de execução foi removido para impor a Deny e RevertDeny as solicitações de permissão.Essas solicitações não devem ser usadas no código que se baseia o .NET Framework 4 ou posterior.Para obter mais informações sobre esta e outras alterações, consulte Alterações de segurança na.NET Framework 4.

Sempre que um método chama outro método, um novo quadro é gerado na pilha de chamadas para armazenar informações sobre o método sendo chamado. (Usando construtores e acessar propriedades são considerados chamadas de método neste contexto.) Cada quadro de pilha inclui informações sobre as chamadas que faz o método Assert, Negar, ou PermitOnly. Se um chamador usa mais de um Assert, Negar, ou PermitOnly na mesma chamada de método, o runtime aplica-se as seguintes regras de processamento, o que podem afetar os comportamentos de substituição:

  • Se, durante a movimentação de pilha, o runtime detecta mais de uma substituição do mesmo tipo (ou seja, duas chamadas para Assert) no quadro de uma pilha, a segunda substituição faz com que uma exceção seja lançada.

  • Quando houver substituições diferentes no mesmo quadro de pilha, o runtime processa essas substituições na seguinte ordem: PermitOnly, em seguida, Negare, finalmente, Assert.

Para substituir uma substituição, a primeira chamada de método de reverter o apropriado (por exemplo, RevertAssert) e, em seguida, aplicar a nova substituição.

Observação

Substituições de stack walk nunca devem ser feitas em um construtor de classe, porque o código do construtor de classe não é garantido para executar em qualquer ponto específico ou em qualquer contexto específico.Porque o estado da pilha de chamadas em um construtor de classe não é bem definido, substituições de movimentação de pilha colocadas em construtores podem produzir resultados inesperados e indesejados.

Os desenvolvedores de aplicativos geralmente não precisa usar Assert, Negar, ou PermitOnly, e os desenvolvedores de bibliotecas de classe e de componente raramente precisarão usá-los. No entanto, as substituições de segurança são apropriadas em algumas situações, o que são descritas na Assert, Negar, e PermitOnly tópicos.

Observação

Se você executar uma substituição (Negar, Assert, ou PermitOnly), você deve reverter a permissão antes de executar o mesmo tipo de substituição no mesmo quadro de pilha (ou seja, o método).Caso contrário, um SecurityException é lançada.Por exemplo, se você negar uma permissão, P, deverá reverter essa permissão antes de você pode negar permissão outro, Q, o mesmo método.

Use um dos métodos estáticos são listados na tabela a seguir para reverter uma substituição.

Método

Ação de método

CodeAccessPermission.RevertAll

Faz com que todas as substituições de anteriores para o quadro atual a ser removido e não mais em vigor.

CodeAccessPermission.RevertAssert

Faz com que qualquer anterior Assert para o quadro atual a ser removido e não mais em vigor.

CodeAccessPermission.RevertDeny

Faz com que qualquer anterior Negar para o quadro atual a ser removido e não mais em vigor. Esse método é obsoleto o .NET Framework 4.

CodeAccessPermission.RevertPermitOnly

Faz com que qualquer anterior PermitOnly para o quadro atual a ser removido e não mais em vigor.

Consulte também

Referência

Usando o Assert método

usando o método de negar

usando o método PermitOnly

Conceitos

Segurança de Acesso de código

Criação de bibliotecas de classe seguro