SuppressUnmanagedCodeSecurityAttribute Класс

Определение

Позволяет управляемому коду вызывать неуправляемый код без обхода стека.Allows managed code to call into unmanaged code without a stack walk. Этот класс не наследуется.This class cannot be inherited.

public ref class SuppressUnmanagedCodeSecurityAttribute sealed : Attribute
public sealed class SuppressUnmanagedCodeSecurityAttribute : 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
type SuppressUnmanagedCodeSecurityAttribute = class
    inherit 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
Атрибуты

Комментарии

Важно!

Частично доверенный код больше не поддерживается.Partially trusted code is no longer supported. Этот атрибут не влияет на .NET Core.This attribute has no effect in .NET Core.

Внимание!

Используйте этот атрибут с крайней осторожностью.Use this attribute with extreme care. Неправильное использование может создать слабые места в системе безопасности.Incorrect use can create security weaknesses.

Этот атрибут может применяться к методам, которые хотят вызывать машинный код без потери производительности при выполнении проверки безопасности во время выполнения.This attribute can be applied to methods that want to call into native code without incurring the performance loss of a run-time security check when doing so. Проверка стека, выполненная при вызове неуправляемого кода, пропускается во время выполнения, что приводит к существенной экономии производительности.The stack walk performed when calling unmanaged code is omitted at run time, resulting in substantial performance savings. Использование этого атрибута в классе применяет его ко всем вложенным методам.Using this attribute in a class applies it to all contained methods.

Как правило, каждый раз, когда управляемый код вызывает неуправляемый код (вызов PInvoke или COM-взаимодействие в машинный код), существует потребность в том, UnmanagedCode чтобы все вызывающие объекты имели необходимые разрешения.Generally, whenever managed code calls into unmanaged code (by PInvoke or COM interop into native code), there is a demand for the UnmanagedCode permission to ensure all callers have the necessary permission to allow this. Применяя этот явный атрибут, разработчики могут подавить требование во время выполнения.By applying this explicit attribute, developers can suppress the demand at run time. Разработчик должен принять участие в гарантии того, что переход в неуправляемый код достаточно защищен другими средствами.The developer must take responsibility for assuring that the transition into unmanaged code is sufficiently protected by other means. Требование UnmanagedCode разрешения будет по-прежнему происходить во время компоновки.The demand for the UnmanagedCode permission will still occur at link time. Например, если функция A вызывает функцию B, а функция б помечена атрибутом SuppressUnmanagedCodeSecurityAttribute , функция A будет проверяться на наличие разрешения на неуправляемый код во время JIT-компиляции, но не во время выполнения.For example, if function A calls function B and function B is marked with SuppressUnmanagedCodeSecurityAttribute, function A will be checked for unmanaged code permission during just-in-time compilation, but not subsequently during run time.

Этот атрибут эффективен только при применении к методам PInvoke (или к классам, содержащим методы PInvoke) или к определению интерфейса, через который будут выполняться вызовы взаимодействия.This attribute is only effective when applied to PInvoke methods (or classes that contain PInvoke methods) or the definition of an interface through which interop calls will be made. Он будет игнорироваться во всех других контекстах.It will be ignored in all other contexts.

Этот атрибут полезен для реализации класса, предоставляющего доступ к системным ресурсам через неуправляемый код.This attribute is useful for implementing a class that provides access to system resources through unmanaged code. Код, который не имеет разрешения на доступ к неуправляемому коду, может вызывать класс с этим атрибутом для доступа к неуправляемому коду.Code that does not have permission to access unmanaged code can call a class with this attribute to access unmanaged code. Это безопасно, только если средство записи класса с этим атрибутом запрограммирует класс для обеспечения безопасности.This is only safe if the writer of the class with this attribute has programmed the class to be secure. В противном случае этот атрибут является опасным и может разрешить неверное использование кода, использующего его.If not, this attribute is dangerous and can allow the code that uses it to be misused.

Это не декларативный атрибут безопасности, а обычный атрибут (он наследуется от Attribute , а не SecurityAttribute ).This is not a declarative security attribute, but a regular attribute (it derives from Attribute, not SecurityAttribute).

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

SuppressUnmanagedCodeSecurityAttribute()

Инициализирует новый экземпляр класса SuppressUnmanagedCodeSecurityAttribute.Initializes a new instance of the SuppressUnmanagedCodeSecurityAttribute class.

Свойства

TypeId

В случае реализации в производном классе возвращает уникальный идентификатор для этого атрибута Attribute.When implemented in a derived class, gets a unique identifier for this Attribute.

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

Методы

Equals(Object)

Возвращает значение, показывающее, равен ли экземпляр указанному объекту.Returns a value that indicates whether this instance is equal to a specified object.

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

Возвращает хэш-код данного экземпляра.Returns the hash code for this instance.

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

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

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

При переопределении в производном классе указывает, является ли значение этого экземпляра значением по умолчанию для производного класса.When overridden in a derived class, indicates whether the value of this instance is the default value for the derived class.

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

При переопределении в производном классе возвращает значение, указывающее, является ли этот экземпляр равным заданному объекту.When overridden in a derived class, returns a value that indicates whether this instance equals a specified object.

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

Создает неполную копию текущего объекта Object.Creates a shallow copy of the current Object.

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

Возвращает строку, представляющую текущий объект.Returns a string that represents the current object.

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

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

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

Сопоставляет набор имен соответствующему набору идентификаторов диспетчеризации.Maps a set of names to a corresponding set of dispatch identifiers.

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

Возвращает сведения о типе объекта, которые можно использовать для получения сведений о типе интерфейса.Retrieves the type information for an object, which can be used to get the type information for an interface.

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

Возвращает количество предоставляемых объектом интерфейсов для доступа к сведениям о типе (0 или 1).Retrieves the number of type information interfaces that an object provides (either 0 or 1).

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

Предоставляет доступ к открытым свойствам и методам объекта.Provides access to properties and methods exposed by an object.

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

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

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