Este artículo se tradujo automáticamente. Para ver el artículo en inglés, active la casilla Inglés. Además, puede mostrar el texto en inglés en una ventana emergente si mueve el puntero del mouse sobre el texto.
Traducción
Inglés

Invalidar comprobaciones de seguridad

Normalmente, una comprobación de seguridad examina todos los llamadores de la pila de llamadas para garantizar que a cada llamador se le ha concedido el permiso especificado. Sin embargo, se puede invalidar el resultado de las comprobaciones de seguridad mediante una llamada a Assert o PermitOnly en un objeto de permiso concreto o en un objeto de conjunto de permisos. En función del método al que se llame, se puede hacer que la comprobación de seguridad se realice correctamente o no, aunque los permisos de todos los llamadores de la pila no hayan sido comprobados.

Nota importante Importante

En .NET Framework 4, se ha quitado la compatibilidad con el runtime para exigir las solicitudes de permisos Deny y RevertDeny. Estas solicitudes no deben usarse en código basado en .NET Framework 4 o versiones posteriores. Para obtener más información sobre estos y otros cambios, vea Cambios de seguridad en .NET Framework.

Cada vez que un método llama a otro método, se genera un nuevo marco en la pila de llamadas para almacenar información sobre el método al que se llama. (En este contexto, el uso de constructores y el acceso a propiedades se consideran llamadas a métodos). Cada marco de pila incluye información sobre todas las llamadas que el método realiza a Assert o PermitOnly. Si un llamador usa más de una vez Assert o PermitOnly en la misma llamada a método, el motor en tiempo de ejecución aplica las siguientes reglas de procesamiento, que pueden afectar a los comportamientos del reemplazo:

  • Si, durante el recorrido de pila, el motor en tiempo de ejecución detecta más de un reemplazo del mismo tipo (es decir, dos llamadas a Assert) en un mismo marco de pila, el segundo reemplazo hace que se produzca una excepción.

  • Cuando hay distintos reemplazos en el mismo marco de pila, el motor en tiempo de ejecución los procesa en el orden siguiente: primero PermitOnly y, después, Assert.

Para reemplazar una invalidación, llame primero al método de reversión correspondiente (por ejemplo, RevertAssert) y, después, aplique la nueva invalidación.

Nota Nota

Los reemplazos de recorrido de pila nunca deben realizarse en constructores de clases, porque no se puede garantizar que el código de los constructores de clases se vaya a ejecutar en un punto determinado o en un contexto determinado. Dado que el estado de la pila de llamadas de los constructores de clases no está bien definido, los reemplazos de recorrido de pila colocados en los constructores pueden generar resultados inesperados y no deseados.

Normalmente, los programadores de aplicaciones no necesitan usar Assert o PermitOnly y los programadores de componentes y bibliotecas de clases en raras ocasiones. No obstante, los reemplazos de seguridad son adecuados en algunas situaciones, que se describen en los temas Assert y PermitOnly.

Nota Nota

Si realiza un reemplazo (AssertPermitOnly), debe revertir el permiso antes de realizar la misma clase de reemplazo en el mismo marco de pila (es decir, en el método). De lo contrario, se inicia una excepción SecurityException.

Utilice uno de los métodos estáticos que se enumeran en la tabla siguiente para revertir un reemplazo.

Método

Acción del método

CodeAccessPermission.RevertAll

Hace que se quiten todos los reemplazos anteriores del marco actual y que ya no estén activos.

CodeAccessPermission.RevertAssert

Hace que se quite cualquier Assert anterior del marco actual y que ya no esté activo.

CodeAccessPermission.RevertPermitOnly

Hace que se quite cualquier PermitOnly anterior del marco actual y que ya no esté activo.

Adiciones de comunidad

Mostrar: