SuppressUnmanagedCodeSecurityAttribute Класс

Определение

Позволяет управляемому коду вызывать неуправляемый код без обхода стека. Этот класс не наследуется.

public ref class SuppressUnmanagedCodeSecurityAttribute sealed : Attribute
[System.AttributeUsage(System.AttributeTargets.Class | System.AttributeTargets.Delegate | System.AttributeTargets.Interface | System.AttributeTargets.Method, AllowMultiple=true, Inherited=false)]
public sealed class SuppressUnmanagedCodeSecurityAttribute : Attribute
[System.AttributeUsage(System.AttributeTargets.Class | System.AttributeTargets.Interface | System.AttributeTargets.Method, AllowMultiple=true, Inherited=false)]
public sealed class SuppressUnmanagedCodeSecurityAttribute : Attribute
[System.AttributeUsage(System.AttributeTargets.Class | System.AttributeTargets.Delegate | System.AttributeTargets.Interface | System.AttributeTargets.Method, AllowMultiple=true, Inherited=false)]
[System.Runtime.InteropServices.ComVisible(true)]
public sealed class SuppressUnmanagedCodeSecurityAttribute : Attribute
[<System.AttributeUsage(System.AttributeTargets.Class | System.AttributeTargets.Delegate | System.AttributeTargets.Interface | System.AttributeTargets.Method, AllowMultiple=true, Inherited=false)>]
type SuppressUnmanagedCodeSecurityAttribute = class
    inherit Attribute
[<System.AttributeUsage(System.AttributeTargets.Class | System.AttributeTargets.Interface | System.AttributeTargets.Method, AllowMultiple=true, Inherited=false)>]
type SuppressUnmanagedCodeSecurityAttribute = class
    inherit Attribute
[<System.AttributeUsage(System.AttributeTargets.Class | System.AttributeTargets.Delegate | System.AttributeTargets.Interface | System.AttributeTargets.Method, AllowMultiple=true, Inherited=false)>]
[<System.Runtime.InteropServices.ComVisible(true)>]
type SuppressUnmanagedCodeSecurityAttribute = class
    inherit Attribute
Public NotInheritable Class SuppressUnmanagedCodeSecurityAttribute
Inherits Attribute
Наследование
SuppressUnmanagedCodeSecurityAttribute
Атрибуты

Комментарии

Важно!

Частично доверенный код больше не поддерживается. Этот атрибут не действует в .NET Core.

Внимание!

Используйте этот атрибут с особой осторожностью. Неправильное использование может создать слабые места в системе безопасности.

Этот атрибут можно применять к методам, которые хотят вызывать в машинном коде, не вызывая при этом потерю производительности при проверке безопасности во время выполнения. Пошаговое руководство по стеку, выполняемого при вызове неуправляемого кода, опущено во время выполнения, что приводит к значительной экономии производительности. Использование этого атрибута в классе применяет его ко всем содержащимся методам.

Как правило, каждый раз, когда управляемый код вызывает неуправляемый код (путем PInvoke или COM-взаимодействия с машинным кодом), требуется разрешение, UnmanagedCode чтобы убедиться, что все вызывающие объекты имеют необходимое разрешение для этого. Применив этот явный атрибут, разработчики могут подавлять спрос во время выполнения. Разработчик должен взять на себя ответственность за обеспечение того, чтобы переход в неуправляемый код был достаточно защищен другими средствами. Запрос на разрешение по-прежнему UnmanagedCode будет возникать во время ссылки. Например, если функция А вызывает функцию B, а функция B помечена параметром SuppressUnmanagedCodeSecurityAttribute, функция A будет проверяться на наличие разрешения на неуправляемый код во время JIT-компиляции, но не во время выполнения.

Этот атрибут действует только при применении к методам PInvoke (или классам, содержащим методы PInvoke) или определению интерфейса, через который будут выполняться вызовы взаимодействия. Он будет игнорироваться во всех остальных контекстах.

Этот атрибут полезен для реализации класса, который предоставляет доступ к системным ресурсам с помощью неуправляемого кода. Код, который не имеет разрешения на доступ к неуправляемый код, может вызывать класс с этим атрибутом для доступа к неуправляемый код. Это безопасно только в том случае, если модуль записи класса с этим атрибутом запрограммировал класс на безопасность. В противном случае этот атрибут опасен и может позволить неправильно использовать код, который его использует.

Это не декларативный атрибут безопасности, а обычный атрибут (он является производным от Attribute, а не SecurityAttribute).

Конструкторы

SuppressUnmanagedCodeSecurityAttribute()

Инициализирует новый экземпляр класса SuppressUnmanagedCodeSecurityAttribute.

Свойства

TypeId

В случае реализации в производном классе возвращает уникальный идентификатор для этого атрибута Attribute.

(Унаследовано от Attribute)

Методы

Equals(Object)

Возвращает значение, показывающее, равен ли экземпляр указанному объекту.

(Унаследовано от Attribute)
GetHashCode()

Возвращает хэш-код данного экземпляра.

(Унаследовано от Attribute)
GetType()

Возвращает объект Type для текущего экземпляра.

(Унаследовано от Object)
IsDefaultAttribute()

При переопределении в производном классе указывает, является ли значение этого экземпляра значением по умолчанию для производного класса.

(Унаследовано от Attribute)
Match(Object)

При переопределении в производном классе возвращает значение, указывающее, является ли этот экземпляр равным заданному объекту.

(Унаследовано от Attribute)
MemberwiseClone()

Создает неполную копию текущего объекта Object.

(Унаследовано от Object)
ToString()

Возвращает строку, представляющую текущий объект.

(Унаследовано от Object)

Явные реализации интерфейса

_Attribute.GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr)

Сопоставляет набор имен соответствующему набору идентификаторов диспетчеризации.

(Унаследовано от Attribute)
_Attribute.GetTypeInfo(UInt32, UInt32, IntPtr)

Возвращает сведения о типе объекта, которые можно использовать для получения сведений о типе интерфейса.

(Унаследовано от Attribute)
_Attribute.GetTypeInfoCount(UInt32)

Возвращает количество предоставляемых объектом интерфейсов для доступа к сведениям о типе (0 или 1).

(Унаследовано от Attribute)
_Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr)

Предоставляет доступ к открытым свойствам и методам объекта.

(Унаследовано от Attribute)

Применяется к

См. также раздел