Практическое руководство. Запрос разрешения на доступ к неуправляемому коду
Обновлен: Ноябрь 2007
Для запроса разрешений служат атрибуты, представляющие разрешения, которые необходимо запросить для кода на уровне сборки. Используемые атрибуты могут меняться в зависимости от запрашиваемых разрешений. Запросы компилируются в метаданныеманифеста сборки и оцениваются средой выполнения, когда код загружается в память при запуске.
Следующий пример демонстрирует способ запроса разрешения на доступ к неуправляемому коду. Обратите внимание, что в нем используется атрибут 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.
}
}
}
Если приведенный код не получит разрешение SecurityPermission с флагом UnmanagedCode, среда выполнения создаст исключение PolicyException и код не будет допущен к выполнению. Но если вышеприведенный код получит это разрешение, запуск его будет разрешен.
См. также
Основные понятия
Ссылки
SecurityPermissionFlag.UnmanagedCode