如何:请求访问非托管代码的权限

更新:2007 年 11 月

通过将表示要请求的权限的属性应用到代码的程序集级别,可以很容易地请求权限。您使用的属性会因所请求的权限而异。当在执行过程中将代码加载到内存中时,请求会编译到应用程序的程序集清单元数据中,并由运行库来计算。

下面的示例说明如何请求权限来访问非托管代码。注意,它使用 SecurityPermissionAttribute 并指定两个值:一个指定所发出的权限请求类型的 SecurityAction 值(在此例中为 RequestMinimum)和一个指示所请求权限的标志。在此例中,SecurityPermissionFlag.UnmanagedCode 指定请求非托管代码权限。assembly: 语法通知编译器在程序集级别应用该属性。

示例

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.
      }
   }
}

如果上面的代码未接收到具有 UnmanagedCode 标志的 SecurityPermission,则运行库将引发一个 PolicyException 并且不允许该代码执行。但是,如果代码一旦获得该权限,则允许该代码执行。

请参见

概念

请求权限

参考

SecurityPermissionAttribute

SecurityAction

SecurityPermissionFlag.UnmanagedCode

其他资源

利用属性扩展元数据

代码访问安全性

元数据和自描述组件