Code:
/ FX-1434 / FX-1434 / 1.0 / untmp / whidbey / REDBITS / ndp / clr / src / BCL / System / Security / Permissions / ReflectionPermission.cs / 3 / ReflectionPermission.cs
// ==++==
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
// ==--==
// ReflectionPermission.cs
//
namespace System.Security.Permissions
{
using System;
using System.IO;
using System.Security.Util;
using System.Text;
using System.Runtime.InteropServices;
using System.Runtime.Remoting;
using System.Security;
using System.Reflection;
using System.Globalization;
[ComVisible(true)]
[Flags]
[Serializable]
public enum ReflectionPermissionFlag
{
NoFlags = 0x00,
[Obsolete("This API has been deprecated. http://go.microsoft.com/fwlink/?linkid=14202")]
TypeInformation = 0x01,
MemberAccess = 0x02,
ReflectionEmit = 0x04,
[ComVisible(false)]
RestrictedMemberAccess = 0x08,
AllFlags = 0x07
}
[ComVisible(true)]
[Serializable]
sealed public class ReflectionPermission
: CodeAccessPermission, IUnrestrictedPermission, IBuiltInPermission
{
// ReflectionPermissionFlag.AllFlags doesn't contain the new value RestrictedMemberAccess,
// but we cannot change its value now because that will break apps that have that old value baked in.
// We should use this const that truely contains "all" flags instead of ReflectionPermissionFlag.AllFlags.
internal const ReflectionPermissionFlag AllFlagsAndMore = ReflectionPermissionFlag.AllFlags | ReflectionPermissionFlag.RestrictedMemberAccess;
private ReflectionPermissionFlag m_flags;
//
// Public Constructors
//
public ReflectionPermission(PermissionState state)
{
if (state == PermissionState.Unrestricted)
{
SetUnrestricted( true );
}
else if (state == PermissionState.None)
{
SetUnrestricted( false );
}
else
{
throw new ArgumentException(Environment.GetResourceString("Argument_InvalidPermissionState"));
}
}
// Parameters:
//
public ReflectionPermission(ReflectionPermissionFlag flag)
{
VerifyAccess(flag);
SetUnrestricted(false);
m_flags = flag;
}
//------------------------------------------------------
//
// PRIVATE AND PROTECTED MODIFIERS
//
//-----------------------------------------------------
private void SetUnrestricted(bool unrestricted)
{
if (unrestricted)
{
m_flags = ReflectionPermission.AllFlagsAndMore;
}
else
{
Reset();
}
}
private void Reset()
{
m_flags = ReflectionPermissionFlag.NoFlags;
}
public ReflectionPermissionFlag Flags
{
set
{
VerifyAccess(value);
m_flags = value;
}
get
{
return m_flags;
}
}
#if ZERO // Do not remove this code, usefull for debugging
public override String ToString()
{
StringBuilder sb = new StringBuilder();
sb.Append("ReflectionPermission(");
if (IsUnrestricted())
{
sb.Append("Unrestricted");
}
else
{
if (GetFlag(ReflectionPermissionFlag.TypeInformation))
sb.Append("TypeInformation; ");
if (GetFlag(ReflectionPermissionFlag.MemberAccess))
sb.Append("MemberAccess; ");
if (GetFlag(ReflectionPermissionFlag.ReflectionEmit))
sb.Append("ReflectionEmit; ");
}
sb.Append(")");
return sb.ToString();
}
#endif
//
// CodeAccessPermission implementation
//
public bool IsUnrestricted()
{
return m_flags == ReflectionPermission.AllFlagsAndMore;
}
//
// IPermission implementation
//
public override IPermission Union(IPermission other)
{
if (other == null)
{
return this.Copy();
}
else if (!VerifyType(other))
{
throw new
ArgumentException(
String.Format(CultureInfo.CurrentCulture, Environment.GetResourceString("Argument_WrongType"), this.GetType().FullName)
);
}
ReflectionPermission operand = (ReflectionPermission)other;
if (this.IsUnrestricted() || operand.IsUnrestricted())
{
return new ReflectionPermission( PermissionState.Unrestricted );
}
else
{
ReflectionPermissionFlag flag_union = (ReflectionPermissionFlag)(m_flags | operand.m_flags);
return(new ReflectionPermission(flag_union));
}
}
public override bool IsSubsetOf(IPermission target)
{
if (target == null)
{
return m_flags == ReflectionPermissionFlag.NoFlags;
}
try
{
ReflectionPermission operand = (ReflectionPermission)target;
if (operand.IsUnrestricted())
return true;
else if (this.IsUnrestricted())
return false;
else
return (((int)this.m_flags) & ~((int)operand.m_flags)) == 0;
}
catch (InvalidCastException)
{
throw new
ArgumentException(
String.Format(CultureInfo.CurrentCulture, Environment.GetResourceString("Argument_WrongType"), this.GetType().FullName)
);
}
}
public override IPermission Intersect(IPermission target)
{
if (target == null)
return null;
else if (!VerifyType(target))
{
throw new
ArgumentException(
String.Format(CultureInfo.CurrentCulture, Environment.GetResourceString("Argument_WrongType"), this.GetType().FullName)
);
}
ReflectionPermission operand = (ReflectionPermission)target;
ReflectionPermissionFlag newFlags = operand.m_flags & this.m_flags;
if (newFlags == ReflectionPermissionFlag.NoFlags)
return null;
else
return new ReflectionPermission( newFlags );
}
public override IPermission Copy()
{
if (this.IsUnrestricted())
{
return new ReflectionPermission(PermissionState.Unrestricted);
}
else
{
return new ReflectionPermission((ReflectionPermissionFlag)m_flags);
}
}
//
// IEncodable Interface
private
void VerifyAccess(ReflectionPermissionFlag type)
{
if ((type & ~ReflectionPermission.AllFlagsAndMore) != 0)
throw new ArgumentException(String.Format(CultureInfo.CurrentCulture, Environment.GetResourceString("Arg_EnumIllegalVal"), (int)type));
}
//-----------------------------------------------------
//
// PUBLIC ENCODING METHODS
//
//-----------------------------------------------------
public override SecurityElement ToXml()
{
SecurityElement esd = CodeAccessPermission.CreatePermissionElement( this, "System.Security.Permissions.ReflectionPermission" );
if (!IsUnrestricted())
{
esd.AddAttribute( "Flags", XMLUtil.BitFieldEnumToString( typeof( ReflectionPermissionFlag ), m_flags ) );
}
else
{
esd.AddAttribute( "Unrestricted", "true" );
}
return esd;
}
public override void FromXml(SecurityElement esd)
{
CodeAccessPermission.ValidateElement( esd, this );
if (XMLUtil.IsUnrestricted( esd ))
{
m_flags = ReflectionPermission.AllFlagsAndMore;
return;
}
Reset () ;
SetUnrestricted (false) ;
String flags = esd.Attribute( "Flags" );
if (flags != null)
m_flags = (ReflectionPermissionFlag)Enum.Parse( typeof( ReflectionPermissionFlag ), flags );
}
///
int IBuiltInPermission.GetTokenIndex()
{
return ReflectionPermission.GetTokenIndex();
}
internal static int GetTokenIndex()
{
return BuiltInPermissionIndex.ReflectionPermissionIndex;
}
}
}
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- SafeArrayRankMismatchException.cs
- JumpPath.cs
- UserMapPath.cs
- TransformConverter.cs
- WebServiceTypeData.cs
- NonSerializedAttribute.cs
- FieldReference.cs
- shaper.cs
- UriParserTemplates.cs
- DataGridCell.cs
- PathFigureCollection.cs
- WindowsStartMenu.cs
- FileSystemInfo.cs
- ChangePasswordDesigner.cs
- DataGridViewCellFormattingEventArgs.cs
- DetailsViewUpdateEventArgs.cs
- FileDialogCustomPlacesCollection.cs
- ContentValidator.cs
- GenericsInstances.cs
- CacheDependency.cs
- GridViewColumnHeaderAutomationPeer.cs
- SchemaMapping.cs
- QuaternionAnimationBase.cs
- RegexCapture.cs
- JsonUriDataContract.cs
- Light.cs
- WebAdminConfigurationHelper.cs
- DoubleIndependentAnimationStorage.cs
- SerialReceived.cs
- GlyphRunDrawing.cs
- HttpException.cs
- SpanIndex.cs
- SqlUserDefinedTypeAttribute.cs
- DnsPermission.cs
- TextUtf8RawTextWriter.cs
- SpecularMaterial.cs
- CommonDialog.cs
- D3DImage.cs
- Inflater.cs
- ContractCodeDomInfo.cs
- TreeViewDataItemAutomationPeer.cs
- CompositeFontFamily.cs
- DesignerCategoryAttribute.cs
- AstNode.cs
- TemplateKey.cs
- WebPartsPersonalization.cs
- LazyTextWriterCreator.cs
- VisualCollection.cs
- BitmapImage.cs
- ThreadExceptionDialog.cs
- FunctionNode.cs
- FunctionMappingTranslator.cs
- GPRECTF.cs
- ComboBoxAutomationPeer.cs
- PeerResolverMode.cs
- XmlSchemaException.cs
- MsmqIntegrationSecurityMode.cs
- DbUpdateCommandTree.cs
- PolyBezierSegment.cs
- FtpWebResponse.cs
- CommandSet.cs
- ObjectToModelValueConverter.cs
- WebScriptEndpoint.cs
- XPathDescendantIterator.cs
- XmlMapping.cs
- ContextMenuStrip.cs
- DataSourceControl.cs
- EntityContainer.cs
- XmlSchemaFacet.cs
- PerformanceCounterCategory.cs
- TransformerInfo.cs
- datacache.cs
- GeneralTransform3DGroup.cs
- designeractionbehavior.cs
- FixedHyperLink.cs
- TransportConfigurationTypeElement.cs
- ScriptingProfileServiceSection.cs
- ReaderWriterLockSlim.cs
- ProjectionCamera.cs
- DelegatingMessage.cs
- ListInitExpression.cs
- LZCodec.cs
- CapiHashAlgorithm.cs
- HtmlSelect.cs
- SRGSCompiler.cs
- ElementUtil.cs
- MessageQueueAccessControlEntry.cs
- ImageAnimator.cs
- OperatingSystem.cs
- DataSourceControlBuilder.cs
- SiteMapPath.cs
- SQLString.cs
- ITreeGenerator.cs
- RewritingValidator.cs
- BufferModesCollection.cs
- ObjectTag.cs
- AnonymousIdentificationSection.cs
- Certificate.cs
- DbProviderFactory.cs
- OdbcCommandBuilder.cs