RuntimeHelpers.PrepareConstrainedRegions Metódus
Definíció
Fontos
Egyes információk olyan, kiadás előtti termékekre vonatkoznak, amelyek a kiadásig még jelentősen módosulhatnak. A Microsoft nem vállal kifejezett vagy törvényi garanciát az itt megjelenő információért.
Figyelemfelhívás
The Constrained Execution Region (CER) feature is not supported.
A kódtörzset korlátozott végrehajtási régióként (CER) jelöli meg.
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 ()
- Attribútumok
Példák
Az alábbi példa bemutatja, hogyan állíthat be megbízhatóan fogópontokat a PrepareConstrainedRegions metódus használatával. Ha egy fogópontot egy megadott, már meglévő fogópontra szeretne megbízhatóan beállítani, győződjön meg arról, hogy a natív fogópont lefoglalása és a fogópont objektumon belüli SafeHandle későbbi rögzítése atomi. A műveletek (például a szál megszakadása vagy a memóriakimaradás) közötti hibák miatt a natív leíró kiszivárog. Ezzel a PrepareConstrainedRegions módszerrel meggyőződhet arról, hogy a fogópont nem szivárgott ki.
[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
Megjegyzések
A fordítók ezzel a módszerrel jelölik catchmeg a korlátozott finallyvégrehajtási régiókat (CER-eket) és fault blokkokat. A korlátozott régióként megjelölt kódnak csak erős megbízhatósági szerződéssel rendelkező más kódot kell meghívnia. Nem szabad előkészítetlen vagy megbízhatatlan metódusokhoz virtuális hívásokat leküldnie vagy kezdeményeznie, kivéve, ha készen áll a hibák kezelésére.
Vegye figyelembe, hogy a metódusra és a NOP blokkra irányuló hívás között nem engedélyezettek köztes nyelvi opkódok, kivévePrepareConstrainedRegions.try A CER-ekről további információt a System.Runtime.ConstrainedExecution névtérben lévő osztályokban talál.
A metódussal PrepareConstrainedRegions megjelölt CER-ek nem működnek tökéletesen, ha StackOverflowException a try blokkból jön létre. További információkért tekintse meg a metódust ExecuteCodeWithGuaranteedCleanup .
A PrepareConstrainedRegions metódus meghívja a metódust ProbeForSufficientStack .