Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / whidbey / NetFxQFE / ndp / clr / src / BCL / System / Security / HostSecurityManager.cs / 1 / HostSecurityManager.cs
// ==++==
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
// ==--==
//
// A HostSecurityManager gives a hosting application the chance to
// participate in the security decisions in the AppDomain.
//
namespace System.Security {
using System.Collections;
using System.Deployment.Internal.Isolation;
using System.Deployment.Internal.Isolation.Manifest;
using System.Reflection;
using System.Security;
using System.Security.Permissions;
using System.Security.Policy;
using System.Runtime.Hosting;
[Flags, Serializable()]
[System.Runtime.InteropServices.ComVisible(true)]
public enum HostSecurityManagerOptions {
None = 0x0000,
HostAppDomainEvidence = 0x0001,
HostPolicyLevel = 0x0002,
HostAssemblyEvidence = 0x0004,
HostDetermineApplicationTrust = 0x0008,
HostResolvePolicy = 0x0010,
AllFlags = 0x001F
}
[Serializable]
[SecurityPermissionAttribute(SecurityAction.LinkDemand, Flags=SecurityPermissionFlag.Infrastructure)]
[SecurityPermissionAttribute(SecurityAction.InheritanceDemand, Flags=SecurityPermissionFlag.Infrastructure)]
[System.Runtime.InteropServices.ComVisible(true)]
public class HostSecurityManager {
public HostSecurityManager () {}
// The host can choose which events he wants to participate in. This property can be set when
// the host only cares about a subset of the capabilities exposed through the HostSecurityManager.
public virtual HostSecurityManagerOptions Flags {
get {
// We use AllFlags as the default.
return HostSecurityManagerOptions.AllFlags;
}
}
// provide policy for the AppDomain.
public virtual PolicyLevel DomainPolicy {
get {
return null;
}
}
public virtual Evidence ProvideAppDomainEvidence (Evidence inputEvidence) {
// The default implementation does not modify the input evidence.
return inputEvidence;
}
public virtual Evidence ProvideAssemblyEvidence (Assembly loadedAssembly, Evidence inputEvidence) {
// The default implementation does not modify the input evidence.
return inputEvidence;
}
#if !FEATURE_PAL
[SecurityPermissionAttribute(SecurityAction.Assert, Unrestricted=true)]
public virtual ApplicationTrust DetermineApplicationTrust (Evidence applicationEvidence, Evidence activatorEvidence, TrustManagerContext context) {
if (applicationEvidence == null)
throw new ArgumentNullException("applicationEvidence");
// This method looks for a trust decision for the ActivationContext in three locations, in order
// of preference:
//
// 1. Supplied by the host in the AppDomainSetup. If the host supplied a decision this way, it
// will be in the applicationEvidence.
// 2. Reuse the ApplicationTrust from the current AppDomain
// 3. Ask the TrustManager for a trust decision
// get the activation context from the application evidence.
// The default HostSecurityManager does not examine the activatorEvidence
// but other security managers could use it to figure out the
// evidence of the domain attempting to activate the application.
IEnumerator enumerator = applicationEvidence.GetHostEnumerator();
ActivationArguments activationArgs = null;
ApplicationTrust appTrust = null;
while (enumerator.MoveNext())
{
if (activationArgs == null)
activationArgs = enumerator.Current as ActivationArguments;
if (appTrust == null)
appTrust = enumerator.Current as ApplicationTrust;
if (activationArgs != null && appTrust != null)
break;
}
if (activationArgs == null)
throw new ArgumentException(Environment.GetResourceString("Policy_MissingActivationContextInAppEvidence"));
ActivationContext actCtx = activationArgs.ActivationContext;
if (actCtx == null)
throw new ArgumentException(Environment.GetResourceString("Policy_MissingActivationContextInAppEvidence"));
// Make sure that any ApplicationTrust we find applies to the ActivationContext we're
// creating the new AppDomain for.
if (appTrust != null &&
!CmsUtils.CompareIdentities(appTrust.ApplicationIdentity, activationArgs.ApplicationIdentity, ApplicationVersionMatch.MatchExactVersion))
{
appTrust = null;
}
// If there was not a trust decision supplied in the Evidence, we can reuse the existing trust
// decision from this domain if its identity matches the ActivationContext of the new domain.
// Otherwise consult the TrustManager for a trust decision
if (appTrust == null)
{
if (AppDomain.CurrentDomain.ApplicationTrust != null &&
CmsUtils.CompareIdentities(AppDomain.CurrentDomain.ApplicationTrust.ApplicationIdentity, activationArgs.ApplicationIdentity, ApplicationVersionMatch.MatchExactVersion))
{
appTrust = AppDomain.CurrentDomain.ApplicationTrust;
}
else
{
appTrust = ApplicationSecurityManager.DetermineApplicationTrustInternal(actCtx, context);
}
}
// If the trust decision allows the application to run, then it should also have a permission set
// which is at least the permission set the application requested.
ApplicationSecurityInfo appRequest = new ApplicationSecurityInfo(actCtx);
if (appTrust != null &&
appTrust.IsApplicationTrustedToRun &&
!appRequest.DefaultRequestSet.IsSubsetOf(appTrust.DefaultGrantSet.PermissionSet))
{
throw new InvalidOperationException(Environment.GetResourceString("Policy_AppTrustMustGrantAppRequest"));
}
return appTrust;
}
#endif //!FEATURE_PAL
public virtual PermissionSet ResolvePolicy (Evidence evidence) {
return SecurityManager.PolicyManager.ResolveHelper(evidence);
}
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// ==++==
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
// ==--==
//
// A HostSecurityManager gives a hosting application the chance to
// participate in the security decisions in the AppDomain.
//
namespace System.Security {
using System.Collections;
using System.Deployment.Internal.Isolation;
using System.Deployment.Internal.Isolation.Manifest;
using System.Reflection;
using System.Security;
using System.Security.Permissions;
using System.Security.Policy;
using System.Runtime.Hosting;
[Flags, Serializable()]
[System.Runtime.InteropServices.ComVisible(true)]
public enum HostSecurityManagerOptions {
None = 0x0000,
HostAppDomainEvidence = 0x0001,
HostPolicyLevel = 0x0002,
HostAssemblyEvidence = 0x0004,
HostDetermineApplicationTrust = 0x0008,
HostResolvePolicy = 0x0010,
AllFlags = 0x001F
}
[Serializable]
[SecurityPermissionAttribute(SecurityAction.LinkDemand, Flags=SecurityPermissionFlag.Infrastructure)]
[SecurityPermissionAttribute(SecurityAction.InheritanceDemand, Flags=SecurityPermissionFlag.Infrastructure)]
[System.Runtime.InteropServices.ComVisible(true)]
public class HostSecurityManager {
public HostSecurityManager () {}
// The host can choose which events he wants to participate in. This property can be set when
// the host only cares about a subset of the capabilities exposed through the HostSecurityManager.
public virtual HostSecurityManagerOptions Flags {
get {
// We use AllFlags as the default.
return HostSecurityManagerOptions.AllFlags;
}
}
// provide policy for the AppDomain.
public virtual PolicyLevel DomainPolicy {
get {
return null;
}
}
public virtual Evidence ProvideAppDomainEvidence (Evidence inputEvidence) {
// The default implementation does not modify the input evidence.
return inputEvidence;
}
public virtual Evidence ProvideAssemblyEvidence (Assembly loadedAssembly, Evidence inputEvidence) {
// The default implementation does not modify the input evidence.
return inputEvidence;
}
#if !FEATURE_PAL
[SecurityPermissionAttribute(SecurityAction.Assert, Unrestricted=true)]
public virtual ApplicationTrust DetermineApplicationTrust (Evidence applicationEvidence, Evidence activatorEvidence, TrustManagerContext context) {
if (applicationEvidence == null)
throw new ArgumentNullException("applicationEvidence");
// This method looks for a trust decision for the ActivationContext in three locations, in order
// of preference:
//
// 1. Supplied by the host in the AppDomainSetup. If the host supplied a decision this way, it
// will be in the applicationEvidence.
// 2. Reuse the ApplicationTrust from the current AppDomain
// 3. Ask the TrustManager for a trust decision
// get the activation context from the application evidence.
// The default HostSecurityManager does not examine the activatorEvidence
// but other security managers could use it to figure out the
// evidence of the domain attempting to activate the application.
IEnumerator enumerator = applicationEvidence.GetHostEnumerator();
ActivationArguments activationArgs = null;
ApplicationTrust appTrust = null;
while (enumerator.MoveNext())
{
if (activationArgs == null)
activationArgs = enumerator.Current as ActivationArguments;
if (appTrust == null)
appTrust = enumerator.Current as ApplicationTrust;
if (activationArgs != null && appTrust != null)
break;
}
if (activationArgs == null)
throw new ArgumentException(Environment.GetResourceString("Policy_MissingActivationContextInAppEvidence"));
ActivationContext actCtx = activationArgs.ActivationContext;
if (actCtx == null)
throw new ArgumentException(Environment.GetResourceString("Policy_MissingActivationContextInAppEvidence"));
// Make sure that any ApplicationTrust we find applies to the ActivationContext we're
// creating the new AppDomain for.
if (appTrust != null &&
!CmsUtils.CompareIdentities(appTrust.ApplicationIdentity, activationArgs.ApplicationIdentity, ApplicationVersionMatch.MatchExactVersion))
{
appTrust = null;
}
// If there was not a trust decision supplied in the Evidence, we can reuse the existing trust
// decision from this domain if its identity matches the ActivationContext of the new domain.
// Otherwise consult the TrustManager for a trust decision
if (appTrust == null)
{
if (AppDomain.CurrentDomain.ApplicationTrust != null &&
CmsUtils.CompareIdentities(AppDomain.CurrentDomain.ApplicationTrust.ApplicationIdentity, activationArgs.ApplicationIdentity, ApplicationVersionMatch.MatchExactVersion))
{
appTrust = AppDomain.CurrentDomain.ApplicationTrust;
}
else
{
appTrust = ApplicationSecurityManager.DetermineApplicationTrustInternal(actCtx, context);
}
}
// If the trust decision allows the application to run, then it should also have a permission set
// which is at least the permission set the application requested.
ApplicationSecurityInfo appRequest = new ApplicationSecurityInfo(actCtx);
if (appTrust != null &&
appTrust.IsApplicationTrustedToRun &&
!appRequest.DefaultRequestSet.IsSubsetOf(appTrust.DefaultGrantSet.PermissionSet))
{
throw new InvalidOperationException(Environment.GetResourceString("Policy_AppTrustMustGrantAppRequest"));
}
return appTrust;
}
#endif //!FEATURE_PAL
public virtual PermissionSet ResolvePolicy (Evidence evidence) {
return SecurityManager.PolicyManager.ResolveHelper(evidence);
}
}
}
// 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
- BrowserCapabilitiesCompiler.cs
- NamespaceCollection.cs
- ComponentResourceKey.cs
- TypographyProperties.cs
- Trace.cs
- Relationship.cs
- VirtualizedItemProviderWrapper.cs
- StringUtil.cs
- DefaultHttpHandler.cs
- DateTimeSerializationSection.cs
- SRGSCompiler.cs
- DataGridViewRowErrorTextNeededEventArgs.cs
- OutputScopeManager.cs
- WaitHandleCannotBeOpenedException.cs
- WhitespaceRuleLookup.cs
- BamlBinaryReader.cs
- ApplicationHost.cs
- RegistryKey.cs
- CacheForPrimitiveTypes.cs
- CompositionAdorner.cs
- CryptoApi.cs
- StrongNameKeyPair.cs
- Symbol.cs
- _SecureChannel.cs
- ProgressChangedEventArgs.cs
- ProfileServiceManager.cs
- PasswordBox.cs
- ToolStripStatusLabel.cs
- TextHidden.cs
- HWStack.cs
- CRYPTPROTECT_PROMPTSTRUCT.cs
- GridSplitterAutomationPeer.cs
- Point4D.cs
- ParagraphVisual.cs
- AttributeAction.cs
- SoapExtensionTypeElementCollection.cs
- DispatchRuntime.cs
- DataGridPagerStyle.cs
- Light.cs
- Parser.cs
- HttpGetProtocolReflector.cs
- SqlLiftIndependentRowExpressions.cs
- RemotingAttributes.cs
- RegexWriter.cs
- PointCollection.cs
- SqlCharStream.cs
- DataGridViewButtonCell.cs
- PrintPageEvent.cs
- ObjectNotFoundException.cs
- namescope.cs
- CodeBlockBuilder.cs
- DelegatingConfigHost.cs
- UrlPath.cs
- HMACRIPEMD160.cs
- ClientUtils.cs
- StyleBamlTreeBuilder.cs
- JsonUriDataContract.cs
- ResourceAttributes.cs
- LocalFileSettingsProvider.cs
- AssemblyResourceLoader.cs
- Int64.cs
- XmlCharacterData.cs
- InvokeWebService.cs
- UrlUtility.cs
- ParserStreamGeometryContext.cs
- CompensationParticipant.cs
- FixedElement.cs
- FactoryRecord.cs
- XmlTextReaderImplHelpers.cs
- WindowsStreamSecurityElement.cs
- Vector3DAnimationUsingKeyFrames.cs
- XsltOutput.cs
- FieldAccessException.cs
- HwndMouseInputProvider.cs
- Help.cs
- InvalidPropValue.cs
- ActivityBuilderXamlWriter.cs
- AppDomainUnloadedException.cs
- NestedContainer.cs
- AppDomainShutdownMonitor.cs
- DoubleAverageAggregationOperator.cs
- DocumentGridContextMenu.cs
- SkinBuilder.cs
- DataGridTextBox.cs
- NumberFormatInfo.cs
- ExitEventArgs.cs
- MgmtConfigurationRecord.cs
- PathNode.cs
- SecurityPermission.cs
- DockPatternIdentifiers.cs
- EventDescriptorCollection.cs
- EventMetadata.cs
- InstanceDataCollection.cs
- HostProtectionPermission.cs
- cookie.cs
- XamlTemplateSerializer.cs
- MobileTextWriter.cs
- WindowsTokenRoleProvider.cs
- BufferedWebEventProvider.cs
- OdbcDataAdapter.cs