Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / whidbey / NetFXspW7 / ndp / clr / src / BCL / System / Security / Policy / FirstMatchCodeGroup.cs / 1 / FirstMatchCodeGroup.cs
// ==++==
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
// ==--==
// FirstMatchCodeGroup.cs
//
// Representation for code groups used for the policy mechanism
//
namespace System.Security.Policy {
using System;
using System.Security;
using System.Security.Util;
using System.Collections;
[Serializable]
[System.Runtime.InteropServices.ComVisible(true)]
sealed public class FirstMatchCodeGroup : CodeGroup
{
internal FirstMatchCodeGroup()
: base()
{
}
public FirstMatchCodeGroup( IMembershipCondition membershipCondition, PolicyStatement policy )
: base( membershipCondition, policy )
{
}
public override PolicyStatement Resolve( Evidence evidence )
{
if (evidence == null)
throw new ArgumentNullException("evidence");
object usedEvidence = null;
if (PolicyManager.CheckMembershipCondition(MembershipCondition,
evidence,
out usedEvidence))
{
PolicyStatement childPolicy = null;
IEnumerator enumerator = this.Children.GetEnumerator();
while (enumerator.MoveNext())
{
childPolicy = PolicyManager.ResolveCodeGroup(enumerator.Current as CodeGroup,
evidence);
// If the child has a policy, we are done.
if (childPolicy != null)
{
break;
}
}
// If any delay-evidence was used to generate this grant set, then we need to keep track of
// that for potentially later forcing it to be verified.
IDelayEvaluatedEvidence delayEvidence = usedEvidence as IDelayEvaluatedEvidence;
bool delayEvidenceNeedsVerification = delayEvidence != null && !delayEvidence.IsVerified;
PolicyStatement thisPolicy = this.PolicyStatement; // PolicyStatement getter makes a copy for us
if (thisPolicy == null)
{
// We didn't add any permissions, but we enabled our children to be evaluated, and
// therefore its grant set is dependent on any of our delay evidence.
if (delayEvidenceNeedsVerification)
{
childPolicy = childPolicy.Copy();
childPolicy.AddDependentEvidence(delayEvidence);
}
return childPolicy;
}
else if (childPolicy != null)
{
// Combine the child and this policy and return it.
PolicyStatement combined = thisPolicy.Copy();
if (delayEvidenceNeedsVerification)
{
combined.AddDependentEvidence(delayEvidence);
}
combined.InplaceUnion(childPolicy);
return combined;
}
else
{
// Otherwise we just copy the this policy.
if (delayEvidenceNeedsVerification)
{
thisPolicy.AddDependentEvidence(delayEvidence);
}
return thisPolicy;
}
}
else
{
return null;
}
}
public override CodeGroup ResolveMatchingCodeGroups( Evidence evidence )
{
if (evidence == null)
throw new ArgumentNullException("evidence");
if (this.MembershipCondition.Check( evidence ))
{
CodeGroup retGroup = this.Copy();
retGroup.Children = new ArrayList();
IEnumerator enumerator = this.Children.GetEnumerator();
while (enumerator.MoveNext())
{
CodeGroup matchingGroups = ((CodeGroup)enumerator.Current).ResolveMatchingCodeGroups( evidence );
// If the child has a policy, we are done.
if (matchingGroups != null)
{
retGroup.AddChild( matchingGroups );
break;
}
}
return retGroup;
}
else
{
return null;
}
}
public override CodeGroup Copy()
{
FirstMatchCodeGroup group = new FirstMatchCodeGroup();
group.MembershipCondition = this.MembershipCondition;
group.PolicyStatement = this.PolicyStatement;
group.Name = this.Name;
group.Description = this.Description;
IEnumerator enumerator = this.Children.GetEnumerator();
while (enumerator.MoveNext())
{
group.AddChild( (CodeGroup)enumerator.Current );
}
return group;
}
public override String MergeLogic
{
get
{
return Environment.GetResourceString( "MergeLogic_FirstMatch" );
}
}
internal override String GetTypeName()
{
return "System.Security.Policy.FirstMatchCodeGroup";
}
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// ==++==
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
// ==--==
// FirstMatchCodeGroup.cs
//
// Representation for code groups used for the policy mechanism
//
namespace System.Security.Policy {
using System;
using System.Security;
using System.Security.Util;
using System.Collections;
[Serializable]
[System.Runtime.InteropServices.ComVisible(true)]
sealed public class FirstMatchCodeGroup : CodeGroup
{
internal FirstMatchCodeGroup()
: base()
{
}
public FirstMatchCodeGroup( IMembershipCondition membershipCondition, PolicyStatement policy )
: base( membershipCondition, policy )
{
}
public override PolicyStatement Resolve( Evidence evidence )
{
if (evidence == null)
throw new ArgumentNullException("evidence");
object usedEvidence = null;
if (PolicyManager.CheckMembershipCondition(MembershipCondition,
evidence,
out usedEvidence))
{
PolicyStatement childPolicy = null;
IEnumerator enumerator = this.Children.GetEnumerator();
while (enumerator.MoveNext())
{
childPolicy = PolicyManager.ResolveCodeGroup(enumerator.Current as CodeGroup,
evidence);
// If the child has a policy, we are done.
if (childPolicy != null)
{
break;
}
}
// If any delay-evidence was used to generate this grant set, then we need to keep track of
// that for potentially later forcing it to be verified.
IDelayEvaluatedEvidence delayEvidence = usedEvidence as IDelayEvaluatedEvidence;
bool delayEvidenceNeedsVerification = delayEvidence != null && !delayEvidence.IsVerified;
PolicyStatement thisPolicy = this.PolicyStatement; // PolicyStatement getter makes a copy for us
if (thisPolicy == null)
{
// We didn't add any permissions, but we enabled our children to be evaluated, and
// therefore its grant set is dependent on any of our delay evidence.
if (delayEvidenceNeedsVerification)
{
childPolicy = childPolicy.Copy();
childPolicy.AddDependentEvidence(delayEvidence);
}
return childPolicy;
}
else if (childPolicy != null)
{
// Combine the child and this policy and return it.
PolicyStatement combined = thisPolicy.Copy();
if (delayEvidenceNeedsVerification)
{
combined.AddDependentEvidence(delayEvidence);
}
combined.InplaceUnion(childPolicy);
return combined;
}
else
{
// Otherwise we just copy the this policy.
if (delayEvidenceNeedsVerification)
{
thisPolicy.AddDependentEvidence(delayEvidence);
}
return thisPolicy;
}
}
else
{
return null;
}
}
public override CodeGroup ResolveMatchingCodeGroups( Evidence evidence )
{
if (evidence == null)
throw new ArgumentNullException("evidence");
if (this.MembershipCondition.Check( evidence ))
{
CodeGroup retGroup = this.Copy();
retGroup.Children = new ArrayList();
IEnumerator enumerator = this.Children.GetEnumerator();
while (enumerator.MoveNext())
{
CodeGroup matchingGroups = ((CodeGroup)enumerator.Current).ResolveMatchingCodeGroups( evidence );
// If the child has a policy, we are done.
if (matchingGroups != null)
{
retGroup.AddChild( matchingGroups );
break;
}
}
return retGroup;
}
else
{
return null;
}
}
public override CodeGroup Copy()
{
FirstMatchCodeGroup group = new FirstMatchCodeGroup();
group.MembershipCondition = this.MembershipCondition;
group.PolicyStatement = this.PolicyStatement;
group.Name = this.Name;
group.Description = this.Description;
IEnumerator enumerator = this.Children.GetEnumerator();
while (enumerator.MoveNext())
{
group.AddChild( (CodeGroup)enumerator.Current );
}
return group;
}
public override String MergeLogic
{
get
{
return Environment.GetResourceString( "MergeLogic_FirstMatch" );
}
}
internal override String GetTypeName()
{
return "System.Security.Policy.FirstMatchCodeGroup";
}
}
}
// 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
- IteratorFilter.cs
- PeerTransportListenAddressValidatorAttribute.cs
- PartitionResolver.cs
- TagPrefixCollection.cs
- CriticalHandle.cs
- TimeStampChecker.cs
- MoveSizeWinEventHandler.cs
- PathGeometry.cs
- ProjectionCamera.cs
- NestedContainer.cs
- MissingSatelliteAssemblyException.cs
- GridViewUpdatedEventArgs.cs
- BuildProvider.cs
- FrameworkContextData.cs
- LogicalExpr.cs
- NativeMethods.cs
- RewritingSimplifier.cs
- HtmlLinkAdapter.cs
- ImmutableAssemblyCacheEntry.cs
- ExpandSegment.cs
- TCPListener.cs
- SqlRewriteScalarSubqueries.cs
- Icon.cs
- MailDefinitionBodyFileNameEditor.cs
- PenThreadWorker.cs
- ServiceHttpModule.cs
- InnerItemCollectionView.cs
- IssuanceLicense.cs
- ParserOptions.cs
- XmlSchemaAppInfo.cs
- FixedSOMTableCell.cs
- CqlIdentifiers.cs
- TypographyProperties.cs
- AdornerDecorator.cs
- CacheVirtualItemsEvent.cs
- XmlBinaryReaderSession.cs
- OrderedDictionary.cs
- X509CertificateCollection.cs
- CustomErrorsSection.cs
- ApplicationServiceManager.cs
- _emptywebproxy.cs
- SafeEventLogWriteHandle.cs
- DrawingContextDrawingContextWalker.cs
- Frame.cs
- ApplicationProxyInternal.cs
- XPathDocumentIterator.cs
- EllipseGeometry.cs
- CryptoKeySecurity.cs
- ADConnectionHelper.cs
- CompiledAction.cs
- XmlNamedNodeMap.cs
- DataColumnCollection.cs
- PackagePartCollection.cs
- Transform.cs
- ImageKeyConverter.cs
- FakeModelItemImpl.cs
- EventDescriptorCollection.cs
- SqlProfileProvider.cs
- SQLDecimalStorage.cs
- AttachedPropertyMethodSelector.cs
- TypeValidationEventArgs.cs
- Int32Animation.cs
- BindingListCollectionView.cs
- ListViewUpdatedEventArgs.cs
- BaseCodePageEncoding.cs
- RotateTransform3D.cs
- SkinIDTypeConverter.cs
- GroupQuery.cs
- StringFreezingAttribute.cs
- PropertyTab.cs
- QueryOperationResponseOfT.cs
- DataGridState.cs
- OraclePermission.cs
- DataGridCommandEventArgs.cs
- XamlNamespaceHelper.cs
- ConcurrencyMode.cs
- ContentType.cs
- PreviewPageInfo.cs
- Validator.cs
- InputLanguageCollection.cs
- ReadOnlyHierarchicalDataSource.cs
- MappingItemCollection.cs
- CompilationRelaxations.cs
- SynchronousReceiveElement.cs
- CodeParameterDeclarationExpressionCollection.cs
- DbTransaction.cs
- DrawingBrush.cs
- ToolStripRendererSwitcher.cs
- HttpChannelHelper.cs
- SubclassTypeValidator.cs
- FieldToken.cs
- BooleanConverter.cs
- InstanceLockTracking.cs
- mansign.cs
- EntityDataSourceReferenceGroup.cs
- LinkDescriptor.cs
- MsmqBindingBase.cs
- PlainXmlWriter.cs
- TableAdapterManagerNameHandler.cs
- TextTreeObjectNode.cs