Exportar (0) Imprimir
Expandir todo
Este artículo proviene de un motor de traducción automática. Mueva el puntero sobre las frases del artículo para ver el texto original. Más información.
Traducción
Original

Consideraciones sobre la seguridad de invocación de plataforma

Los miembros Assert, Deny y PermitOnly de la enumeración SecurityAction se denominan modificadores de recorrido de pila. Estos miembros se omiten si se utilizan como atributos declarativos en las declaraciones de invocación de plataforma y en instrucciones de lenguaje de definición de interfaz (IDL) COM.

Los ejemplos de invocación de plataforma de esta sección muestran el uso del atributo RegistryPermission con los modificadores de recorrido de pila.

En el ejemplo de código siguiente, se omiten los modificadores SecurityActionAssert, Deny y PermitOnly.

[DllImport("MyClass.dll", EntryPoint = "CallRegistryPermission")]
[RegistryPermission(SecurityAction.Assert, Unrestricted = true)]
    private static extern bool CallRegistryPermissionAssert();

[DllImport("MyClass.dll", EntryPoint = "CallRegistryPermission")]
[RegistryPermission(SecurityAction.Deny, Unrestricted = true)]
    private static extern bool CallRegistryPermissionDeny();

[DllImport("MyClass.dll", EntryPoint = "CallRegistryPermission")]
[RegistryPermission(SecurityAction.PermitOnly, Unrestricted = true)]
    private static extern bool CallRegistryPermissionDeny();

Sin embargo, el modificador Demand se acepta en el ejemplo siguiente.

[DllImport("MyClass.dll", EntryPoint = "CallRegistryPermission")]
[RegistryPermission(SecurityAction.Demand, Unrestricted = true)]
    private static extern bool CallRegistryPermissionDeny();

Los modificadores SecurityAction funcionan correctamente si se colocan en una clase que contiene la llamada de invocación de plataforma.

[RegistryPermission(SecurityAction.Demand, Unrestricted = true)]
class PInvokeWrapper
{
[DllImport("MyClass.dll", EntryPoint = "CallRegistryPermission")]
    private static extern bool CallRegistryPermissionDeny();
}

Los modificadores SecurityAction también funcionan correctamente en escenarios anidados, donde se colocan en el llamador de la llamada de invocación de plataforma:

class PInvokeScenario
{
    [DllImport("MyClass.dll", EntryPoint = "CallRegistryPermission")]
    private static extern bool CallRegistryPermissionInternal();

    [RegistryPermission(SecurityAction.Assert, Unrestricted = true)]
    public static bool CallRegistryPermission()
    {
     return CallRegistryPermissionInternal();
    }
}

Bb397754.collapse_all(es-es,VS.110).gifEjemplos de interoperabilidad COM

Los ejemplos de interoperabilidad COM de esta sección muestran el uso del atributo RegistryPermission con los modificadores de recorrido de pila.

Las siguientes declaraciones de interfaz de interoperabilidad COM omiten los modificadores Assert, Deny y PermitOnly, de forma similar a los ejemplos de invocación de plataforma de la sección anterior.

[ComImport, Guid("12345678-43E6-43c9-9A13-47F40B338DE0")]
interface IAssertStubsItf
{
[RegistryPermission(SecurityAction.Assert, Unrestricted = true)]
    bool CallRegistryPermission();
[FileIOPermission(SecurityAction.Assert, Unrestricted = true)]
    bool CallFileIoPermission();
}

[ComImport, Guid("12345678-43E6-43c9-9A13-47F40B338DE0")]
interface IDenyStubsItf
{
[RegistryPermission(SecurityAction.Deny, Unrestricted = true)]
    bool CallRegistryPermission();
[FileIOPermission(SecurityAction.Deny, Unrestricted = true)]
    bool CallFileIoPermission();
}

[ComImport, Guid("12345678-43E6-43c9-9A13-47F40B338DE0")]
interface IAssertStubsItf
{
[RegistryPermission(SecurityAction.PermitOnly, Unrestricted = true)]
    bool CallRegistryPermission();
[FileIOPermission(SecurityAction.PermitOnly, Unrestricted = true)]
    bool CallFileIoPermission();
}

Además, el modificador Demand no se acepta en escenarios de declaración de interfaz de interoperabilidad COM, como se muestra en el ejemplo siguiente.

[ComImport, Guid("12345678-43E6-43c9-9A13-47F40B338DE0")]
interface IDemandStubsItf
{
[RegistryPermission(SecurityAction.Demand, Unrestricted = true)]
    bool CallRegistryPermission();
[FileIOPermission(SecurityAction.Demand, Unrestricted = true)]
    bool CallFileIoPermission();
}

Adiciones de comunidad

AGREGAR
Mostrar:
© 2014 Microsoft