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
- HttpPostedFileWrapper.cs
- FileStream.cs
- ClientRuntimeConfig.cs
- ObfuscateAssemblyAttribute.cs
- RegexRunnerFactory.cs
- PropertyTab.cs
- HandleScope.cs
- TabControlToolboxItem.cs
- SqlProvider.cs
- ReferencedType.cs
- XmlQueryCardinality.cs
- ToolStripProfessionalLowResolutionRenderer.cs
- PropertyCollection.cs
- ComponentEvent.cs
- TrackBar.cs
- QueryResult.cs
- SimpleMailWebEventProvider.cs
- ProfileManager.cs
- SqlDataSourceSelectingEventArgs.cs
- Types.cs
- StreamWriter.cs
- AlphabeticalEnumConverter.cs
- String.cs
- ServiceControllerDesigner.cs
- AttributedMetaModel.cs
- OpacityConverter.cs
- _StreamFramer.cs
- ThumbAutomationPeer.cs
- FormViewInsertEventArgs.cs
- HttpCapabilitiesBase.cs
- IndexerReference.cs
- DesignerVerbCollection.cs
- XmlSerializerVersionAttribute.cs
- KeyValuePair.cs
- DrawingBrush.cs
- XPathNodePointer.cs
- RuntimeConfigurationRecord.cs
- Scripts.cs
- EntityDataSourceStatementEditor.cs
- XmlSchemaAny.cs
- ClientEventManager.cs
- Avt.cs
- SessionStateModule.cs
- EditCommandColumn.cs
- ObjectItemAssemblyLoader.cs
- SubMenuStyleCollection.cs
- BamlLocalizationDictionary.cs
- PageRouteHandler.cs
- CodeDirectoryCompiler.cs
- OpenCollectionAsyncResult.cs
- PropertyGridEditorPart.cs
- HtmlControlDesigner.cs
- DateTimeEditor.cs
- AlphabetConverter.cs
- WaitForChangedResult.cs
- TextFindEngine.cs
- BooleanToVisibilityConverter.cs
- SystemIcons.cs
- Argument.cs
- NativeCppClassAttribute.cs
- RoleManagerSection.cs
- TextEndOfSegment.cs
- CommandDevice.cs
- PtsPage.cs
- typedescriptorpermissionattribute.cs
- DataSourceCache.cs
- RenderDataDrawingContext.cs
- ContentPosition.cs
- HtmlTextArea.cs
- PropertyGeneratedEventArgs.cs
- TagPrefixCollection.cs
- ComboBoxAutomationPeer.cs
- ArglessEventHandlerProxy.cs
- CustomErrorCollection.cs
- Columns.cs
- EventBindingService.cs
- RijndaelManaged.cs
- SqlDataSourceStatusEventArgs.cs
- VariableQuery.cs
- GridEntryCollection.cs
- XomlDesignerLoader.cs
- _KerberosClient.cs
- InsufficientMemoryException.cs
- NodeFunctions.cs
- WhiteSpaceTrimStringConverter.cs
- pingexception.cs
- HtmlInputReset.cs
- RelationshipFixer.cs
- XmlRootAttribute.cs
- DesignerValidationSummaryAdapter.cs
- WindowsFormsSectionHandler.cs
- RemoveStoryboard.cs
- WebExceptionStatus.cs
- HostingEnvironmentWrapper.cs
- ComboBox.cs
- ServiceSecurityAuditElement.cs
- XmlException.cs
- Baml2006ReaderFrame.cs
- InfiniteTimeSpanConverter.cs
- X509Certificate.cs