HostSecurityManager Classe

Definizione

Consente il controllo e la personalizzazione del comportamento di sicurezza per i domini applicazione.

public class HostSecurityManager
[System.Runtime.InteropServices.ComVisible(true)]
[System.Serializable]
public class HostSecurityManager
[System.Runtime.InteropServices.ComVisible(true)]
[System.Serializable]
[System.Security.SecurityCritical]
public class HostSecurityManager
Ereditarietà
HostSecurityManager
Attributi

Esempio

Nell'esempio seguente viene illustrata un'implementazione molto semplice di un oggetto HostSecurityManager.

// To replace the default security manager with MySecurityManager, add the 
// assembly to the GAC and call MySecurityManager in the
// custom implementation of the AppDomainManager.

using System;
using System.Collections;
using System.Net;
using System.Reflection;
using System.Security;
using System.Security.Permissions;
using System.Security.Policy;
using System.Security.Principal;
using System.Threading;
using System.Runtime.InteropServices;
using System.Runtime.Hosting;

[assembly: System.Security.AllowPartiallyTrustedCallersAttribute()]
namespace MyNamespace
{
    [Serializable()]
    [SecurityPermissionAttribute(SecurityAction.Demand, Flags = SecurityPermissionFlag.Infrastructure)]
    public class MySecurityManager : HostSecurityManager
    {
        public MySecurityManager()
        {
            Console.WriteLine(" Creating MySecurityManager.");
        }

        private HostSecurityManagerOptions hostFlags = HostSecurityManagerOptions.HostDetermineApplicationTrust |
                                                   HostSecurityManagerOptions.HostAssemblyEvidence;
        public override HostSecurityManagerOptions Flags
        {
            get
            {
                return hostFlags;
            }
        }

        public override Evidence ProvideAssemblyEvidence(Assembly loadedAssembly, Evidence evidence)
        {
            Console.WriteLine("Provide assembly evidence for: " + (loadedAssembly == null ? "Unknown" : loadedAssembly.ToString()) + ".");
            if (evidence == null)
                return null;

            evidence.AddAssemblyEvidence(new CustomEvidenceType());
            return evidence;
        }
        public override Evidence ProvideAppDomainEvidence(Evidence evidence)
        {
            Console.WriteLine("Provide evidence for the " + AppDomain.CurrentDomain.FriendlyName + " AppDomain.");
            if (evidence == null)
                return null;

            evidence.AddHostEvidence(new CustomEvidenceType());
            return evidence;
        }

        [SecurityPermissionAttribute(SecurityAction.Demand, Execution = true)]
        [SecurityPermissionAttribute(SecurityAction.Assert, Unrestricted = true)]
        public override ApplicationTrust DetermineApplicationTrust(Evidence applicationEvidence, Evidence activatorEvidence, TrustManagerContext context)
        {
            if (applicationEvidence == null)
                throw new ArgumentNullException("applicationEvidence");

            // Get the activation context from the application evidence.
            // This HostSecurityManager does not examine the activator evidence
            // nor is it concerned with the TrustManagerContext;
            // it simply grants the requested grant in the application manifest.

            IEnumerator enumerator = applicationEvidence.GetHostEnumerator();
            ActivationArguments activationArgs = null;
            while (enumerator.MoveNext())
            {
                activationArgs = enumerator.Current as ActivationArguments;
                if (activationArgs != null)
                    break;
            }

            if (activationArgs == null)
                return null;

            ActivationContext activationContext = activationArgs.ActivationContext;
            if (activationContext == null)
                return null;

            ApplicationTrust trust = new ApplicationTrust(activationContext.Identity);
            ApplicationSecurityInfo asi = new ApplicationSecurityInfo(activationContext);
            trust.DefaultGrantSet = new PolicyStatement(asi.DefaultRequestSet, PolicyStatementAttribute.Nothing);
            trust.IsApplicationTrustedToRun = true;
            return trust;
        }
    }
    [Serializable()]
    public class CustomEvidenceType : EvidenceBase
    {
        public CustomEvidenceType() { }

        public override string ToString()
        {
            return "CustomEvidenceType";
        }
    }
}

Commenti

Quando si crea un nuovo AppDomainoggetto , Common Language Runtime esegue AppDomainManager una query sulla presenza di un HostSecurityManageroggetto , che partecipa a prendere decisioni di sicurezza per .AppDomain I provider host devono implementare un gestore di sicurezza host che eredita dalla HostSecurityManager classe .

Note per gli eredi

Alcuni membri di un HostSecurityManager oggetto vengono chiamati ogni volta che viene caricato un assembly, in modo implicito o esplicito. I ProvideAssemblyEvidence(Assembly, Evidence) metodi e ProvideAppDomainEvidence(Evidence) non devono caricare alcun assembly, perché in questo modo i membri dell'oggetto HostSecurityManager vengono chiamati in modo ricorsivo. Per evitare riferimenti circolari, è necessario creare nuove istanze di classi che possono causare il caricamento degli assembly, in modo implicito o esplicito, nel costruttore di una classe che deriva da HostSecurityManager.

Costruttori

HostSecurityManager()

Inizializza una nuova istanza della classe HostSecurityManager.

Proprietà

DomainPolicy
Obsoleti.

In caso di override in una classe derivata, ottiene il criterio di sicurezza per il dominio dell'applicazione corrente.

Flags

Ottiene il flag che rappresenta i componenti dei criteri di sicurezza importanti per l'host.

Metodi

DetermineApplicationTrust(Evidence, Evidence, TrustManagerContext)

Determina se un'applicazione deve essere eseguita.

Equals(Object)

Determina se l'oggetto specificato è uguale all'oggetto corrente.

(Ereditato da Object)
GenerateAppDomainEvidence(Type)

Richiede un tipo di evidenza specifico per il dominio applicazione.

GenerateAssemblyEvidence(Type, Assembly)

Richiede un tipo di evidenza specifico per l'assembly.

GetHashCode()

Funge da funzione hash predefinita.

(Ereditato da Object)
GetHostSuppliedAppDomainEvidenceTypes()

Determina i tipi di evidenza che possono essere forniti dall'host per il dominio applicazione, se necessario.

GetHostSuppliedAssemblyEvidenceTypes(Assembly)

Determina i tipi di evidenza che possono essere forniti dall'host per l'assembly, se necessario.

GetType()

Ottiene l'oggetto Type dell'istanza corrente.

(Ereditato da Object)
MemberwiseClone()

Crea una copia superficiale dell'oggetto Object corrente.

(Ereditato da Object)
ProvideAppDomainEvidence(Evidence)

Fornisce l'evidenza del dominio applicazione del caricamento di un assembly.

ProvideAssemblyEvidence(Assembly, Evidence)

Fornisce l'evidenza del caricamento di un assembly.

ResolvePolicy(Evidence)
Obsoleti.

Determina le autorizzazioni da concedere al codice in base all'evidenza specificata.

ToString()

Restituisce una stringa che rappresenta l'oggetto corrente.

(Ereditato da Object)

Si applica a

Prodotto Versioni
.NET 8 (package-provided), 9 (package-provided)
.NET Framework 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7 (package-provided), 4.7, 4.7.1 (package-provided), 4.7.1, 4.7.2 (package-provided), 4.7.2, 4.8 (package-provided), 4.8, 4.8.1
.NET Standard 2.0 (package-provided)
Windows Desktop 3.0, 3.1, 5, 6, 7, 8, 9