Cómo: Solicitar permiso para obtener acceso a código no administrado

Actualización: noviembre 2007

Los permisos se pueden solicitar fácilmente mediante la aplicación de atributos que representan los permisos que se desean solicitar en el nivel de ensamblado del código. Los atributos que se pueden utilizar varían dependiendo de los permisos que se soliciten. El motor en tiempo de ejecución compila las solicitudes en los metadatos del manifiesto del ensamblado de la aplicación y las evalúa cuando el código se carga en la memoria durante la ejecución.

En el ejemplo siguiente se muestra cómo solicitar permiso para obtener acceso a código no administrado. Observe que se utiliza SecurityPermissionAttribute y se especifican dos valores: un valor SecurityAction que especifica la clase de solicitud de permiso que se está realizando (RequestMinimum, en este caso) y un marcador que muestra qué permiso se está solicitando. En este caso, SecurityPermissionFlag.UnmanagedCode especifica una solicitud de permiso para código no administrado. La sintaxis assembly: indica al compilador que el atributo se aplica en el nivel de ensamblado.

Ejemplo

Imports System
Imports System.Security.Permissions
Imports System.Runtime.InteropServices
'The request is placed at the assembly level.
<assembly: SecurityPermissionAttribute(SecurityAction.RequestMinimum, Flags := SecurityPermissionFlag.UnmanagedCode)>

Namespace MyNamespace
   Public Class MyClass1
      Public Sub New()

      End Sub
       
      Public Sub MyMethod()
         'Perform interoperation with unmanaged code here.
      End Sub 
   End Class
End Namespace
//The request is placed at the assembly level.
using System.Security.Permissions;
[assembly:SecurityPermissionAttribute(SecurityAction.RequestMinimum, Flags = SecurityPermissionFlag.UnmanagedCode)]

namespace MyNamespace {
   using System;
   using System.Runtime.InteropServices;
   
   public class MyClass {
      public MyClass() {

      }
      public void MyMethod() {
        //Perform interoperation with unmanaged code here.
      }
   }
}

Si el código anterior no recibe un permiso SecurityPermission con el marcador UnmanagedCode, el motor en tiempo de ejecución produce una excepción PolicyException y el código no se ejecuta. No obstante, si el código recibe ese permiso, entonces puede ejecutarse.

Vea también

Conceptos

Solicitar permisos

Referencia

SecurityPermissionAttribute

SecurityAction

SecurityPermissionFlag.UnmanagedCode

Otros recursos

Extender metadatos mediante atributos

Seguridad de acceso a código

Metadatos y componentes autodescriptivos