RuntimeHelpers.PrepareConstrainedRegions Método

Definición

Precaución

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

Designa un cuerpo de código como una región de ejecución limitada (CER, Constrained Execution Region).

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 ()
Atributos

Ejemplos

En el ejemplo siguiente se muestra cómo establecer de forma confiable los identificadores mediante el PrepareConstrainedRegions método . Para establecer de forma confiable un identificador en un identificador preexistente especificado, debe asegurarse de que la asignación del identificador nativo y la grabación posterior de ese identificador dentro de un SafeHandle objeto es atómica. Cualquier error entre estas operaciones (como una anulación de subproceso o una excepción de memoria insuficiente) provocará que se filtre el identificador nativo. Puede usar el PrepareConstrainedRegions método para asegurarse de que el identificador no se filtre.

[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

Comentarios

Los compiladores usan este método para marcar catchlos bloques , finallyy fault como regiones de ejecución restringidas (CER). El código marcado como región restringida solo debe llamar a otro código con contratos de confiabilidad seguros. No debe asignar ni realizar llamadas virtuales a métodos no preparados o no confiables a menos que esté preparado para controlar los errores.

Tenga en cuenta que no se permiten códigos de operación de lenguaje intermedio, excepto NOP, entre una llamada al PrepareConstrainedRegions método y al try bloque . Para obtener más información sobre los CER, vea las clases en el System.Runtime.ConstrainedExecution espacio de nombres .

Los CER marcados con el PrepareConstrainedRegions método no funcionan perfectamente cuando se genera a StackOverflowException partir del try bloque . Para obtener más información, vea el método ExecuteCodeWithGuaranteedCleanup.

El método PrepareConstrainedRegions llama al método ProbeForSufficientStack.

Se aplica a