Code:
/ DotNET / DotNET / 8.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
- RenderData.cs
- PeerEndPoint.cs
- NumericExpr.cs
- CollectionViewProxy.cs
- followingquery.cs
- EntityType.cs
- SpeechAudioFormatInfo.cs
- ADMembershipUser.cs
- XamlWriterExtensions.cs
- X509CertificateCollection.cs
- GcSettings.cs
- FileLogRecord.cs
- ProtocolsConfigurationHandler.cs
- ProxyGenerationError.cs
- HttpModuleCollection.cs
- ObjectComplexPropertyMapping.cs
- EnumerableRowCollectionExtensions.cs
- XmlAutoDetectWriter.cs
- CodeVariableReferenceExpression.cs
- HyperLinkDesigner.cs
- ZoneMembershipCondition.cs
- UIAgentMonitor.cs
- ValuePattern.cs
- CodeDomDesignerLoader.cs
- FileIOPermission.cs
- MessageFilterTable.cs
- ColumnMapProcessor.cs
- __ComObject.cs
- MediaElementAutomationPeer.cs
- DbReferenceCollection.cs
- ExplicitDiscriminatorMap.cs
- PreloadedPackages.cs
- UnauthorizedAccessException.cs
- DataGridViewCellValidatingEventArgs.cs
- WebPartsPersonalizationAuthorization.cs
- NameValueSectionHandler.cs
- Switch.cs
- ObjectDisposedException.cs
- WebResponse.cs
- InstanceDescriptor.cs
- FragmentQuery.cs
- GifBitmapEncoder.cs
- DragDeltaEventArgs.cs
- XamlGridLengthSerializer.cs
- SafeProcessHandle.cs
- ToolStripSettings.cs
- SingleObjectCollection.cs
- BitmapImage.cs
- MarkupCompiler.cs
- basenumberconverter.cs
- ColorContext.cs
- MeshGeometry3D.cs
- TypeElement.cs
- XmlEntity.cs
- SectionVisual.cs
- UnsafeNativeMethodsTablet.cs
- XmlMapping.cs
- ExpandoClass.cs
- DataGridViewComponentPropertyGridSite.cs
- OleDbPermission.cs
- DataGridColumn.cs
- ResourceIDHelper.cs
- ProviderConnectionPoint.cs
- SystemInfo.cs
- HttpCapabilitiesSectionHandler.cs
- DeviceOverridableAttribute.cs
- Unit.cs
- WebResourceUtil.cs
- CodeDomConfigurationHandler.cs
- Attributes.cs
- WorkflowMessageEventHandler.cs
- VoiceSynthesis.cs
- ClientCredentialsElement.cs
- WebPartConnectionCollection.cs
- ObjectQueryState.cs
- BuildProviderCollection.cs
- UpdateException.cs
- DataGridColumnHeaderItemAutomationPeer.cs
- MutexSecurity.cs
- ModelTypeConverter.cs
- SemanticResolver.cs
- PageParserFilter.cs
- SQLBytesStorage.cs
- Size3D.cs
- DesignerActionListCollection.cs
- HtmlInputText.cs
- ProfileService.cs
- ParameterExpression.cs
- EmptyEnumerator.cs
- WebResponse.cs
- CssClassPropertyAttribute.cs
- Compiler.cs
- ConnectionInterfaceCollection.cs
- ObjectDataSourceDisposingEventArgs.cs
- StringCollection.cs
- SByteConverter.cs
- SqlTransaction.cs
- ViewStateModeByIdAttribute.cs
- DetailsViewInsertedEventArgs.cs
- SqlDataSourceView.cs