RuntimeHelpers.PrepareConstrainedRegions 메서드
정의
중요
일부 정보는 릴리스되기 전에 상당 부분 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적이거나 묵시적인 보증도 하지 않습니다.
주의
The Constrained Execution Region (CER) feature is not supported.
코드 본문을 CER(제약이 있는 실행 영역)로 지정합니다.
public:
static void PrepareConstrainedRegions();
[System.Obsolete("The Constrained Execution Region (CER) feature is not supported.", DiagnosticId="SYSLIB0004", UrlFormat="https://aka.ms/dotnet-warnings/{0}")]
public static void PrepareConstrainedRegions ();
[System.Security.SecurityCritical]
public static void PrepareConstrainedRegions ();
public static void PrepareConstrainedRegions ();
[<System.Obsolete("The Constrained Execution Region (CER) feature is not supported.", DiagnosticId="SYSLIB0004", UrlFormat="https://aka.ms/dotnet-warnings/{0}")>]
static member PrepareConstrainedRegions : unit -> unit
[<System.Security.SecurityCritical>]
static member PrepareConstrainedRegions : unit -> unit
static member PrepareConstrainedRegions : unit -> unit
Public Shared Sub PrepareConstrainedRegions ()
- 특성
예제
다음 예제에서는 메서드를 사용하여 PrepareConstrainedRegions 핸들을 안정적으로 설정하는 방법을 보여 줍니다. 핸들을 지정된 기존 핸들로 안정적으로 설정하려면 네이티브 핸들의 할당과 개체 내에서 SafeHandle 해당 핸들의 후속 기록이 원자성인지 확인해야 합니다. 이러한 작업(예: 스레드 중단 또는 메모리 부족 예외) 간의 오류로 인해 네이티브 핸들이 유출됩니다. 메서드를 PrepareConstrainedRegions 사용하여 핸들이 유출되지 않도록 할 수 있습니다.
[StructLayout(LayoutKind.Sequential)]
struct MyStruct
{
public IntPtr m_outputHandle;
}
sealed class MySafeHandle : SafeHandle
{
// Called by P/Invoke when returning SafeHandles
public MySafeHandle()
: base(IntPtr.Zero, true)
{
}
public MySafeHandle AllocateHandle()
{
// Allocate SafeHandle first to avoid failure later.
MySafeHandle sh = new MySafeHandle();
RuntimeHelpers.PrepareConstrainedRegions();
try { }
finally
{
MyStruct myStruct = new MyStruct();
NativeAllocateHandle(ref myStruct);
sh.SetHandle(myStruct.m_outputHandle);
}
return sh;
}
<StructLayout(LayoutKind.Sequential)> _
Structure MyStruct
Public m_outputHandle As IntPtr
End Structure 'MyStruct
NotInheritable Class MySafeHandle
Inherits SafeHandle
' Called by P/Invoke when returning SafeHandles
Public Sub New()
MyBase.New(IntPtr.Zero, True)
End Sub
Public Function AllocateHandle() As MySafeHandle
' Allocate SafeHandle first to avoid failure later.
Dim sh As New MySafeHandle()
RuntimeHelpers.PrepareConstrainedRegions()
Try
Finally
Dim myStruct As New MyStruct()
NativeAllocateHandle(myStruct)
sh.SetHandle(myStruct.m_outputHandle)
End Try
Return sh
End Function
설명
컴파일러에서는 이 메서드를 사용하여 , finally
및 fault
블록을 CER(제한된 실행 영역)으로 표시catch
합니다. 제한된 지역으로 표시된 코드는 강력한 안정성 계약을 가진 다른 코드만 호출해야 합니다. 오류를 처리할 준비가 되지 않은 경우 준비되지 않았거나 신뢰할 수 없는 메서드에 가상 호출을 할당하거나 호출해서는 안 됩니다.
를 제외한 NOP
중간 언어 opcode는 메서드와 try
블록에 대한 호출 PrepareConstrainedRegions 간에 허용되지 않습니다. CER에 대한 자세한 내용은 네임스페이스의 클래스를 System.Runtime.ConstrainedExecution 참조하세요.
메서드를 사용하여 PrepareConstrainedRegions 표시된 CER은 블록에서 try
가 생성될 때 StackOverflowException 완벽하게 작동하지 않습니다. 자세한 내용은 ExecuteCodeWithGuaranteedCleanup 메서드를 참조하세요.
PrepareConstrainedRegions 메서드는 ProbeForSufficientStack 메서드를 호출합니다.
적용 대상
.NET