RuntimeHelpers.PrepareConstrainedRegions Methode
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
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 , finally
und 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, NOP
dass 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.