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


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

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

См. также

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

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

Ссылки

SecurityPermissionAttribute

SecurityAction

SecurityPermissionFlag.UnmanagedCode

Другие ресурсы

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

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

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