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
- AffineTransform3D.cs
- DebugController.cs
- NavigatorInput.cs
- FileUtil.cs
- ConstraintStruct.cs
- SqlUserDefinedAggregateAttribute.cs
- InputLangChangeEvent.cs
- XmlSchemaComplexType.cs
- SByteConverter.cs
- SecUtil.cs
- PeerPresenceInfo.cs
- DataList.cs
- SchemaHelper.cs
- CodeGroup.cs
- BatchParser.cs
- TimeSpanSecondsOrInfiniteConverter.cs
- XmlILCommand.cs
- OdbcDataAdapter.cs
- PermissionRequestEvidence.cs
- MessageContractMemberAttribute.cs
- IgnorePropertiesAttribute.cs
- Rule.cs
- MetadataArtifactLoaderFile.cs
- RichTextBoxAutomationPeer.cs
- DefaultSerializationProviderAttribute.cs
- CodeMemberField.cs
- PrintingPermissionAttribute.cs
- DataControlReference.cs
- DataBoundLiteralControl.cs
- XmlLanguageConverter.cs
- EditingScopeUndoUnit.cs
- DescendantBaseQuery.cs
- BreakRecordTable.cs
- IImplicitResourceProvider.cs
- CommentEmitter.cs
- regiisutil.cs
- OdbcStatementHandle.cs
- StorageMappingItemCollection.cs
- ManifestSignedXml.cs
- RemoteWebConfigurationHostServer.cs
- Pen.cs
- SqlDataSourceConnectionPanel.cs
- TrustSection.cs
- EmissiveMaterial.cs
- SystemWebCachingSectionGroup.cs
- InvalidOperationException.cs
- DataGridViewMethods.cs
- ContentHostHelper.cs
- FileNameEditor.cs
- FileLogRecordEnumerator.cs
- GridSplitter.cs
- CmsInterop.cs
- PreviewPrintController.cs
- UnionCqlBlock.cs
- MonitorWrapper.cs
- XPathAncestorIterator.cs
- DbDataRecord.cs
- remotingproxy.cs
- AnnotationComponentManager.cs
- OuterGlowBitmapEffect.cs
- StateManagedCollection.cs
- LineUtil.cs
- _ListenerRequestStream.cs
- XhtmlBasicControlAdapter.cs
- Timer.cs
- FixUp.cs
- FormDocumentDesigner.cs
- DictionarySurrogate.cs
- ConsumerConnectionPointCollection.cs
- Point4D.cs
- UnsafeCollabNativeMethods.cs
- XmlSchemaDocumentation.cs
- FastPropertyAccessor.cs
- OleDbTransaction.cs
- UIElementIsland.cs
- MasterPage.cs
- EntityDataSourceContainerNameItem.cs
- XsltConvert.cs
- DefaultEvaluationContext.cs
- FontFamilyValueSerializer.cs
- CodeAttributeArgumentCollection.cs
- OdbcDataAdapter.cs
- BezierSegment.cs
- SortedDictionary.cs
- DataGridViewCellLinkedList.cs
- MethodRental.cs
- ValueTypeFieldReference.cs
- SqlInternalConnection.cs
- JavaScriptString.cs
- FlowDocumentScrollViewerAutomationPeer.cs
- CommandTreeTypeHelper.cs
- MailAddressCollection.cs
- InstalledFontCollection.cs
- SmtpCommands.cs
- EventHandlersStore.cs
- UnsafeNativeMethods.cs
- Clipboard.cs
- DefaultAssemblyResolver.cs
- SqlDataSourceRefreshSchemaForm.cs
- BuilderPropertyEntry.cs