Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / whidbey / NetFXspW7 / ndp / clr / src / BCL / System / Security / Policy / ApplicationSecurityManager.cs / 1 / ApplicationSecurityManager.cs
// ==++==
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
// ==--==
//
// ApplicationSecurityManager.cs
//
namespace System.Security.Policy {
using System.Deployment.Internal.Isolation;
using System.Deployment.Internal.Isolation.Manifest;
using System.IO;
using System.Runtime.Versioning;
using System.Security.Permissions;
using System.Security.Util;
[System.Runtime.InteropServices.ComVisible(true)]
public static class ApplicationSecurityManager {
private static IApplicationTrustManager m_appTrustManager = null;
//
// Public static methods.
//
[SecurityPermission(SecurityAction.LinkDemand, Flags = SecurityPermissionFlag.ControlPolicy | SecurityPermissionFlag.ControlEvidence)]
[SecurityPermissionAttribute(SecurityAction.Assert, Unrestricted=true)]
public static bool DetermineApplicationTrust (ActivationContext activationContext, TrustManagerContext context) {
if (activationContext == null)
throw new ArgumentNullException("activationContext");
ApplicationTrust appTrust = null;
AppDomainManager domainManager = AppDomain.CurrentDomain.DomainManager;
if (domainManager != null) {
HostSecurityManager securityManager = domainManager.HostSecurityManager;
if ((securityManager != null) && ((securityManager.Flags & HostSecurityManagerOptions.HostDetermineApplicationTrust) == HostSecurityManagerOptions.HostDetermineApplicationTrust)) {
appTrust = securityManager.DetermineApplicationTrust(CmsUtils.MergeApplicationEvidence(null, activationContext.Identity, activationContext, null), null, context);
if (appTrust == null)
return false;
return appTrust.IsApplicationTrustedToRun;
}
}
appTrust = DetermineApplicationTrustInternal(activationContext, context);
if (appTrust == null)
return false;
return appTrust.IsApplicationTrustedToRun;
}
//
// Public static properties.
//
public static ApplicationTrustCollection UserApplicationTrusts {
[SecurityPermissionAttribute(SecurityAction.Demand, Flags=SecurityPermissionFlag.ControlPolicy)]
get {
return new ApplicationTrustCollection(true);
}
}
public static IApplicationTrustManager ApplicationTrustManager {
[SecurityPermissionAttribute(SecurityAction.Demand, Flags=SecurityPermissionFlag.ControlPolicy)]
get {
if (m_appTrustManager == null) {
m_appTrustManager = DecodeAppTrustManager();
if (m_appTrustManager == null)
throw new PolicyException(Environment.GetResourceString("Policy_NoTrustManager"));
}
return m_appTrustManager;
}
}
//
// Internal
//
internal static ApplicationTrust DetermineApplicationTrustInternal (ActivationContext activationContext, TrustManagerContext context) {
ApplicationTrust trust = null;
ApplicationTrustCollection userTrusts = new ApplicationTrustCollection(true);
// See if there is a persisted trust decision for this application.
if ((context == null || !context.IgnorePersistedDecision)) {
trust = userTrusts[activationContext.Identity.FullName];
if (trust != null)
return trust;
}
// There is no cached trust decision so invoke the trust manager.
trust = ApplicationTrustManager.DetermineApplicationTrust(activationContext, context);
if (trust == null)
trust = new ApplicationTrust(activationContext.Identity);
// make sure the application identity is correctly set.
trust.ApplicationIdentity = activationContext.Identity;
if (trust.Persist)
userTrusts.Add(trust);
return trust;
}
//
// Private.
//
private static string s_machineConfigFile = Config.MachineDirectory + "applicationtrust.config";
[ResourceExposure(ResourceScope.None)]
[ResourceConsumption(ResourceScope.Machine, ResourceScope.Machine)]
private static IApplicationTrustManager DecodeAppTrustManager () {
if (!File.InternalExists(s_machineConfigFile))
goto defaultTrustManager;
// A config file exists. Decode the trust manager from its Xml.
FileStream contents = new FileStream(s_machineConfigFile, FileMode.Open, FileAccess.Read);
SecurityElement elRoot = SecurityElement.FromString(new StreamReader(contents).ReadToEnd());
SecurityElement elMscorlib = elRoot.SearchForChildByTag("mscorlib");
if (elMscorlib == null)
goto defaultTrustManager;
SecurityElement elSecurity = elMscorlib.SearchForChildByTag("security");
if (elSecurity == null)
goto defaultTrustManager;
SecurityElement elPolicy = elSecurity.SearchForChildByTag("policy");
if (elPolicy == null)
goto defaultTrustManager;
SecurityElement elSecurityManager = elPolicy.SearchForChildByTag("ApplicationSecurityManager");
if (elSecurityManager == null)
goto defaultTrustManager;
SecurityElement elTrustManager = elSecurityManager.SearchForChildByTag("IApplicationTrustManager");
if (elTrustManager == null)
goto defaultTrustManager;
IApplicationTrustManager appTrustManager = DecodeAppTrustManagerFromElement(elTrustManager);
if (appTrustManager == null)
goto defaultTrustManager;
return appTrustManager;
defaultTrustManager:
return DecodeAppTrustManagerFromElement(CreateDefaultApplicationTrustManagerElement());
}
private static SecurityElement CreateDefaultApplicationTrustManagerElement() {
SecurityElement elTrustManager = new SecurityElement("IApplicationTrustManager");
elTrustManager.AddAttribute("class",
"System.Security.Policy.TrustManager, System.Windows.Forms, Version=" + System.Reflection.Assembly.GetExecutingAssembly().GetVersion() + ", Culture=neutral, PublicKeyToken=" + AssemblyRef.EcmaPublicKeyToken);
elTrustManager.AddAttribute("version", "1");
return elTrustManager;
}
private static IApplicationTrustManager DecodeAppTrustManagerFromElement (SecurityElement elTrustManager) {
new ReflectionPermission(ReflectionPermissionFlag.MemberAccess).Assert();
string trustManagerName = elTrustManager.Attribute("class");
Type tmClass = Type.GetType(trustManagerName, false, false);
if (tmClass == null)
return null;
IApplicationTrustManager appTrustManager = Activator.CreateInstance(tmClass) as IApplicationTrustManager;
if (appTrustManager != null)
appTrustManager.FromXml(elTrustManager);
return appTrustManager;
}
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// ==++==
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
// ==--==
//
// ApplicationSecurityManager.cs
//
namespace System.Security.Policy {
using System.Deployment.Internal.Isolation;
using System.Deployment.Internal.Isolation.Manifest;
using System.IO;
using System.Runtime.Versioning;
using System.Security.Permissions;
using System.Security.Util;
[System.Runtime.InteropServices.ComVisible(true)]
public static class ApplicationSecurityManager {
private static IApplicationTrustManager m_appTrustManager = null;
//
// Public static methods.
//
[SecurityPermission(SecurityAction.LinkDemand, Flags = SecurityPermissionFlag.ControlPolicy | SecurityPermissionFlag.ControlEvidence)]
[SecurityPermissionAttribute(SecurityAction.Assert, Unrestricted=true)]
public static bool DetermineApplicationTrust (ActivationContext activationContext, TrustManagerContext context) {
if (activationContext == null)
throw new ArgumentNullException("activationContext");
ApplicationTrust appTrust = null;
AppDomainManager domainManager = AppDomain.CurrentDomain.DomainManager;
if (domainManager != null) {
HostSecurityManager securityManager = domainManager.HostSecurityManager;
if ((securityManager != null) && ((securityManager.Flags & HostSecurityManagerOptions.HostDetermineApplicationTrust) == HostSecurityManagerOptions.HostDetermineApplicationTrust)) {
appTrust = securityManager.DetermineApplicationTrust(CmsUtils.MergeApplicationEvidence(null, activationContext.Identity, activationContext, null), null, context);
if (appTrust == null)
return false;
return appTrust.IsApplicationTrustedToRun;
}
}
appTrust = DetermineApplicationTrustInternal(activationContext, context);
if (appTrust == null)
return false;
return appTrust.IsApplicationTrustedToRun;
}
//
// Public static properties.
//
public static ApplicationTrustCollection UserApplicationTrusts {
[SecurityPermissionAttribute(SecurityAction.Demand, Flags=SecurityPermissionFlag.ControlPolicy)]
get {
return new ApplicationTrustCollection(true);
}
}
public static IApplicationTrustManager ApplicationTrustManager {
[SecurityPermissionAttribute(SecurityAction.Demand, Flags=SecurityPermissionFlag.ControlPolicy)]
get {
if (m_appTrustManager == null) {
m_appTrustManager = DecodeAppTrustManager();
if (m_appTrustManager == null)
throw new PolicyException(Environment.GetResourceString("Policy_NoTrustManager"));
}
return m_appTrustManager;
}
}
//
// Internal
//
internal static ApplicationTrust DetermineApplicationTrustInternal (ActivationContext activationContext, TrustManagerContext context) {
ApplicationTrust trust = null;
ApplicationTrustCollection userTrusts = new ApplicationTrustCollection(true);
// See if there is a persisted trust decision for this application.
if ((context == null || !context.IgnorePersistedDecision)) {
trust = userTrusts[activationContext.Identity.FullName];
if (trust != null)
return trust;
}
// There is no cached trust decision so invoke the trust manager.
trust = ApplicationTrustManager.DetermineApplicationTrust(activationContext, context);
if (trust == null)
trust = new ApplicationTrust(activationContext.Identity);
// make sure the application identity is correctly set.
trust.ApplicationIdentity = activationContext.Identity;
if (trust.Persist)
userTrusts.Add(trust);
return trust;
}
//
// Private.
//
private static string s_machineConfigFile = Config.MachineDirectory + "applicationtrust.config";
[ResourceExposure(ResourceScope.None)]
[ResourceConsumption(ResourceScope.Machine, ResourceScope.Machine)]
private static IApplicationTrustManager DecodeAppTrustManager () {
if (!File.InternalExists(s_machineConfigFile))
goto defaultTrustManager;
// A config file exists. Decode the trust manager from its Xml.
FileStream contents = new FileStream(s_machineConfigFile, FileMode.Open, FileAccess.Read);
SecurityElement elRoot = SecurityElement.FromString(new StreamReader(contents).ReadToEnd());
SecurityElement elMscorlib = elRoot.SearchForChildByTag("mscorlib");
if (elMscorlib == null)
goto defaultTrustManager;
SecurityElement elSecurity = elMscorlib.SearchForChildByTag("security");
if (elSecurity == null)
goto defaultTrustManager;
SecurityElement elPolicy = elSecurity.SearchForChildByTag("policy");
if (elPolicy == null)
goto defaultTrustManager;
SecurityElement elSecurityManager = elPolicy.SearchForChildByTag("ApplicationSecurityManager");
if (elSecurityManager == null)
goto defaultTrustManager;
SecurityElement elTrustManager = elSecurityManager.SearchForChildByTag("IApplicationTrustManager");
if (elTrustManager == null)
goto defaultTrustManager;
IApplicationTrustManager appTrustManager = DecodeAppTrustManagerFromElement(elTrustManager);
if (appTrustManager == null)
goto defaultTrustManager;
return appTrustManager;
defaultTrustManager:
return DecodeAppTrustManagerFromElement(CreateDefaultApplicationTrustManagerElement());
}
private static SecurityElement CreateDefaultApplicationTrustManagerElement() {
SecurityElement elTrustManager = new SecurityElement("IApplicationTrustManager");
elTrustManager.AddAttribute("class",
"System.Security.Policy.TrustManager, System.Windows.Forms, Version=" + System.Reflection.Assembly.GetExecutingAssembly().GetVersion() + ", Culture=neutral, PublicKeyToken=" + AssemblyRef.EcmaPublicKeyToken);
elTrustManager.AddAttribute("version", "1");
return elTrustManager;
}
private static IApplicationTrustManager DecodeAppTrustManagerFromElement (SecurityElement elTrustManager) {
new ReflectionPermission(ReflectionPermissionFlag.MemberAccess).Assert();
string trustManagerName = elTrustManager.Attribute("class");
Type tmClass = Type.GetType(trustManagerName, false, false);
if (tmClass == null)
return null;
IApplicationTrustManager appTrustManager = Activator.CreateInstance(tmClass) as IApplicationTrustManager;
if (appTrustManager != null)
appTrustManager.FromXml(elTrustManager);
return appTrustManager;
}
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- CompiledRegexRunnerFactory.cs
- DrawingDrawingContext.cs
- CipherData.cs
- EntityDesignerBuildProvider.cs
- List.cs
- CompressStream.cs
- HuffmanTree.cs
- HtmlToClrEventProxy.cs
- StorageTypeMapping.cs
- AutoSizeToolBoxItem.cs
- MailSettingsSection.cs
- ButtonColumn.cs
- RegexFCD.cs
- KeyPressEvent.cs
- WorkflowCreationContext.cs
- TextWriter.cs
- ThemeInfoAttribute.cs
- StyleCollection.cs
- SqlConnectionFactory.cs
- DocumentGridContextMenu.cs
- DBCommand.cs
- AstTree.cs
- TreeNode.cs
- Transform.cs
- TriggerCollection.cs
- DefaultSerializationProviderAttribute.cs
- MergeLocalizationDirectives.cs
- ColumnBinding.cs
- FileVersion.cs
- _SpnDictionary.cs
- GeometryConverter.cs
- ScriptControl.cs
- IPAddressCollection.cs
- MSHTMLHost.cs
- ToolboxCategory.cs
- CustomDictionarySources.cs
- DataRecord.cs
- QueryableDataSource.cs
- PackageRelationshipCollection.cs
- EnumType.cs
- GeneralTransform2DTo3D.cs
- X509Utils.cs
- ConfigXmlText.cs
- XAMLParseException.cs
- ClientOptions.cs
- HttpWriter.cs
- EndpointDiscoveryMetadata11.cs
- ScaleTransform.cs
- RelationshipEnd.cs
- StringUtil.cs
- SettingsBindableAttribute.cs
- ClipboardData.cs
- ToolStripItemClickedEventArgs.cs
- DnsEndPoint.cs
- SQLBytesStorage.cs
- RegexGroup.cs
- BinHexEncoder.cs
- RelationshipEnd.cs
- CommandBinding.cs
- CalloutQueueItem.cs
- SafeMILHandleMemoryPressure.cs
- PenThreadWorker.cs
- WebPartConnectionsCancelEventArgs.cs
- WriteTimeStream.cs
- DESCryptoServiceProvider.cs
- GetPageCompletedEventArgs.cs
- EntitySet.cs
- RtfFormatStack.cs
- FileNotFoundException.cs
- SingletonInstanceContextProvider.cs
- CorePropertiesFilter.cs
- DrawingBrush.cs
- ObjectStateEntryOriginalDbUpdatableDataRecord.cs
- Panel.cs
- TextSelectionProcessor.cs
- ProviderSettings.cs
- EventRoute.cs
- CaseStatement.cs
- NavigationWindow.cs
- BatchStream.cs
- CompilationLock.cs
- HttpContext.cs
- AssemblyName.cs
- SpeechRecognizer.cs
- UniqueConstraint.cs
- ViewKeyConstraint.cs
- LineBreakRecord.cs
- ResourceCollectionInfo.cs
- ProcessInfo.cs
- XmlNamespaceMapping.cs
- NonClientArea.cs
- UdpChannelListener.cs
- ping.cs
- CroppedBitmap.cs
- PersonalizationStateInfoCollection.cs
- SiteOfOriginPart.cs
- QuadraticBezierSegment.cs
- XDeferredAxisSource.cs
- GridPattern.cs
- DispatchWrapper.cs