Compartir vía


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