RuntimeHelpers.PrepareConstrainedRegions Methode

Definition

Achtung

The Constrained Execution Region (CER) feature is not supported.

Kennzeichnet einen Codeabschnitt als eingeschränkten Ausführungsbereich (Constrained Execution Region, 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 ()
Attribute

Beispiele

Im folgenden Beispiel wird gezeigt, wie Handles mithilfe der PrepareConstrainedRegions -Methode zuverlässig festgelegt werden. Um ein Handle zuverlässig auf ein angegebenes bereits vorhandenes Handle festzulegen, müssen Sie sicherstellen, dass die Zuordnung des nativen Handles und die nachfolgende Aufzeichnung dieses Handles in einem SafeHandle Objekt atomar ist. Alle Fehler zwischen diesen Vorgängen (z. B. ein Threadabbruch oder eine Ausnahme außerhalb des Arbeitsspeichers) führen dazu, dass das systemeigene Handle verloren geht. Sie können die PrepareConstrainedRegions -Methode verwenden, um sicherzustellen, dass das Handle nicht undicht ist.

[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

Hinweise

Compiler verwenden diese Methode, um , finallyund fault Blöcke als eingeschränkte Ausführungsregionen (CERs) zu markierencatch. Code, der als eingeschränkte Region gekennzeichnet ist, darf nur anderen Code mit starken Zuverlässigkeitsverträgen aufrufen. Sie sollte nicht unvorbereitete oder unzuverlässige Methoden zuordnen oder virtuelle Aufrufe tätigen, es sei denn, sie ist bereit, Fehler zu behandeln.

Beachten Sie, NOPdass zwischen einem Aufruf der -Methode und try dem -Block keine Opcodes für Zwischensprachen PrepareConstrainedRegions zulässig sind. Weitere Informationen zu CERs finden Sie in den Klassen im System.Runtime.ConstrainedExecution Namespace.

CERs, die mit der PrepareConstrainedRegions -Methode gekennzeichnet sind, funktionieren nicht einwandfrei, wenn ein StackOverflowException aus dem try Block generiert wird. Weitere Informationen finden Sie unter der Methode ExecuteCodeWithGuaranteedCleanup.

Die PrepareConstrainedRegions-Methode ruft die ProbeForSufficientStack-Methode auf.

Gilt für: