Code:
/ FX-1434 / FX-1434 / 1.0 / untmp / whidbey / REDBITS / ndp / clr / src / BCL / System / Security / Permissions / ZoneIdentityPermission.cs / 1 / ZoneIdentityPermission.cs
// ==++==
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
// ==--==
// ZoneIdentityPermission.cs
//
namespace System.Security.Permissions
{
using System;
using SecurityElement = System.Security.SecurityElement;
using System.Globalization;
using System.Runtime.Serialization;
[System.Runtime.InteropServices.ComVisible(true)]
[Serializable()] sealed public class ZoneIdentityPermission : CodeAccessPermission, IBuiltInPermission
{
//------------------------------------------------------
//
// PRIVATE STATE DATA
//
//-----------------------------------------------------
// Zone Enum Flag
// ----- ----- -----
// NoZone -1 0x00
// MyComputer 0 0x01 (1 << 0)
// Intranet 1 0x02 (1 << 1)
// Trusted 2 0x04 (1 << 2)
// Internet 3 0x08 (1 << 3)
// Untrusted 4 0x10 (1 << 4)
private const uint AllZones = 0x1f;
[OptionalField(VersionAdded = 2)]
private uint m_zones;
// This field will be populated only for non X-AD scenarios where we create a XML-ised string of the Permission
[OptionalField(VersionAdded = 2)]
private String m_serializedPermission;
// This field is legacy info from v1.x and is never used in v2.0 and beyond: purely for serialization purposes
private SecurityZone m_zone = SecurityZone.NoZone;
[OnDeserialized]
private void OnDeserialized(StreamingContext ctx)
{
if ((ctx.State & ~(StreamingContextStates.Clone|StreamingContextStates.CrossAppDomain)) != 0)
{
// v2.0 and beyond XML case
if (m_serializedPermission != null)
{
FromXml(SecurityElement.FromString(m_serializedPermission));
m_serializedPermission = null;
}
else //v1.x case where we read the m_zone value
{
SecurityZone = m_zone;
m_zone = SecurityZone.NoZone;
}
}
}
[OnSerializing]
private void OnSerializing(StreamingContext ctx)
{
if ((ctx.State & ~(StreamingContextStates.Clone|StreamingContextStates.CrossAppDomain)) != 0)
{
m_serializedPermission = ToXml().ToString(); //for the v2 and beyond case
m_zone = SecurityZone;
}
}
[OnSerialized]
private void OnSerialized(StreamingContext ctx)
{
if ((ctx.State & ~(StreamingContextStates.Clone|StreamingContextStates.CrossAppDomain)) != 0)
{
m_serializedPermission = null;
m_zone = SecurityZone.NoZone;
}
}
//-----------------------------------------------------
//
// PUBLIC CONSTRUCTORS
//
//-----------------------------------------------------
public ZoneIdentityPermission(PermissionState state)
{
if (state == PermissionState.Unrestricted)
{
if(CodeAccessSecurityEngine.DoesFullTrustMeanFullTrust())
m_zones = AllZones;
else
throw new ArgumentException(Environment.GetResourceString("Argument_UnrestrictedIdentityPermission"));
}
else if (state == PermissionState.None)
{
m_zones = 0;
}
else
{
throw new ArgumentException(Environment.GetResourceString("Argument_InvalidPermissionState"));
}
}
public ZoneIdentityPermission( SecurityZone zone )
{
this.SecurityZone = zone;
}
internal ZoneIdentityPermission( uint zones )
{
m_zones = (zones & AllZones);
}
//------------------------------------------------------
//
// PUBLIC ACCESSOR METHODS
//
//-----------------------------------------------------
public SecurityZone SecurityZone
{
set
{
VerifyZone( value );
if(value == SecurityZone.NoZone)
m_zones = 0;
else
m_zones = (uint)1 << (int)value;
}
get
{
SecurityZone z = SecurityZone.NoZone;
int nEnum = 0;
uint nFlag;
for(nFlag = 1; nFlag < AllZones; nFlag <<= 1)
{
if((m_zones & nFlag) != 0)
{
if(z == SecurityZone.NoZone)
z = (SecurityZone)nEnum;
else
return SecurityZone.NoZone;
}
nEnum++;
}
return z;
}
}
//------------------------------------------------------
//
// PRIVATE AND PROTECTED HELPERS FOR ACCESSORS AND CONSTRUCTORS
//
//------------------------------------------------------
private static void VerifyZone( SecurityZone zone )
{
if (zone < SecurityZone.NoZone || zone > SecurityZone.Untrusted)
{
throw new ArgumentException( Environment.GetResourceString("Argument_IllegalZone") );
}
}
//-----------------------------------------------------
//
// CODEACCESSPERMISSION IMPLEMENTATION
//
//------------------------------------------------------
//-----------------------------------------------------
//
// IPERMISSION IMPLEMENTATION
//
//-----------------------------------------------------
public override IPermission Copy()
{
return new ZoneIdentityPermission(this.m_zones);
}
public override bool IsSubsetOf(IPermission target)
{
if (target == null)
return this.m_zones == 0;
ZoneIdentityPermission that = target as ZoneIdentityPermission;
if (that == null)
throw new ArgumentException(String.Format(CultureInfo.CurrentCulture, Environment.GetResourceString("Argument_WrongType"), this.GetType().FullName));
return (this.m_zones & that.m_zones) == this.m_zones;
}
public override IPermission Intersect(IPermission target)
{
if (target == null)
return null;
ZoneIdentityPermission that = target as ZoneIdentityPermission;
if (that == null)
throw new ArgumentException(String.Format(CultureInfo.CurrentCulture, Environment.GetResourceString("Argument_WrongType"), this.GetType().FullName));
uint newZones = this.m_zones & that.m_zones;
if(newZones == 0)
return null;
return new ZoneIdentityPermission(newZones);
}
public override IPermission Union(IPermission target)
{
if (target == null)
return this.m_zones != 0 ? this.Copy() : null;
ZoneIdentityPermission that = target as ZoneIdentityPermission;
if (that == null)
throw new ArgumentException(String.Format(CultureInfo.CurrentCulture, Environment.GetResourceString("Argument_WrongType"), this.GetType().FullName));
return new ZoneIdentityPermission(this.m_zones | that.m_zones);
}
public override SecurityElement ToXml()
{
SecurityElement esd = CodeAccessPermission.CreatePermissionElement( this, "System.Security.Permissions.ZoneIdentityPermission" );
if (SecurityZone != SecurityZone.NoZone)
{
esd.AddAttribute( "Zone", Enum.GetName( typeof( SecurityZone ), this.SecurityZone ) );
}
else
{
int nEnum = 0;
uint nFlag;
for(nFlag = 1; nFlag < AllZones; nFlag <<= 1)
{
if((m_zones & nFlag) != 0)
{
SecurityElement child = new SecurityElement("Zone");
child.AddAttribute( "Zone", Enum.GetName( typeof( SecurityZone ), (SecurityZone)nEnum ) );
esd.AddChild(child);
}
nEnum++;
}
}
return esd;
}
public override void FromXml(SecurityElement esd)
{
m_zones = 0;
CodeAccessPermission.ValidateElement( esd, this );
String eZone = esd.Attribute( "Zone" );
if (eZone != null)
SecurityZone = (SecurityZone)Enum.Parse( typeof( SecurityZone ), eZone );
if(esd.Children != null)
{
foreach(SecurityElement child in esd.Children)
{
eZone = child.Attribute( "Zone" );
int enm = (int)Enum.Parse( typeof( SecurityZone ), eZone );
if(enm == (int)SecurityZone.NoZone)
continue;
m_zones |= ((uint)1 << enm);
}
}
}
///
int IBuiltInPermission.GetTokenIndex()
{
return ZoneIdentityPermission.GetTokenIndex();
}
internal static int GetTokenIndex()
{
return BuiltInPermissionIndex.ZoneIdentityPermissionIndex;
}
}
}
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- HyperlinkAutomationPeer.cs
- ContainerParagraph.cs
- SequentialUshortCollection.cs
- RowsCopiedEventArgs.cs
- DataGridViewUtilities.cs
- SchemaImporterExtension.cs
- HttpServerUtilityWrapper.cs
- QuaternionAnimation.cs
- ActiveXHost.cs
- EmptyCollection.cs
- Rotation3DAnimation.cs
- AuthenticationException.cs
- PathGeometry.cs
- GeneralTransform2DTo3D.cs
- SoapRpcMethodAttribute.cs
- EntityDataSourceViewSchema.cs
- SmtpMail.cs
- XslCompiledTransform.cs
- TextProviderWrapper.cs
- RemoteWebConfigurationHostServer.cs
- NullableDecimalSumAggregationOperator.cs
- FontFaceLayoutInfo.cs
- ReadOnlyHierarchicalDataSourceView.cs
- Panel.cs
- TitleStyle.cs
- assertwrapper.cs
- NodeFunctions.cs
- CompositionTarget.cs
- BuildResultCache.cs
- ImageClickEventArgs.cs
- XmlEncoding.cs
- Accessible.cs
- StringKeyFrameCollection.cs
- PartialList.cs
- QilExpression.cs
- WindowShowOrOpenTracker.cs
- PeerService.cs
- PolicyDesigner.cs
- CreateUserWizard.cs
- InternalResources.cs
- ListMarkerSourceInfo.cs
- PersonalizablePropertyEntry.cs
- ItemCollection.cs
- DataGridViewSelectedRowCollection.cs
- UserControl.cs
- ContainerControlDesigner.cs
- PrintPreviewControl.cs
- CqlWriter.cs
- Char.cs
- UdpDiscoveryEndpointElement.cs
- SerializerWriterEventHandlers.cs
- TraceUtils.cs
- TypeLoadException.cs
- SqlNamer.cs
- SqlFlattener.cs
- ColumnHeaderConverter.cs
- PieceNameHelper.cs
- Attribute.cs
- OracleDateTime.cs
- PtsHelper.cs
- Literal.cs
- ImageListImage.cs
- AttributeCollection.cs
- ConfigurationStrings.cs
- DaylightTime.cs
- IntSecurity.cs
- ArraySegment.cs
- ConnectionProviderAttribute.cs
- SessionPageStatePersister.cs
- RectangleGeometry.cs
- PersonalizationProvider.cs
- CounterNameConverter.cs
- TagPrefixCollection.cs
- DbConnectionPoolGroupProviderInfo.cs
- Int32Rect.cs
- Persist.cs
- SqlDependencyUtils.cs
- AuthenticateEventArgs.cs
- ObjectPersistData.cs
- PropertyCollection.cs
- CodeTypeMemberCollection.cs
- WindowsScrollBarBits.cs
- TextProperties.cs
- AutomationPropertyInfo.cs
- Executor.cs
- contentDescriptor.cs
- ToolStripContentPanel.cs
- TabPanel.cs
- ClrPerspective.cs
- IOThreadTimer.cs
- CompilationSection.cs
- ForAllOperator.cs
- OleDbRowUpdatedEvent.cs
- JavascriptCallbackResponseProperty.cs
- StoryFragments.cs
- StringBuilder.cs
- TypeConverter.cs
- BackgroundWorker.cs
- NativeMethods.cs
- DataGridViewHeaderCell.cs