Substituindo verificações de segurança

Normalmente, a verificação de segurança examina os chamadores da pilha de chamadas para garantir que cada um deles tenha recebido a permissão especificada. No entanto, você pode substituir o resultado das verificações de segurança chamando Assert ou PermitOnly em um objeto de permissão individual ou um objeto do conjunto de permissões. Dependendo de quais desses métodos você chama, é possível fazer com que o controle de segurança tenha êxito ou falha, mesmo que as permissões de todos os chamadores na pilha não podem ter sido verificadas.

Importante

Em .NET Framework 4, o suporte do tempo de execução foi removido pela aplicação das solicitações de permissão de Deny e de RevertDeny.Essas solicitações não devem ser usadas no código que é baseado em .NET Framework 4 ou posterior.Para obter mais informações sobre isso e outras alterações, consulte Alterações na segurança do .NET Framework.

Cada vez que um método chama outro método, um novo quadro é gerado na pilha de chamadas para armazenar informações sobre o método que está sendo chamado. (Usar construtores e acessar propriedades são considerados chamadas de método nesse contexto.) Cada quadro de pilha inclui informações sobre todas as chamadas que o método faz para Assert ou PermitOnly. Se um chamador usa mais de um Assert ou PermitOnly na mesma chamada de método, o tempo de execução aplica as seguintes regras de processamento, que podem afetar o comportamento de substituição:

  • Se, durante o exame da pilha, o tempo de execução descobre mais do que uma substituição do mesmo tipo (ou seja, duas chamadas para Assert) em um quadro de pilha, a segunda substituição faz com que uma exceção seja lançada.

  • Quando as substituições diferentes estão presentes no mesmo quadro de pilha, o tempo de execução processa essas alternativas na seguinte ordem: PermitOnly e em seguida Assert.

Para trocar uma substituição, primeiro chame o método de reverter apropriado (por exemplo, RevertAssert) e depois aplique a nova substituição.

Dica

As substituições de pilha de exame 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.Como o estado da pilha de chamadas em um construtor de classe não é bem definido, as substituições de exame de pilha colocadas nos construtores podem produzir resultados inesperados e indesejados.

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

Dica

Se você executar uma substituição (Assert ou PermitOnly), você deve reverter a permissão antes de poder executar o mesmo tipo de substituição no mesmo quadro de pilha (isto é, o método).Caso contrário, um SecurityException é lançado.

Use um dos métodos estáticos 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 anteriores do quadro atual sejam removidas e não tenham mais efeitos.

CodeAccessPermission.RevertAssert

Faz com que qualquer Assert anterior do quadro atual seja removido e não tenha mais efeito.

CodeAccessPermission.RevertPermitOnly

Faz com que qualquer PermitOnly anterior do quadro atual seja removido e não tenha mais efeito.

Consulte também

Referência

Usando o método assert

Usando o método de PermitOnly

Conceitos

Gravando bibliotecas de classe seguras

Outros recursos

Segurança de acesso do código