Questo articolo è stato tradotto automaticamente. Per visualizzare l'articolo in inglese, selezionare la casella di controllo Inglese. È possibile anche visualizzare il testo inglese in una finestra popup posizionando il puntatore del mouse sopra il testo.
Traduzione
Inglese

platform invoke (considerazioni sulla sicurezza)

I membri Assert, Deny e PermitOnly dell'enumerazione SecurityAction sono denominati modificatori di percorso chiamate nello stack. Questi membri vengono ignorati se utilizzati come attributi dichiarativi in dichiarazioni pInvoke e istruzioni COM del linguaggio di definizione dell'interfaccia (IDL, Interface Definition Language).

Negli esempi di pInvoke presenti in questa sezione viene illustrato l'utilizzo dell'attributo RegistryPermission con i modificatori del percorso chiamate nello stack.

Nell'esempio di codice seguente, vengono ignorati i modificatori SecurityActionAssert, Deny e 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();

Nell'esempio seguente viene invece accettato il modificatore Demand.

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

I modificatori SecurityAction funzionano correttamente se vengono inseriti in una classe contenente la chiamata pInvoke.

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

I modificatori SecurityAction funzionano correttamente anche in un scenario annidato in cui vengono inseriti nel chiamante della chiamata pInvoke:

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(it-it,VS.110).gifEsempi di interoperabilità COM

Negli esempi di interoperabilità COM presenti in questa sezione viene illustrato l'utilizzo dell'attributo RegistryPermission con i modificatori del percorso chiamate nello stack.

Nelle dichiarazioni di interfaccia di interoperabilità COM seguenti vengono ignorati i modificatori Assert, Deny e PermitOnly, in modo analogo agli esempi di pInvoke della sezione precedente.

[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();
}

Inoltre, il modificatore Demand non viene accettato negli scenari di dichiarazione di interfaccia di interoperabilità COM, come mostrato nell'esempio seguente.

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