Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / clr / src / BCL / System / Security / Policy / EvidenceBase.cs / 1305376 / EvidenceBase.cs
// ==++== // // Copyright (c) Microsoft Corporation. All rights reserved. // // ==--== //[....] // using System; using System.Collections; using System.Collections.Generic; using System.Diagnostics.Contracts; using System.IO; using System.Runtime.InteropServices; #if FEATURE_SERIALIZATION using System.Runtime.Serialization.Formatters.Binary; #endif // FEATURE_SERIALIZATION using System.Security.Permissions; namespace System.Security.Policy { ////// Base class from which all objects to be used as Evidence must derive /// [ComVisible(true)] [Serializable] public abstract class EvidenceBase { protected EvidenceBase() { #if FEATURE_SERIALIZATION // All objects to be used as evidence must be serializable. Make sure that any derived types // are marked serializable to enforce this, since the attribute does not inherit down to derived // classes. if (!GetType().IsSerializable) { throw new InvalidOperationException(Environment.GetResourceString("Policy_EvidenceMustBeSerializable")); } #endif // FEATURE_SERIALIZATION } ////// Since legacy evidence objects would be cloned by being serialized, the default implementation /// of EvidenceBase will do the same. /// [SecurityPermission(SecurityAction.Assert, SerializationFormatter = true)] [SecuritySafeCritical] public virtual EvidenceBase Clone() { #if FEATURE_SERIALIZATION using (MemoryStream memoryStream = new MemoryStream()) { BinaryFormatter formatter = new BinaryFormatter(); formatter.Serialize(memoryStream, this); memoryStream.Position = 0; return formatter.Deserialize(memoryStream) as EvidenceBase; } #else // !FEATURE_SERIALIZATION throw new NotImplementedException(); #endif // FEATURE_SERIALIZATION } } ////// Interface for types which wrap Whidbey evidence objects for compatibility with v4 evidence rules /// internal interface ILegacyEvidenceAdapter { object EvidenceObject { get; } Type EvidenceType { get; } } ////// Wrapper class to hold legacy evidence objects which do not derive from EvidenceBase, and allow /// them to be held in the Evidence collection which expects to maintain lists of EvidenceBase only /// [Serializable] internal sealed class LegacyEvidenceWrapper : EvidenceBase, ILegacyEvidenceAdapter { private object m_legacyEvidence; internal LegacyEvidenceWrapper(object legacyEvidence) { Contract.Assert(legacyEvidence != null); Contract.Assert(legacyEvidence.GetType() != typeof(EvidenceBase), "Attempt to wrap an EvidenceBase in a LegacyEvidenceWrapper"); Contract.Assert(legacyEvidence.GetType().IsSerializable, "legacyEvidence.GetType().IsSerializable"); m_legacyEvidence = legacyEvidence; } public object EvidenceObject { get { return m_legacyEvidence; } } public Type EvidenceType { get { return m_legacyEvidence.GetType(); } } public override bool Equals(object obj) { return m_legacyEvidence.Equals(obj); } public override int GetHashCode() { return m_legacyEvidence.GetHashCode(); } } ////// Pre-v4 versions of the runtime allow multiple pieces of evidence that all have the same type. /// This type wraps those evidence objects into a single type of list, allowing legacy code to continue /// to work with the Evidence collection that does not expect multiple evidences of the same type. /// /// This may not be limited to LegacyEvidenceWrappers, since it's valid for legacy code to add multiple /// objects of built-in evidence to an Evidence collection. The built-in evidence now derives from /// EvienceObject, so when the legacy code runs on v4, it may end up attempting to add multiple /// Hash evidences for intsance. /// [Serializable] internal sealed class LegacyEvidenceList : EvidenceBase, IEnumerable, ILegacyEvidenceAdapter { private List m_legacyEvidenceList = new List (); public object EvidenceObject { get { // We'll choose the first item in the list to represent us if we're forced to return only // one object. This can occur if multiple pieces of evidence are added via the legacy APIs, // and then the new APIs are used to retrieve that evidence. return m_legacyEvidenceList.Count > 0 ? m_legacyEvidenceList[0] : null; } } public Type EvidenceType { get { Contract.Assert(m_legacyEvidenceList.Count > 0, "No items in LegacyEvidenceList, cannot tell what type they are"); ILegacyEvidenceAdapter adapter = m_legacyEvidenceList[0] as ILegacyEvidenceAdapter; return adapter == null ? m_legacyEvidenceList[0].GetType() : adapter.EvidenceType; } } public void Add(EvidenceBase evidence) { Contract.Assert(evidence != null); Contract.Assert(m_legacyEvidenceList.Count == 0 || EvidenceType == evidence.GetType() || (evidence is LegacyEvidenceWrapper && (evidence as LegacyEvidenceWrapper).EvidenceType == EvidenceType), "LegacyEvidenceList must be ----geonous"); Contract.Assert(evidence.GetType() != typeof(LegacyEvidenceList), "Attempt to add a legacy evidence list to another legacy evidence list"); m_legacyEvidenceList.Add(evidence); } public IEnumerator GetEnumerator() { return m_legacyEvidenceList.GetEnumerator(); } IEnumerator System.Collections.IEnumerable.GetEnumerator() { return m_legacyEvidenceList.GetEnumerator(); } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // ==++== // // Copyright (c) Microsoft Corporation. All rights reserved. // // ==--== // [....] // using System; using System.Collections; using System.Collections.Generic; using System.Diagnostics.Contracts; using System.IO; using System.Runtime.InteropServices; #if FEATURE_SERIALIZATION using System.Runtime.Serialization.Formatters.Binary; #endif // FEATURE_SERIALIZATION using System.Security.Permissions; namespace System.Security.Policy { ////// Base class from which all objects to be used as Evidence must derive /// [ComVisible(true)] [Serializable] public abstract class EvidenceBase { protected EvidenceBase() { #if FEATURE_SERIALIZATION // All objects to be used as evidence must be serializable. Make sure that any derived types // are marked serializable to enforce this, since the attribute does not inherit down to derived // classes. if (!GetType().IsSerializable) { throw new InvalidOperationException(Environment.GetResourceString("Policy_EvidenceMustBeSerializable")); } #endif // FEATURE_SERIALIZATION } ////// Since legacy evidence objects would be cloned by being serialized, the default implementation /// of EvidenceBase will do the same. /// [SecurityPermission(SecurityAction.Assert, SerializationFormatter = true)] [SecuritySafeCritical] public virtual EvidenceBase Clone() { #if FEATURE_SERIALIZATION using (MemoryStream memoryStream = new MemoryStream()) { BinaryFormatter formatter = new BinaryFormatter(); formatter.Serialize(memoryStream, this); memoryStream.Position = 0; return formatter.Deserialize(memoryStream) as EvidenceBase; } #else // !FEATURE_SERIALIZATION throw new NotImplementedException(); #endif // FEATURE_SERIALIZATION } } ////// Interface for types which wrap Whidbey evidence objects for compatibility with v4 evidence rules /// internal interface ILegacyEvidenceAdapter { object EvidenceObject { get; } Type EvidenceType { get; } } ////// Wrapper class to hold legacy evidence objects which do not derive from EvidenceBase, and allow /// them to be held in the Evidence collection which expects to maintain lists of EvidenceBase only /// [Serializable] internal sealed class LegacyEvidenceWrapper : EvidenceBase, ILegacyEvidenceAdapter { private object m_legacyEvidence; internal LegacyEvidenceWrapper(object legacyEvidence) { Contract.Assert(legacyEvidence != null); Contract.Assert(legacyEvidence.GetType() != typeof(EvidenceBase), "Attempt to wrap an EvidenceBase in a LegacyEvidenceWrapper"); Contract.Assert(legacyEvidence.GetType().IsSerializable, "legacyEvidence.GetType().IsSerializable"); m_legacyEvidence = legacyEvidence; } public object EvidenceObject { get { return m_legacyEvidence; } } public Type EvidenceType { get { return m_legacyEvidence.GetType(); } } public override bool Equals(object obj) { return m_legacyEvidence.Equals(obj); } public override int GetHashCode() { return m_legacyEvidence.GetHashCode(); } } ////// Pre-v4 versions of the runtime allow multiple pieces of evidence that all have the same type. /// This type wraps those evidence objects into a single type of list, allowing legacy code to continue /// to work with the Evidence collection that does not expect multiple evidences of the same type. /// /// This may not be limited to LegacyEvidenceWrappers, since it's valid for legacy code to add multiple /// objects of built-in evidence to an Evidence collection. The built-in evidence now derives from /// EvienceObject, so when the legacy code runs on v4, it may end up attempting to add multiple /// Hash evidences for intsance. /// [Serializable] internal sealed class LegacyEvidenceList : EvidenceBase, IEnumerable, ILegacyEvidenceAdapter { private List m_legacyEvidenceList = new List (); public object EvidenceObject { get { // We'll choose the first item in the list to represent us if we're forced to return only // one object. This can occur if multiple pieces of evidence are added via the legacy APIs, // and then the new APIs are used to retrieve that evidence. return m_legacyEvidenceList.Count > 0 ? m_legacyEvidenceList[0] : null; } } public Type EvidenceType { get { Contract.Assert(m_legacyEvidenceList.Count > 0, "No items in LegacyEvidenceList, cannot tell what type they are"); ILegacyEvidenceAdapter adapter = m_legacyEvidenceList[0] as ILegacyEvidenceAdapter; return adapter == null ? m_legacyEvidenceList[0].GetType() : adapter.EvidenceType; } } public void Add(EvidenceBase evidence) { Contract.Assert(evidence != null); Contract.Assert(m_legacyEvidenceList.Count == 0 || EvidenceType == evidence.GetType() || (evidence is LegacyEvidenceWrapper && (evidence as LegacyEvidenceWrapper).EvidenceType == EvidenceType), "LegacyEvidenceList must be ----geonous"); Contract.Assert(evidence.GetType() != typeof(LegacyEvidenceList), "Attempt to add a legacy evidence list to another legacy evidence list"); m_legacyEvidenceList.Add(evidence); } public IEnumerator GetEnumerator() { return m_legacyEvidenceList.GetEnumerator(); } IEnumerator System.Collections.IEnumerable.GetEnumerator() { return m_legacyEvidenceList.GetEnumerator(); } } } // 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
- TableRowGroup.cs
- Trigger.cs
- HttpListener.cs
- PartialCachingAttribute.cs
- MemberInfoSerializationHolder.cs
- CacheDependency.cs
- ScrollableControlDesigner.cs
- EdmSchemaError.cs
- GetIsBrowserClientRequest.cs
- SafeNativeMethods.cs
- TagPrefixAttribute.cs
- OnOperation.cs
- Point3DKeyFrameCollection.cs
- UnmanagedMemoryStream.cs
- FolderBrowserDialogDesigner.cs
- ComplexBindingPropertiesAttribute.cs
- FileCodeGroup.cs
- TypeToken.cs
- EventRouteFactory.cs
- ObjectStateEntryDbDataRecord.cs
- SeparatorAutomationPeer.cs
- ContentElement.cs
- NumericUpDownAccelerationCollection.cs
- DataBinder.cs
- Stream.cs
- ContentElement.cs
- VectorAnimation.cs
- DoubleCollectionValueSerializer.cs
- CompilerLocalReference.cs
- WorkerRequest.cs
- Win32Native.cs
- ScriptingRoleServiceSection.cs
- ApplicationManager.cs
- IconBitmapDecoder.cs
- BamlStream.cs
- BitmapVisualManager.cs
- RectAnimationClockResource.cs
- EmbossBitmapEffect.cs
- SendMailErrorEventArgs.cs
- ContentFilePart.cs
- TextDecorationCollectionConverter.cs
- ClientBuildManagerCallback.cs
- SoapAttributes.cs
- DataGridTablesFactory.cs
- ChangePassword.cs
- TextEvent.cs
- Exception.cs
- TextBoxRenderer.cs
- WebPartEditVerb.cs
- Image.cs
- ScrollData.cs
- SecurityTokenResolver.cs
- TreeView.cs
- XPathAncestorIterator.cs
- EventRoute.cs
- FlowNode.cs
- RecommendedAsConfigurableAttribute.cs
- AliasGenerator.cs
- TextCharacters.cs
- WorkflowDesignerMessageFilter.cs
- CursorConverter.cs
- QueryConverter.cs
- RuleElement.cs
- TabItem.cs
- DispatcherExceptionFilterEventArgs.cs
- BinaryMessageFormatter.cs
- PeerApplicationLaunchInfo.cs
- XslCompiledTransform.cs
- unsafenativemethodsother.cs
- DataGridTable.cs
- DockAndAnchorLayout.cs
- PeerPresenceInfo.cs
- ParameterBuilder.cs
- ToolStripRendererSwitcher.cs
- MetadataStore.cs
- EdmComplexTypeAttribute.cs
- MapPathBasedVirtualPathProvider.cs
- SamlAuthorizationDecisionClaimResource.cs
- ConnectionInterfaceCollection.cs
- TraceSection.cs
- AuthenticationModuleElement.cs
- CardSpaceSelector.cs
- CollectionBuilder.cs
- Config.cs
- MemberPath.cs
- SqlInternalConnectionSmi.cs
- SizeConverter.cs
- SelfIssuedAuthProofToken.cs
- LogPolicy.cs
- DataList.cs
- ResourcePropertyMemberCodeDomSerializer.cs
- InputGestureCollection.cs
- mediaeventargs.cs
- BamlRecordHelper.cs
- PageAsyncTaskManager.cs
- PassportIdentity.cs
- WmlTextViewAdapter.cs
- RankException.cs
- EventlogProvider.cs
- Pkcs7Signer.cs