SuppressUnmanagedCodeSecurityAttribute Třída

Definice

Umožňuje spravovanému kódu volat nespravovaný kód bez procházky zásobníkem. Tato třída se nemůže dědit.

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
Dědičnost
SuppressUnmanagedCodeSecurityAttribute
Atributy

Poznámky

Important

Částečně důvěryhodný kód se už nepodporuje. Tento atribut nemá žádný vliv na .NET Core.

Caution

Tento atribut použijte s extrémní opatrností. Nesprávné použití může způsobit slabá místa zabezpečení.

Tento atribut lze použít u metod, které chtějí volat do nativního kódu, aniž by při tom došlo ke ztrátě výkonu kontroly zabezpečení za běhu. Procházka zásobníkem prováděná při volání nespravovaného kódu je vynechána za běhu, což vede k podstatným úsporám výkonu. Použití tohoto atributu ve třídě jej použije na všechny obsažené metody.

Obecně platí, že při každém volání spravovaného kódu do nespravovaného kódu (zprostředkovatele komunikace PInvoke nebo COM do nativního kódu) existuje požadavek na UnmanagedCode povolení, aby všichni volající měli potřebná oprávnění k tomu. Použitím tohoto explicitního atributu můžou vývojáři potlačit poptávku za běhu. Vývojář musí převzít odpovědnost za zajištění, že přechod na nespravovaný kód je dostatečně chráněný jinými prostředky. Poptávka po UnmanagedCode oprávnění bude stále probíhat v době propojení. Pokud je například funkce A volá funkci B a funkce B označena SuppressUnmanagedCodeSecurityAttribute, funkce A bude při kompilaci za běhu kontrolována oprávnění nespravovaného kódu, ale nebude následně během běhu.

Tento atribut je efektivní pouze při použití PInvoke metody (nebo tříd, které obsahují PInvoke metody) nebo definici rozhraní, prostřednictvím kterého se budou provádět volání zprostředkovatele komunikace. Bude ignorován ve všech ostatních kontextech.

Tento atribut je užitečný pro implementaci třídy, která poskytuje přístup k systémovým prostředkům prostřednictvím nespravovaného kódu. Kód, který nemá oprávnění pro přístup k nespravovanému kódu, může volat třídu s tímto atributem pro přístup k nespravovanému kódu. To je bezpečné pouze v případě, že zapisovač třídy s tímto atributem naprogramoval třídu, která má být zabezpečena. Pokud ne, je tento atribut nebezpečný a může povolit, aby kód, který ho používá, byl zneužit.

Toto není deklarativní atribut zabezpečení, ale běžný atribut (je odvozen z Attribute, nikoli SecurityAttribute).

Konstruktory

Name Description
SuppressUnmanagedCodeSecurityAttribute()

Inicializuje novou instanci SuppressUnmanagedCodeSecurityAttribute třídy.

Vlastnosti

Name Description
TypeId

Při implementaci v odvozené třídě získá jedinečný identifikátor pro tento Attribute.

(Zděděno od Attribute)

Metody

Name Description
Equals(Object)

Vrátí hodnotu, která určuje, zda je tato instance rovna zadanému objektu.

(Zděděno od Attribute)
GetHashCode()

Vrátí kód hash pro tuto instanci.

(Zděděno od Attribute)
GetType()

Získá Type aktuální instance.

(Zděděno od Object)
IsDefaultAttribute()

Při přepsání v odvozené třídě určuje, zda hodnota této instance je výchozí hodnotou pro odvozenou třídu.

(Zděděno od Attribute)
Match(Object)

Při přepsání v odvozené třídě vrátí hodnotu, která určuje, zda se tato instance rovná zadanému objektu.

(Zděděno od Attribute)
MemberwiseClone()

Vytvoří mělkou kopii aktuálního Object.

(Zděděno od Object)
ToString()

Vrátí řetězec, který představuje aktuální objekt.

(Zděděno od Object)

Explicitní implementace rozhraní

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

Mapuje sadu názvů na odpovídající sadu identifikátorů pro rozesílání.

(Zděděno od Attribute)
_Attribute.GetTypeInfo(UInt32, UInt32, IntPtr)

Načte informace o typu objektu, který lze použít k získání informací o typu pro rozhraní.

(Zděděno od Attribute)
_Attribute.GetTypeInfoCount(UInt32)

Získá počet rozhraní typu informací, které objekt poskytuje (0 nebo 1).

(Zděděno od Attribute)
_Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr)

Poskytuje přístup k vlastnostem a metodám vystaveným objektem.

(Zděděno od Attribute)

Platí pro

Viz také