Практическое руководство. Запрос разрешения на доступ к неуправляемому коду
Важно!
В версии .NET Framework 4 удалена поддержка среды выполнения для принудительного применения запросов разрешений RequestMinimum, RequestOptional и RequestRefuse.Информация данного раздела не относятся к коду, основанному на .NET Framework 4 или более поздних версиях.Дополнительные сведения об этом и других изменениях см. в разделе Изменения системы безопасности в платформе .NET Framework 4.
Для запроса разрешений служат атрибуты, представляющие разрешения, которые необходимо запросить для кода на уровне сборки.Используемые атрибуты могут меняться в зависимости от запрашиваемых разрешений.Запросы компилируются в метаданныеманифеста сборки и оцениваются средой выполнения, когда код загружается в память при запуске.
Следующий пример демонстрирует способ запроса разрешения на доступ к неуправляемому коду.Обратите внимание, что в нем используется атрибут 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