Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / clr / src / BCL / System / Security / Policy / AppDomainEvidenceFactory.cs / 1305376 / AppDomainEvidenceFactory.cs
// ==++==
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
// ==--==
using System;
using System.Collections.Generic;
using System.Diagnostics.Contracts;
using System.Reflection;
namespace System.Security.Policy
{
///
/// Factory class which creates evidence on demand for an AppDomain
///
internal sealed class AppDomainEvidenceFactory : IRuntimeEvidenceFactory
{
private AppDomain m_targetDomain;
private Evidence m_entryPointEvidence;
internal AppDomainEvidenceFactory(AppDomain target)
{
Contract.Assert(target != null);
Contract.Assert(target == AppDomain.CurrentDomain, "AppDomainEvidenceFactory should not be used across domains.");
m_targetDomain = target;
}
///
/// AppDomain this factory generates evidence for
///
public IEvidenceFactory Target
{
get { return m_targetDomain; }
}
///
/// Return any evidence supplied by the AppDomain itself
///
public IEnumerable GetFactorySuppliedEvidence()
{
// AppDomains do not contain serialized evidence
return new EvidenceBase[] { };
}
///
/// Generate evidence on demand for an AppDomain
///
[SecuritySafeCritical]
public EvidenceBase GenerateEvidence(Type evidenceType)
{
// For v1.x compatibility, the default AppDomain has the same evidence as the entry point
// assembly. Since other AppDomains inherit their evidence from the default AppDomain by
// default, they also use the entry point assembly.
BCLDebug.Assert(m_targetDomain == AppDomain.CurrentDomain, "AppDomainEvidenceFactory should not be used across domains.");
if (m_targetDomain.IsDefaultAppDomain())
{
// If we don't already know the evidence for the entry point assembly, get that now. If we
// have a RuntimeAssembly go directly to its EvidenceNoDemand property to avoid the full
// demand that it will do on access to its Evidence property.
if (m_entryPointEvidence == null)
{
Assembly entryAssembly = Assembly.GetEntryAssembly();
RuntimeAssembly entryRuntimeAssembly = entryAssembly as RuntimeAssembly;
if (entryRuntimeAssembly != null)
{
m_entryPointEvidence = entryRuntimeAssembly.EvidenceNoDemand.Clone();
}
else if (entryAssembly != null)
{
m_entryPointEvidence = entryAssembly.Evidence;
}
}
// If the entry point assembly provided evidence, then we use that for the AppDomain
if (m_entryPointEvidence != null)
{
return m_entryPointEvidence.GetHostEvidence(evidenceType);
}
}
else
{
// If we're not the default domain, then we should inherit our evidence from the default
// domain -- so ask it what evidence it has of this type.
AppDomain defaultDomain = AppDomain.GetDefaultDomain();
return defaultDomain.GetHostEvidence(evidenceType);
}
// AppDomains do not generate any evidence on demand
return null;
}
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// ==++==
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
// ==--==
using System;
using System.Collections.Generic;
using System.Diagnostics.Contracts;
using System.Reflection;
namespace System.Security.Policy
{
///
/// Factory class which creates evidence on demand for an AppDomain
///
internal sealed class AppDomainEvidenceFactory : IRuntimeEvidenceFactory
{
private AppDomain m_targetDomain;
private Evidence m_entryPointEvidence;
internal AppDomainEvidenceFactory(AppDomain target)
{
Contract.Assert(target != null);
Contract.Assert(target == AppDomain.CurrentDomain, "AppDomainEvidenceFactory should not be used across domains.");
m_targetDomain = target;
}
///
/// AppDomain this factory generates evidence for
///
public IEvidenceFactory Target
{
get { return m_targetDomain; }
}
///
/// Return any evidence supplied by the AppDomain itself
///
public IEnumerable GetFactorySuppliedEvidence()
{
// AppDomains do not contain serialized evidence
return new EvidenceBase[] { };
}
///
/// Generate evidence on demand for an AppDomain
///
[SecuritySafeCritical]
public EvidenceBase GenerateEvidence(Type evidenceType)
{
// For v1.x compatibility, the default AppDomain has the same evidence as the entry point
// assembly. Since other AppDomains inherit their evidence from the default AppDomain by
// default, they also use the entry point assembly.
BCLDebug.Assert(m_targetDomain == AppDomain.CurrentDomain, "AppDomainEvidenceFactory should not be used across domains.");
if (m_targetDomain.IsDefaultAppDomain())
{
// If we don't already know the evidence for the entry point assembly, get that now. If we
// have a RuntimeAssembly go directly to its EvidenceNoDemand property to avoid the full
// demand that it will do on access to its Evidence property.
if (m_entryPointEvidence == null)
{
Assembly entryAssembly = Assembly.GetEntryAssembly();
RuntimeAssembly entryRuntimeAssembly = entryAssembly as RuntimeAssembly;
if (entryRuntimeAssembly != null)
{
m_entryPointEvidence = entryRuntimeAssembly.EvidenceNoDemand.Clone();
}
else if (entryAssembly != null)
{
m_entryPointEvidence = entryAssembly.Evidence;
}
}
// If the entry point assembly provided evidence, then we use that for the AppDomain
if (m_entryPointEvidence != null)
{
return m_entryPointEvidence.GetHostEvidence(evidenceType);
}
}
else
{
// If we're not the default domain, then we should inherit our evidence from the default
// domain -- so ask it what evidence it has of this type.
AppDomain defaultDomain = AppDomain.GetDefaultDomain();
return defaultDomain.GetHostEvidence(evidenceType);
}
// AppDomains do not generate any evidence on demand
return null;
}
}
}
// 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
- ValidationEventArgs.cs
- CompareValidator.cs
- PageRequestManager.cs
- MdiWindowListItemConverter.cs
- RuntimeComponentFilter.cs
- DesignTimeTemplateParser.cs
- RadialGradientBrush.cs
- LoadMessageLogger.cs
- KeyInterop.cs
- XmlNodeWriter.cs
- NamespaceCollection.cs
- PermissionRequestEvidence.cs
- DrawingAttributesDefaultValueFactory.cs
- CompoundFileReference.cs
- SecUtil.cs
- BaseUriHelper.cs
- Slider.cs
- LookupNode.cs
- DbProviderServices.cs
- DeferredTextReference.cs
- UserControlParser.cs
- Publisher.cs
- GeneralTransform3DGroup.cs
- ValueQuery.cs
- TraceHandler.cs
- FastEncoderWindow.cs
- listviewsubitemcollectioneditor.cs
- Command.cs
- GridViewSelectEventArgs.cs
- lengthconverter.cs
- MobileControlsSectionHelper.cs
- AutomationPatternInfo.cs
- TextEmbeddedObject.cs
- StylusPointDescription.cs
- GridViewCancelEditEventArgs.cs
- SymLanguageType.cs
- ConfigurationLoader.cs
- UInt32Converter.cs
- SymbolMethod.cs
- TextDecoration.cs
- Header.cs
- XmlWriter.cs
- TargetFrameworkAttribute.cs
- SafeFileMappingHandle.cs
- NonBatchDirectoryCompiler.cs
- QilTypeChecker.cs
- SafeThemeHandle.cs
- COM2Properties.cs
- MetabaseServerConfig.cs
- XmlSchemaSequence.cs
- XPathBinder.cs
- MembershipPasswordException.cs
- ScrollProperties.cs
- ArgumentOutOfRangeException.cs
- CustomActivityDesigner.cs
- StorageInfo.cs
- SslStream.cs
- PathFigureCollection.cs
- Vector3DCollectionValueSerializer.cs
- LocatorPart.cs
- ConfigurationStrings.cs
- PartialToken.cs
- MetabaseSettings.cs
- FileNotFoundException.cs
- SettingsBase.cs
- InheritanceRules.cs
- ImageCodecInfoPrivate.cs
- OutputCacheSettingsSection.cs
- SerializerDescriptor.cs
- InputMethodStateChangeEventArgs.cs
- HttpClientCertificate.cs
- cookieexception.cs
- TextDecorationCollection.cs
- BinarySerializer.cs
- WizardStepBase.cs
- AssemblyName.cs
- PrivilegedConfigurationManager.cs
- Speller.cs
- WebPartRestoreVerb.cs
- StaticSiteMapProvider.cs
- XmlNamespaceDeclarationsAttribute.cs
- CookieParameter.cs
- XsltSettings.cs
- StringOutput.cs
- TrustManagerMoreInformation.cs
- RegexCaptureCollection.cs
- VisualBasicSettingsHandler.cs
- AncillaryOps.cs
- TabOrder.cs
- WindowsAuthenticationModule.cs
- QueryOpeningEnumerator.cs
- ViewBase.cs
- XmlWrappingReader.cs
- ArgIterator.cs
- Bits.cs
- CharacterBuffer.cs
- Baml2006KnownTypes.cs
- PropertyOrder.cs
- ResourceDisplayNameAttribute.cs
- QueryCursorEventArgs.cs