Substituindo verificações de segurança

Normalmente, uma verificação de segurança examina cada telefonar er no telefonar pilha para garantir que cada telefonar er tem a permissão especificada.No entanto, é possível substituir o resultado de verificações de segurança chamando Assert, Deny, ou PermitOnly em uma permissão individual ou uma permissão de objeto conjunto objeto. Dependendo em que esses métodos telefonar, você pode fazer com que a verificação de segurança bem-sucedida ou falhar, mesmo que as permissões de todos os telefonar ers na pilha talvez não tenham sido verificadas.

Um método cada vez telefonar s outro método, um novo quadro é gerado a telefonar pilha para armazenar informações sobre o método sendo telefonar ed.(Usar construtores e acessar propriedades são considerados método chama neste contexto.) Cada registro de ativação inclui informações sobre todas as chamadas que do método faz Declarar, Negar, or PermitOnly.Se um chamador usa mais de um Declarar, Negar, or PermitOnly na mesma telefonar de método, o tempo de execução aplica-se as seguintes regras de processamento, que podem afetar os comportamentos de substituir:

  • Se, durante o exame da pilha, o tempo de execução detecta mais de uma substituir do mesmo tipo (ou seja, duas chamadas para Declarar) no quadro de uma pilha, substituir segunda causa uma exceção seja lançada.

  • Quando substituições diferentes estão presentes no mesmo registro de ativação, o tempo de execução processa essas substituições na seguinte ordem: PermitOnly, then Negare, finalmente Declarar.

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

Observação:

Substituições de pilha 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 momento específico ou em qualquer contexto específico.Como o estado da pilha de chamadas em um construtor de classe não está bem definido, stack walk substituições colocadas em construtores podem produzir resultados inesperados e indesejados.

Os desenvolvedores de aplicativos não geralmente precisam usar Declarar, Negar, or PermitOnly e os desenvolvedores de bibliotecas de componentes e classe raramente precisam usá-los.No entanto, substituições de segurança são adequadas em algumas situações, o que são descritas no Declarar, Negar, and PermitOnly tópicos.

Observação:

Se você executar um (substituir Negar, Declarar, or PermitOnly), você deve reverter a permissão antes de executar o mesmo tipo de substituir no mesmo registro de ativação (ou seja, 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, no mesmo método.

Use um dos métodos estático listados na tabela a seguir para reverter uma substituir.

Método

Ação de método

CodeAccessPermission.RevertAll

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

CodeAccessPermission.RevertAssert

Faz com que qualquer anterior Declarar do quadro corrente a ser removido e não mais em vigor.

CodeAccessPermission.RevertDeny

Faz com que qualquer anterior Negar do quadro corrente a ser removido e não mais em vigor.

CodeAccessPermission.RevertPermitOnly

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

Consulte também

Conceitos

Escrevendo seguro classe bibliotecas

Referência

Usando o método Assert

Usando o método Deny

Usando o método PermitOnly

Outros recursos

Segurança de Acesso de código