如何:请求访问非托管代码的权限
更新: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 并且不允许该代码执行。但是,如果代码一旦获得该权限,则允许该代码执行。
请参见
概念
参考
SecurityPermissionFlag.UnmanagedCode