Поделиться через


Практическое руководство. Запрос разрешения на доступ к неуправляемому коду

Важно!

В версии .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 и код не будет допущен к выполнению. Но если вышеприведенный код получит это разрешение, запуск его будет разрешен.

См. также

Ссылки

SecurityPermissionAttribute

SecurityAction

SecurityPermissionFlag.UnmanagedCode

Основные понятия

Расширение метаданных с помощью атрибутов

Запрос разрешений

Управление доступом для кода

Метаданные и компоненты с самоописанием