RuntimeHelpers.PrepareConstrainedRegions Methode

Definitie

Hiermee wordt een hoofdtekst van code toegewezen als een beperkte uitvoeringsregio (CER).

public:
 static void PrepareConstrainedRegions();
public static void PrepareConstrainedRegions();
[System.Security.SecurityCritical]
public static void PrepareConstrainedRegions();
static member PrepareConstrainedRegions : unit -> unit
[<System.Security.SecurityCritical>]
static member PrepareConstrainedRegions : unit -> unit
Public Shared Sub PrepareConstrainedRegions ()
Kenmerken

Voorbeelden

In het volgende voorbeeld ziet u hoe u op betrouwbare wijze ingangen instelt met behulp van de PrepareConstrainedRegions methode. Als u een ingang betrouwbaar wilt instellen op een opgegeven bestaande ingang, moet u ervoor zorgen dat de toewijzing van de systeemeigen ingang en de volgende opname van die ingang binnen een SafeHandle object atomisch is. Elke fout tussen deze bewerkingen (zoals een thread die wordt afgebroken of een uitzondering buiten het geheugen) leidt ertoe dat de systeemeigen ingang wordt gelekt. U kunt de PrepareConstrainedRegions methode gebruiken om ervoor te zorgen dat de greep niet is gelekt.

[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

Opmerkingen

Compilers gebruiken deze methode om te markeren catch, finallyen fault blokken als beperkte uitvoeringsregio's (CER's). Code die is gemarkeerd als een beperkte regio, mag alleen andere code aanroepen met sterke betrouwbaarheidscontracten. Het mag geen virtuele aanroepen toewijzen aan niet-voorbereide of onbetrouwbare methoden, tenzij het is voorbereid om fouten te verwerken.

Houd er rekening mee dat er geen tussenliggende taalopcodes zijn toegestaan NOPtussen een aanroep naar de PrepareConstrainedRegions methode en het try blok. Zie de klassen in de System.Runtime.ConstrainedExecution naamruimte voor meer informatie over CER's.

CER's die zijn gemarkeerd met behulp van de PrepareConstrainedRegions methode werken niet perfect wanneer er een StackOverflowException wordt gegenereerd op basis van het try blok. Zie de ExecuteCodeWithGuaranteedCleanup methode voor meer informatie.

Met PrepareConstrainedRegions de methode wordt de methode aangeroepen ProbeForSufficientStack .

Van toepassing op