다음을 통해 공유


SuppressUnmanagedCodeSecurityAttribute 클래스

스택 워크를 사용하지 않고 관리하는 코드를 관리하지 않는 코드로 호출할 수 있습니다. 이 클래스는 상속될 수 없습니다.

네임스페이스: System.Security
어셈블리: mscorlib(mscorlib.dll)

구문

‘선언
<ComVisibleAttribute(True)> _
<AttributeUsageAttribute(AttributeTargets.Class Or AttributeTargets.Method Or AttributeTargets.Interface Or AttributeTargets.Delegate, AllowMultiple:=True, Inherited:=False)> _
Public NotInheritable Class SuppressUnmanagedCodeSecurityAttribute
    Inherits Attribute
‘사용 방법
Dim instance As SuppressUnmanagedCodeSecurityAttribute
[ComVisibleAttribute(true)] 
[AttributeUsageAttribute(AttributeTargets.Class|AttributeTargets.Method|AttributeTargets.Interface|AttributeTargets.Delegate, AllowMultiple=true, Inherited=false)] 
public sealed class SuppressUnmanagedCodeSecurityAttribute : Attribute
[ComVisibleAttribute(true)] 
[AttributeUsageAttribute(AttributeTargets::Class|AttributeTargets::Method|AttributeTargets::Interface|AttributeTargets::Delegate, AllowMultiple=true, Inherited=false)] 
public ref class SuppressUnmanagedCodeSecurityAttribute sealed : public Attribute
/** @attribute ComVisibleAttribute(true) */ 
/** @attribute AttributeUsageAttribute(AttributeTargets.Class|AttributeTargets.Method|AttributeTargets.Interface|AttributeTargets.Delegate, AllowMultiple=true, Inherited=false) */ 
public final class SuppressUnmanagedCodeSecurityAttribute extends Attribute
ComVisibleAttribute(true) 
AttributeUsageAttribute(AttributeTargets.Class|AttributeTargets.Method|AttributeTargets.Interface|AttributeTargets.Delegate, AllowMultiple=true, Inherited=false) 
public final class SuppressUnmanagedCodeSecurityAttribute extends Attribute

설명

경고

주의해서 이 특성을 사용하십시오. 잘못 사용하면 보안 결함이 생길 수 있습니다.

런타임 보안 검사를 수행할 때 성능의 손실을 일으키지 않고 네이티브 코드로 호출할 메서드에 이 특성을 적용할 수 있습니다. 관리하지 않는 코드를 호출할 때 수행되는 스택 워크를 런타임에서 생략하면, 그 결과 실제 성능이 절약됩니다. 클래스에서 이 특성을 사용하면 포함된 모든 메서드에 해당 특성이 적용됩니다.

일반적으로 관리하는 코드를 관리하지 않는 코드로 호출할 때마다(PInvoke 또는 COM Interop를 네이티브 코드로 호출함), 모든 호출자가 이를 허용하는 데 필요한 권한을 가지고 있는지 여부를 확인하기 위해 UnmanagedCode 권한을 요청합니다. 이 명시적 특성을 적용하면 개발자는 런타임에 요청을 억제할 수 있습니다. 개발자는 다른 수단을 사용하여 비관리 코드로의 전환이 충분히 보호되도록 할 책임이 있습니다. UnmanagedCode 권한에 대한 요청은 링크 타임에 발생합니다. 예를 들어, 함수 A에서 함수 B를 호출하고 함수 B를 SuppressUnmanagedCodeSecurityAttribute으로 표시하면, 함수 A에서는 just-in-time 컴파일 중 비관리 코드의 권한을 확인합니다. 그러나 런타임 중에는 계속 수행하지 않습니다.

이 특성은 PInvoke 메서드(또는 PInvoke 메서드가 포함된 클래스) 또는 interop 호출을 수행하는 인터페이스 정의에 적용될 때만 효과가 있습니다. 다른 모든 컨텍스트에서는 이 특성이 무시됩니다.

이 특성은 관리하지 않는 코드를 통해 시스템 리소스에 액세스하는 클래스를 구현하는 데 매우 유용합니다. 관리하지 않는 코드에 액세스하는 권한이 없는 코드는 관리하지 않는 코드에 액세스하기 위해 이 특성을 사용하여 클래스를 호출할 수 있습니다. 이것은 이 특성을 사용하는 클래스 작성자가 보안할 클래스를 프로그램했을 경우에만 안전합니다. 그렇지 않으면 이 특성은 위험하며 코드를 오용할 수 있습니다.

이것은 선언적 보안 특성은 아니지만 정규 특성입니다 (SecurityAttribute가 아닌 Attribute에서 파생됨).

상속 계층 구조

System.Object
   System.Attribute
    System.Security.SuppressUnmanagedCodeSecurityAttribute

스레드로부터의 안전성

이 형식의 모든 public static(Visual Basic의 경우 Shared) 멤버는 스레드로부터 안전합니다. 인터페이스 멤버는 스레드로부터 안전하지 않습니다.

플랫폼

Windows 98, Windows 2000 SP4, Windows Millennium Edition, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition

.NET Framework에서 모든 플래폼의 모든 버전을 지원하지는 않습니다. 지원되는 버전의 목록은 시스템 요구 사항을 참조하십시오.

버전 정보

.NET Framework

2.0, 1.1, 1.0에서 지원

참고 항목

참조

SuppressUnmanagedCodeSecurityAttribute 멤버
System.Security 네임스페이스

기타 리소스

Extending Metadata Using Attributes
보안 최적화