22 internal enum IsSubsetOfType
30 private bool m_Unrestricted;
32 [OptionalField(VersionAdded = 2)]
33 private bool m_allPermissionsDecoded;
35 [OptionalField(VersionAdded = 2)]
36 internal TokenBasedSet m_permSet;
38 [OptionalField(VersionAdded = 2)]
39 private bool m_ignoreTypeLoadFailures;
41 [OptionalField(VersionAdded = 2)]
42 private string m_serializedPermissionSet;
45 private bool m_CheckedForNonCas;
48 private bool m_ContainsCas;
51 private bool m_ContainsNonCas;
54 private TokenBasedSet m_permSetSaved;
56 private bool readableonly;
58 private TokenBasedSet m_unrestrictedPermSet;
60 private TokenBasedSet m_normalPermSet;
62 [OptionalField(VersionAdded = 2)]
63 private bool m_canUnrestrictedOverride;
67 private const string s_str_PermissionSet =
"PermissionSet";
69 private const string s_str_Permission =
"Permission";
71 private const string s_str_IPermission =
"IPermission";
73 private const string s_str_Unrestricted =
"Unrestricted";
75 private const string s_str_PermissionUnion =
"PermissionUnion";
77 private const string s_str_PermissionIntersection =
"PermissionIntersection";
79 private const string s_str_PermissionUnrestrictedUnion =
"PermissionUnrestrictedUnion";
81 private const string s_str_PermissionUnrestrictedIntersection =
"PermissionUnrestrictedIntersection";
97 public virtual int Count 102 if (m_permSet !=
null)
104 num += m_permSet.GetCount();
110 internal bool IgnoreTypeLoadFailures
114 m_ignoreTypeLoadFailures = value;
118 [Conditional(
"_DEBUG")]
119 private static void DEBUG_WRITE(
string str)
124 private static void DEBUG_COND_WRITE(
bool exp,
string str)
129 private static void DEBUG_PRINTSTACK(Exception e)
142 if (m_serializedPermissionSet !=
null)
144 FromXml(SecurityElement.FromString(m_serializedPermissionSet));
146 else if (m_normalPermSet !=
null)
148 m_permSet = m_normalPermSet.SpecialUnion(m_unrestrictedPermSet);
150 else if (m_unrestrictedPermSet !=
null)
152 m_permSet = m_unrestrictedPermSet.SpecialUnion(m_normalPermSet);
154 m_serializedPermissionSet =
null;
155 m_normalPermSet =
null;
156 m_unrestrictedPermSet =
null;
164 m_serializedPermissionSet =
ToString();
165 if (m_permSet !=
null)
167 m_permSet.SpecialSplit(ref m_unrestrictedPermSet, ref m_normalPermSet, m_ignoreTypeLoadFailures);
169 m_permSetSaved = m_permSet;
179 m_serializedPermissionSet =
null;
180 m_permSet = m_permSetSaved;
181 m_permSetSaved =
null;
182 m_unrestrictedPermSet =
null;
183 m_normalPermSet =
null;
187 internal PermissionSet()
190 m_Unrestricted =
true;
193 internal PermissionSet(
bool fUnrestricted)
196 SetUnrestricted(fUnrestricted);
208 SetUnrestricted(unrestricted:
true);
211 SetUnrestricted(unrestricted:
false);
228 m_Unrestricted = permSet.m_Unrestricted;
229 m_CheckedForNonCas = permSet.m_CheckedForNonCas;
230 m_ContainsCas = permSet.m_ContainsCas;
231 m_ContainsNonCas = permSet.m_ContainsNonCas;
232 m_ignoreTypeLoadFailures = permSet.m_ignoreTypeLoadFailures;
233 if (permSet.m_permSet ==
null)
237 m_permSet =
new TokenBasedSet(permSet.m_permSet);
238 for (
int i = m_permSet.GetStartingIndex(); i <= m_permSet.GetMaxUsedIndex(); i++)
240 object item = m_permSet.GetItem(i);
242 ISecurityElementFactory securityElementFactory = item as ISecurityElementFactory;
243 if (permission !=
null)
245 m_permSet.SetItem(i, permission.
Copy());
247 else if (securityElementFactory !=
null)
249 m_permSet.SetItem(i, securityElementFactory.Copy());
266 PermissionSetEnumeratorInternal permissionSetEnumeratorInternal =
new PermissionSetEnumeratorInternal(
this);
267 while (permissionSetEnumeratorInternal.MoveNext())
269 array.SetValue(permissionSetEnumeratorInternal.Current, index++);
275 m_Unrestricted =
false;
278 internal void Reset()
280 m_Unrestricted =
false;
281 m_allPermissionsDecoded =
true;
283 m_ignoreTypeLoadFailures =
false;
284 m_CheckedForNonCas =
false;
285 m_ContainsCas =
false;
286 m_ContainsNonCas =
false;
287 m_permSetSaved =
null;
290 internal void CheckSet()
292 if (m_permSet ==
null)
294 m_permSet =
new TokenBasedSet();
307 if (m_permSet ==
null || m_permSet.FastIsEmpty())
311 PermissionSetEnumeratorInternal permissionSetEnumeratorInternal =
new PermissionSetEnumeratorInternal(
this);
312 while (permissionSetEnumeratorInternal.MoveNext())
323 internal bool FastIsEmpty()
329 if (m_permSet ==
null || m_permSet.FastIsEmpty())
336 internal IPermission GetPermission(
int index)
338 if (m_permSet ==
null)
342 object item = m_permSet.GetItem(index);
347 IPermission permission = item as IPermission;
348 if (permission !=
null)
352 permission = CreatePermission(item, index);
353 if (permission ==
null)
360 internal IPermission GetPermission(PermissionToken permToken)
362 if (permToken ==
null)
366 return GetPermission(permToken.m_index);
369 internal IPermission GetPermission(IPermission perm)
375 return GetPermission(PermissionToken.GetToken(perm));
391 if (permClass ==
null)
395 return GetPermission(PermissionToken.FindToken(permClass));
417 PermissionToken token = PermissionToken.GetToken(perm);
418 if ((token.m_type & PermissionTokenType.IUnrestricted) != 0)
420 m_Unrestricted =
false;
423 IPermission permission = GetPermission(token.m_index);
424 m_CheckedForNonCas =
false;
425 m_permSet.SetItem(token.m_index, perm);
448 m_CheckedForNonCas =
false;
449 PermissionToken token = PermissionToken.GetToken(perm);
450 if (
IsUnrestricted() && (token.m_type & PermissionTokenType.IUnrestricted) != 0)
452 Type type = perm.GetType();
455 PermissionState.Unrestricted
459 IPermission permission = GetPermission(token.m_index);
460 if (permission !=
null)
463 m_permSet.SetItem(token.m_index, permission2);
466 m_permSet.SetItem(token.m_index, perm);
473 if (permission ==
null)
477 return (IPermission)m_permSet.RemoveItem(index);
495 if (permClass ==
null)
499 PermissionToken permissionToken = PermissionToken.FindToken(permClass);
500 if (permissionToken ==
null)
504 return RemovePermission(permissionToken.m_index);
507 internal void SetUnrestricted(
bool unrestricted)
509 m_Unrestricted = unrestricted;
521 return m_Unrestricted;
524 internal bool IsSubsetOfHelper(
PermissionSet target, IsSubsetOfType type, out
IPermission firstPermThatFailed,
bool ignoreNonCas)
526 firstPermThatFailed =
null;
527 if (target ==
null || target.FastIsEmpty())
533 firstPermThatFailed = GetFirstPerm();
540 if (m_permSet ==
null)
545 for (
int i = m_permSet.GetStartingIndex(); i <= m_permSet.GetMaxUsedIndex(); i++)
547 IPermission permission = GetPermission(i);
548 if (permission ==
null || permission.IsSubsetOf(
null))
552 IPermission permission2 = target.GetPermission(i);
553 if (target.m_Unrestricted)
557 CodeAccessPermission codeAccessPermission = permission as CodeAccessPermission;
558 if (codeAccessPermission ==
null)
560 if (!ignoreNonCas && !permission.IsSubsetOf(permission2))
562 firstPermThatFailed = permission;
567 firstPermThatFailed = permission;
570 case IsSubsetOfType.Normal:
571 if (!permission.IsSubsetOf(permission2))
576 case IsSubsetOfType.CheckDemand:
577 if (!codeAccessPermission.CheckDemand((CodeAccessPermission)permission2))
582 case IsSubsetOfType.CheckPermitOnly:
583 if (!codeAccessPermission.CheckPermitOnly((CodeAccessPermission)permission2))
588 case IsSubsetOfType.CheckAssertion:
589 if (!codeAccessPermission.CheckAssert((CodeAccessPermission)permission2))
595 firstPermThatFailed =
null;
607 return IsSubsetOfHelper(target, IsSubsetOfType.Normal, out firstPermThatFailed, ignoreNonCas:
false);
612 return IsSubsetOfHelper(target, IsSubsetOfType.CheckDemand, out firstPermThatFailed, ignoreNonCas:
true);
615 internal bool CheckPermitOnly(PermissionSet target, out IPermission firstPermThatFailed)
617 return IsSubsetOfHelper(target, IsSubsetOfType.CheckPermitOnly, out firstPermThatFailed, ignoreNonCas:
true);
620 internal bool CheckAssertion(PermissionSet target)
622 IPermission firstPermThatFailed;
623 return IsSubsetOfHelper(target, IsSubsetOfType.CheckAssertion, out firstPermThatFailed, ignoreNonCas:
true);
626 internal bool CheckDeny(PermissionSet deniedSet, out IPermission firstPermThatFailed)
628 firstPermThatFailed =
null;
629 if (deniedSet ==
null || deniedSet.FastIsEmpty() || FastIsEmpty())
633 if (m_Unrestricted && deniedSet.m_Unrestricted)
637 PermissionSetEnumeratorInternal permissionSetEnumeratorInternal =
new PermissionSetEnumeratorInternal(
this);
638 while (permissionSetEnumeratorInternal.MoveNext())
640 CodeAccessPermission codeAccessPermission = permissionSetEnumeratorInternal.Current as CodeAccessPermission;
641 if (codeAccessPermission !=
null && !codeAccessPermission.IsSubsetOf(
null))
643 if (deniedSet.m_Unrestricted)
645 firstPermThatFailed = codeAccessPermission;
648 CodeAccessPermission denied = (CodeAccessPermission)deniedSet.GetPermission(permissionSetEnumeratorInternal.GetCurrentIndex());
649 if (!codeAccessPermission.CheckDeny(denied))
651 firstPermThatFailed = codeAccessPermission;
658 PermissionSetEnumeratorInternal permissionSetEnumeratorInternal2 =
new PermissionSetEnumeratorInternal(deniedSet);
659 while (permissionSetEnumeratorInternal2.MoveNext())
661 if (permissionSetEnumeratorInternal2.Current is IPermission)
670 internal void CheckDecoded(CodeAccessPermission demandedPerm, PermissionToken tokenDemandedPerm)
672 if (!m_allPermissionsDecoded && m_permSet !=
null)
674 if (tokenDemandedPerm ==
null)
676 tokenDemandedPerm = PermissionToken.GetToken(demandedPerm);
678 CheckDecoded(tokenDemandedPerm.m_index);
682 internal void CheckDecoded(
int index)
684 if (!m_allPermissionsDecoded && m_permSet !=
null)
686 GetPermission(index);
690 internal void CheckDecoded(PermissionSet demandedSet)
692 if (!m_allPermissionsDecoded && m_permSet !=
null)
694 PermissionSetEnumeratorInternal enumeratorInternal = demandedSet.GetEnumeratorInternal();
695 while (enumeratorInternal.MoveNext())
697 CheckDecoded(enumeratorInternal.GetCurrentIndex());
702 internal static void SafeChildAdd(SecurityElement parent, ISecurityElementFactory child,
bool copy)
708 if (child.GetTag().Equals(
"IPermission") || child.GetTag().Equals(
"Permission"))
710 parent.AddChild(child);
712 else if (parent.Tag.Equals(child.GetTag()))
714 SecurityElement securityElement = (SecurityElement)child;
715 for (
int i = 0; i < securityElement.InternalChildren.Count; i++)
717 ISecurityElementFactory child2 = (ISecurityElementFactory)securityElement.InternalChildren[i];
718 parent.AddChildNoDuplicates(child2);
723 parent.AddChild((ISecurityElementFactory)(copy ? child.Copy() : child));
727 internal void InplaceIntersect(PermissionSet other)
730 m_CheckedForNonCas =
false;
735 if (other ==
null || other.FastIsEmpty())
745 int num = (m_permSet ==
null) ? (-1) : m_permSet.GetMaxUsedIndex();
746 int num2 = (other.m_permSet ==
null) ? (-1) : other.m_permSet.GetMaxUsedIndex();
752 if (other.IsUnrestricted())
756 for (
int i = 0; i <= num; i++)
758 object item = m_permSet.GetItem(i);
759 IPermission permission = item as IPermission;
760 ISecurityElementFactory securityElementFactory = item as ISecurityElementFactory;
761 object item2 = other.m_permSet.GetItem(i);
762 IPermission permission2 = item2 as IPermission;
763 ISecurityElementFactory securityElementFactory2 = item2 as ISecurityElementFactory;
764 if (item ==
null && item2 ==
null)
768 if (securityElementFactory !=
null && securityElementFactory2 !=
null)
770 if (securityElementFactory.GetTag().Equals(
"PermissionIntersection") || securityElementFactory.GetTag().Equals(
"PermissionUnrestrictedIntersection"))
772 SafeChildAdd((SecurityElement)securityElementFactory, securityElementFactory2, copy:
true);
778 SecurityElement securityElement =
new SecurityElement(
"PermissionUnrestrictedUnion");
779 securityElement.AddAttribute(
"class", securityElementFactory.Attribute(
"class"));
780 SafeChildAdd(securityElement, securityElementFactory, copy:
false);
781 securityElementFactory = securityElement;
783 if (other.IsUnrestricted())
785 SecurityElement securityElement2 =
new SecurityElement(
"PermissionUnrestrictedUnion");
786 securityElement2.AddAttribute(
"class", securityElementFactory2.Attribute(
"class"));
787 SafeChildAdd(securityElement2, securityElementFactory2, copy:
true);
788 securityElementFactory2 = securityElement2;
791 SecurityElement securityElement3 =
new SecurityElement(
"PermissionIntersection");
792 securityElement3.AddAttribute(
"class", securityElementFactory.Attribute(
"class"));
793 SafeChildAdd(securityElement3, securityElementFactory, copy:
false);
794 SafeChildAdd(securityElement3, securityElementFactory2, copy);
795 m_permSet.SetItem(i, securityElement3);
797 else if (item ==
null)
803 if (securityElementFactory2 !=
null)
805 SecurityElement securityElement4 =
new SecurityElement(
"PermissionUnrestrictedIntersection");
806 securityElement4.AddAttribute(
"class", securityElementFactory2.Attribute(
"class"));
807 SafeChildAdd(securityElement4, securityElementFactory2, copy:
true);
808 m_permSet.SetItem(i, securityElement4);
812 PermissionToken permissionToken = (PermissionToken)PermissionToken.s_tokenSet.GetItem(i);
813 if ((permissionToken.m_type & PermissionTokenType.IUnrestricted) != 0)
815 m_permSet.SetItem(i, permission2.Copy());
819 else if (item2 ==
null)
821 if (other.IsUnrestricted())
823 if (securityElementFactory !=
null)
825 SecurityElement securityElement5 =
new SecurityElement(
"PermissionUnrestrictedIntersection");
826 securityElement5.AddAttribute(
"class", securityElementFactory.Attribute(
"class"));
827 SafeChildAdd(securityElement5, securityElementFactory, copy:
false);
828 m_permSet.SetItem(i, securityElement5);
832 PermissionToken permissionToken2 = (PermissionToken)PermissionToken.s_tokenSet.GetItem(i);
833 if ((permissionToken2.m_type & PermissionTokenType.IUnrestricted) == (PermissionTokenType)0)
835 m_permSet.SetItem(i,
null);
841 m_permSet.SetItem(i,
null);
846 if (securityElementFactory !=
null)
848 permission = CreatePermission(securityElementFactory, i);
850 if (securityElementFactory2 !=
null)
852 permission2 = other.CreatePermission(securityElementFactory2, i);
856 IPermission item3 = (permission ==
null) ? permission2 : ((permission2 !=
null) ? permission.Intersect(permission2) : permission);
857 m_permSet.SetItem(i, item3);
859 catch (Exception ex2)
868 m_Unrestricted = (m_Unrestricted && other.m_Unrestricted);
881 if (other ==
null || other.FastIsEmpty() || FastIsEmpty())
885 int num = (m_permSet ==
null) ? (-1) : m_permSet.GetMaxUsedIndex();
886 int num2 = (other.m_permSet ==
null) ? (-1) : other.m_permSet.GetMaxUsedIndex();
887 int num3 = (num < num2) ? num : num2;
901 permissionSet.m_permSet =
new TokenBasedSet();
903 for (
int i = 0; i <= num3; i++)
905 object item = m_permSet.GetItem(i);
907 ISecurityElementFactory securityElementFactory = item as ISecurityElementFactory;
908 object item2 = other.m_permSet.GetItem(i);
910 ISecurityElementFactory securityElementFactory2 = item2 as ISecurityElementFactory;
911 if (item ==
null && item2 ==
null)
915 if (securityElementFactory !=
null && securityElementFactory2 !=
null)
920 securityElement.
AddAttribute(
"class", securityElementFactory2.Attribute(
"class"));
924 securityElement2.
AddAttribute(
"class", securityElementFactory.Attribute(
"class"));
925 SafeChildAdd(securityElement2, securityElementFactory, copy:
true);
927 securityElementFactory = securityElement2;
932 securityElement3.
AddAttribute(
"class", securityElementFactory2.Attribute(
"class"));
933 SafeChildAdd(securityElement3, securityElementFactory2, copy:
true);
935 securityElementFactory2 = securityElement3;
937 SafeChildAdd(securityElement, securityElementFactory2, copy);
938 SafeChildAdd(securityElement, securityElementFactory, copy2);
939 permissionSet.m_permSet.SetItem(i, securityElement);
941 else if (item ==
null)
947 if (securityElementFactory2 !=
null)
950 securityElement4.
AddAttribute(
"class", securityElementFactory2.Attribute(
"class"));
951 SafeChildAdd(securityElement4, securityElementFactory2, copy:
true);
952 permissionSet.m_permSet.SetItem(i, securityElement4);
954 else if (permission2 !=
null)
956 PermissionToken permissionToken = (PermissionToken)PermissionToken.s_tokenSet.GetItem(i);
957 if ((permissionToken.m_type & PermissionTokenType.IUnrestricted) != 0)
959 permissionSet.m_permSet.SetItem(i, permission2.
Copy());
963 else if (item2 ==
null)
965 if (!other.m_Unrestricted)
969 if (securityElementFactory !=
null)
972 securityElement5.
AddAttribute(
"class", securityElementFactory.Attribute(
"class"));
973 SafeChildAdd(securityElement5, securityElementFactory, copy:
true);
974 permissionSet.m_permSet.SetItem(i, securityElement5);
976 else if (permission !=
null)
978 PermissionToken permissionToken2 = (PermissionToken)PermissionToken.s_tokenSet.GetItem(i);
979 if ((permissionToken2.m_type & PermissionTokenType.IUnrestricted) != 0)
981 permissionSet.m_permSet.SetItem(i, permission.
Copy());
987 if (securityElementFactory !=
null)
989 permission = CreatePermission(securityElementFactory, i);
991 if (securityElementFactory2 !=
null)
993 permission2 = other.CreatePermission(securityElementFactory2, i);
995 IPermission item3 = (permission ==
null) ? permission2 : ((permission2 !=
null) ? permission.
Intersect(permission2) : permission);
996 permissionSet.m_permSet.SetItem(i, item3);
999 permissionSet.m_Unrestricted = (m_Unrestricted && other.m_Unrestricted);
1000 if (permissionSet.FastIsEmpty())
1004 return permissionSet;
1009 if (
this == other || other ==
null || other.FastIsEmpty())
1013 m_CheckedForNonCas =
false;
1014 m_Unrestricted = (m_Unrestricted || other.m_Unrestricted);
1021 if (other.m_permSet !=
null)
1023 num = other.m_permSet.GetMaxUsedIndex();
1026 Exception ex =
null;
1027 for (
int i = 0; i <= num; i++)
1029 object item = m_permSet.GetItem(i);
1030 IPermission permission = item as IPermission;
1031 ISecurityElementFactory securityElementFactory = item as ISecurityElementFactory;
1032 object item2 = other.m_permSet.GetItem(i);
1033 IPermission permission2 = item2 as IPermission;
1034 ISecurityElementFactory securityElementFactory2 = item2 as ISecurityElementFactory;
1035 if (item ==
null && item2 ==
null)
1039 if (securityElementFactory !=
null && securityElementFactory2 !=
null)
1041 if (securityElementFactory.GetTag().Equals(
"PermissionUnion") || securityElementFactory.GetTag().Equals(
"PermissionUnrestrictedUnion"))
1043 SafeChildAdd((SecurityElement)securityElementFactory, securityElementFactory2, copy:
true);
1046 SecurityElement securityElement = (!
IsUnrestricted() && !other.
IsUnrestricted()) ?
new SecurityElement(
"PermissionUnion") :
new SecurityElement(
"PermissionUnrestrictedUnion");
1047 securityElement.AddAttribute(
"class", securityElementFactory.Attribute(
"class"));
1048 SafeChildAdd(securityElement, securityElementFactory, copy:
false);
1049 SafeChildAdd(securityElement, securityElementFactory2, copy:
true);
1050 m_permSet.SetItem(i, securityElement);
1052 else if (item ==
null)
1054 if (securityElementFactory2 !=
null)
1056 m_permSet.SetItem(i, securityElementFactory2.Copy());
1058 else if (permission2 !=
null)
1060 PermissionToken permissionToken = (PermissionToken)PermissionToken.s_tokenSet.GetItem(i);
1061 if ((permissionToken.m_type & PermissionTokenType.IUnrestricted) == (PermissionTokenType)0 || !m_Unrestricted)
1063 m_permSet.SetItem(i, permission2.Copy());
1067 else if (item2 !=
null)
1069 if (securityElementFactory !=
null)
1071 permission = CreatePermission(securityElementFactory, i);
1073 if (securityElementFactory2 !=
null)
1075 permission2 = other.CreatePermission(securityElementFactory2, i);
1079 IPermission item3 = (permission ==
null) ? permission2 : ((permission2 !=
null) ? permission.Union(permission2) : permission);
1080 m_permSet.SetItem(i, item3);
1082 catch (Exception ex2)
1103 if (other ==
null || other.FastIsEmpty())
1109 return other.
Copy();
1113 permissionSet.m_Unrestricted = (m_Unrestricted || other.m_Unrestricted);
1114 if (permissionSet.m_Unrestricted)
1116 return permissionSet;
1120 num = ((m_permSet.GetMaxUsedIndex() > other.m_permSet.GetMaxUsedIndex()) ? m_permSet.GetMaxUsedIndex() : other.m_permSet.GetMaxUsedIndex());
1121 permissionSet.m_permSet =
new TokenBasedSet();
1122 for (
int i = 0; i <= num; i++)
1124 object item = m_permSet.GetItem(i);
1126 ISecurityElementFactory securityElementFactory = item as ISecurityElementFactory;
1127 object item2 = other.m_permSet.GetItem(i);
1129 ISecurityElementFactory securityElementFactory2 = item2 as ISecurityElementFactory;
1130 if (item ==
null && item2 ==
null)
1134 if (securityElementFactory !=
null && securityElementFactory2 !=
null)
1137 securityElement.
AddAttribute(
"class", securityElementFactory.Attribute(
"class"));
1138 SafeChildAdd(securityElement, securityElementFactory, copy:
true);
1139 SafeChildAdd(securityElement, securityElementFactory2, copy:
true);
1140 permissionSet.m_permSet.SetItem(i, securityElement);
1142 else if (item ==
null)
1144 if (securityElementFactory2 !=
null)
1146 permissionSet.m_permSet.SetItem(i, securityElementFactory2.Copy());
1148 else if (permission2 !=
null)
1150 PermissionToken permissionToken = (PermissionToken)PermissionToken.s_tokenSet.GetItem(i);
1151 if ((permissionToken.m_type & PermissionTokenType.IUnrestricted) == (PermissionTokenType)0 || !permissionSet.m_Unrestricted)
1153 permissionSet.m_permSet.SetItem(i, permission2.
Copy());
1157 else if (item2 ==
null)
1159 if (securityElementFactory !=
null)
1161 permissionSet.m_permSet.SetItem(i, securityElementFactory.Copy());
1163 else if (permission !=
null)
1165 PermissionToken permissionToken2 = (PermissionToken)PermissionToken.s_tokenSet.GetItem(i);
1166 if ((permissionToken2.m_type & PermissionTokenType.IUnrestricted) == (PermissionTokenType)0 || !permissionSet.m_Unrestricted)
1168 permissionSet.m_permSet.SetItem(i, permission.
Copy());
1174 if (securityElementFactory !=
null)
1176 permission = CreatePermission(securityElementFactory, i);
1178 if (securityElementFactory2 !=
null)
1180 permission2 = other.CreatePermission(securityElementFactory2, i);
1182 IPermission item3 = (permission ==
null) ? permission2 : ((permission2 !=
null) ? permission.
Union(permission2) : permission);
1183 permissionSet.m_permSet.SetItem(i, item3);
1186 return permissionSet;
1191 if (denied ==
null || denied.FastIsEmpty() || FastIsEmpty())
1195 m_CheckedForNonCas =
false;
1196 if (m_permSet ==
null || denied.m_permSet ==
null)
1200 int num = (denied.m_permSet.GetMaxUsedIndex() > m_permSet.GetMaxUsedIndex()) ? m_permSet.GetMaxUsedIndex() : denied.m_permSet.GetMaxUsedIndex();
1201 for (
int i = 0; i <= num; i++)
1203 IPermission permission = denied.m_permSet.GetItem(i) as IPermission;
1204 if (permission !=
null)
1206 IPermission permission2 = m_permSet.GetItem(i) as IPermission;
1207 if (permission2 ==
null && !m_Unrestricted)
1209 denied.m_permSet.SetItem(i,
null);
1211 else if (permission2 !=
null && permission !=
null && permission2.IsSubsetOf(permission))
1213 m_permSet.SetItem(i,
null);
1214 denied.m_permSet.SetItem(i,
null);
1220 internal bool Contains(IPermission perm)
1234 PermissionToken token = PermissionToken.GetToken(perm);
1235 object item = m_permSet.GetItem(token.m_index);
1238 return perm.IsSubsetOf(
null);
1240 IPermission permission = GetPermission(token.m_index);
1241 if (permission !=
null)
1243 return perm.IsSubsetOf(permission);
1245 return perm.IsSubsetOf(
null);
1256 if (permissionSet ==
null)
1260 if (m_Unrestricted != permissionSet.m_Unrestricted)
1265 permissionSet.CheckSet();
1266 DecodeAllPermissions();
1267 permissionSet.DecodeAllPermissions();
1268 int num =
Math.
Max(m_permSet.GetMaxUsedIndex(), permissionSet.m_permSet.GetMaxUsedIndex());
1269 for (
int i = 0; i <= num; i++)
1273 if (permission ==
null && permission2 ==
null)
1277 if (permission ==
null)
1284 else if (permission2 ==
null)
1291 else if (!permission.Equals(permission2))
1304 int num = m_Unrestricted ? (-1) : 0;
1305 if (m_permSet !=
null)
1307 DecodeAllPermissions();
1308 int maxUsedIndex = m_permSet.GetMaxUsedIndex();
1309 for (
int i = m_permSet.GetStartingIndex(); i <= maxUsedIndex; i++)
1312 if (permission !=
null)
1314 num ^= permission.GetHashCode();
1324 [SecuritySafeCritical]
1332 StackCrawlMark stackMark = StackCrawlMark.LookForMyCallersCaller;
1333 CodeAccessSecurityEngine.Check(GetCasOnlySet(), ref stackMark);
1335 if (m_ContainsNonCas)
1343 internal void DemandNonCAS()
1346 if (!m_ContainsNonCas || m_permSet ==
null)
1351 for (
int i = m_permSet.GetStartingIndex(); i <= m_permSet.GetMaxUsedIndex(); i++)
1353 IPermission permission = GetPermission(i);
1354 if (permission !=
null && !(permission is CodeAccessPermission))
1356 permission.Demand();
1364 [SecuritySafeCritical]
1367 StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
1368 SecurityRuntime.Assert(
this, ref stackMark);
1374 [SecuritySafeCritical]
1375 [Obsolete(
"Deny is obsolete and will be removed in a future release of the .NET Framework. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")]
1378 StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
1379 SecurityRuntime.Deny(
this, ref stackMark);
1384 [SecuritySafeCritical]
1387 StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
1388 SecurityRuntime.PermitOnly(
this, ref stackMark);
1398 return enumerator.
Current as IPermission;
1416 return permissionSet;
1430 return new PermissionSetEnumerator(
this);
1433 internal PermissionSetEnumeratorInternal GetEnumeratorInternal()
1435 return new PermissionSetEnumeratorInternal(
this);
1445 private void NormalizePermissionSet()
1448 permissionSet.m_Unrestricted = m_Unrestricted;
1449 if (m_permSet !=
null)
1451 for (
int i = m_permSet.GetStartingIndex(); i <= m_permSet.GetMaxUsedIndex(); i++)
1453 object item = m_permSet.GetItem(i);
1455 ISecurityElementFactory securityElementFactory = item as ISecurityElementFactory;
1456 if (securityElementFactory !=
null)
1458 permission = CreatePerm(securityElementFactory);
1460 if (permission !=
null)
1466 m_permSet = permissionSet.m_permSet;
1471 if (data !=
null && data.Length != 0)
1473 FromXml(
new Parser(data, Tokenizer.ByteTokenEncoding.UnicodeTokens).GetTopElement());
1475 FilterHostProtectionPermissions(fullTrustOnlyResources, inaccessibleResources);
1476 DecodeAllPermissions();
1480 private void DecodeAllPermissions()
1482 if (m_permSet ==
null)
1484 m_allPermissionsDecoded =
true;
1487 int maxUsedIndex = m_permSet.GetMaxUsedIndex();
1488 for (
int i = 0; i <= maxUsedIndex; i++)
1492 m_allPermissionsDecoded =
true;
1497 HostProtectionPermission.protectedResources = fullTrustOnly;
1498 HostProtectionPermission hostProtectionPermission = (HostProtectionPermission)GetPermission(HostProtectionPermission.GetTokenIndex());
1499 if (hostProtectionPermission !=
null)
1501 HostProtectionPermission hostProtectionPermission2 = (HostProtectionPermission)hostProtectionPermission.
Intersect(
new HostProtectionPermission(fullTrustOnly));
1502 if (hostProtectionPermission2 ==
null)
1504 RemovePermission(typeof(HostProtectionPermission));
1506 else if (hostProtectionPermission2.Resources != hostProtectionPermission.Resources)
1519 FromXml(et, allowInternalOnly:
false, ignoreTypeLoadFailures:
false);
1522 internal static bool IsPermissionTag(
string tag,
bool allowInternalOnly)
1524 if (tag.Equals(
"Permission") || tag.Equals(
"IPermission"))
1528 if (allowInternalOnly && (tag.Equals(
"PermissionUnion") || tag.Equals(
"PermissionIntersection") || tag.Equals(
"PermissionUnrestrictedIntersection") || tag.Equals(
"PermissionUnrestrictedUnion")))
1535 internal virtual void FromXml(SecurityElement et,
bool allowInternalOnly,
bool ignoreTypeLoadFailures)
1539 throw new ArgumentNullException(
"et");
1541 if (!et.Tag.Equals(
"PermissionSet"))
1543 throw new ArgumentException(
string.Format(
null, Environment.GetResourceString(
"Argument_InvalidXMLElement"),
"PermissionSet", GetType().FullName));
1546 m_ignoreTypeLoadFailures = ignoreTypeLoadFailures;
1547 m_allPermissionsDecoded =
false;
1548 m_Unrestricted = XMLUtil.IsUnrestricted(et);
1549 if (et.InternalChildren ==
null)
1553 int count = et.InternalChildren.Count;
1554 for (
int i = 0; i < count; i++)
1556 SecurityElement securityElement = (SecurityElement)et.Children[i];
1557 if (!IsPermissionTag(securityElement.Tag, allowInternalOnly))
1561 string text = securityElement.Attribute(
"class");
1562 PermissionToken permissionToken;
1566 permissionToken = PermissionToken.GetToken(text);
1567 if (permissionToken ==
null)
1569 obj = CreatePerm(securityElement);
1572 permissionToken = PermissionToken.GetToken((IPermission)obj);
1577 obj = securityElement;
1582 IPermission permission = CreatePerm(securityElement);
1583 if (permission ==
null)
1585 permissionToken =
null;
1590 permissionToken = PermissionToken.GetToken(permission);
1594 if (permissionToken !=
null && obj !=
null)
1596 if (m_permSet ==
null)
1598 m_permSet =
new TokenBasedSet();
1600 if (m_permSet.GetItem(permissionToken.m_index) !=
null)
1602 IPermission target = (!(m_permSet.GetItem(permissionToken.m_index) is IPermission)) ? CreatePerm((SecurityElement)m_permSet.GetItem(permissionToken.m_index)) : ((IPermission)m_permSet.GetItem(permissionToken.m_index));
1603 obj = ((!(obj is IPermission)) ? CreatePerm((SecurityElement)obj).
Union(target) : ((IPermission)obj).
Union(target));
1605 if (m_Unrestricted && obj is IPermission)
1609 m_permSet.SetItem(permissionToken.m_index, obj);
1614 internal virtual void FromXml(SecurityDocument doc,
int position,
bool allowInternalOnly)
1618 throw new ArgumentNullException(
"doc");
1620 if (!doc.GetTagForElement(position).Equals(
"PermissionSet"))
1622 throw new ArgumentException(
string.Format(
null, Environment.GetResourceString(
"Argument_InvalidXMLElement"),
"PermissionSet", GetType().FullName));
1625 m_allPermissionsDecoded =
false;
1626 Exception ex =
null;
1627 string attributeForElement = doc.GetAttributeForElement(position,
"Unrestricted");
1628 if (attributeForElement !=
null)
1630 m_Unrestricted = (attributeForElement.Equals(
"True") || attributeForElement.Equals(
"true") || attributeForElement.Equals(
"TRUE"));
1634 m_Unrestricted =
false;
1636 ArrayList childrenPositionForElement = doc.GetChildrenPositionForElement(position);
1637 int count = childrenPositionForElement.
Count;
1638 for (
int i = 0; i < count; i++)
1640 int position2 = (int)childrenPositionForElement[i];
1641 if (IsPermissionTag(doc.GetTagForElement(position2), allowInternalOnly))
1645 string attributeForElement2 = doc.GetAttributeForElement(position2,
"class");
1646 PermissionToken permissionToken;
1648 if (attributeForElement2 !=
null)
1650 permissionToken = PermissionToken.GetToken(attributeForElement2);
1651 if (permissionToken ==
null)
1653 obj = CreatePerm(doc.GetElement(position2, bCreate:
true));
1656 permissionToken = PermissionToken.GetToken((IPermission)obj);
1661 obj = ((ISecurityElementFactory)
new SecurityDocumentElement(doc, position2)).CreateSecurityElement();
1666 IPermission permission = CreatePerm(doc.GetElement(position2, bCreate:
true));
1667 if (permission ==
null)
1669 permissionToken =
null;
1674 permissionToken = PermissionToken.GetToken(permission);
1678 if (permissionToken !=
null && obj !=
null)
1680 if (m_permSet ==
null)
1682 m_permSet =
new TokenBasedSet();
1684 IPermission permission2 =
null;
1685 if (m_permSet.GetItem(permissionToken.m_index) !=
null)
1687 permission2 = ((!(m_permSet.GetItem(permissionToken.m_index) is IPermission)) ? CreatePerm(m_permSet.GetItem(permissionToken.m_index)) : ((IPermission)m_permSet.GetItem(permissionToken.m_index)));
1689 if (permission2 !=
null)
1691 obj = ((!(obj is IPermission)) ? permission2.Union(CreatePerm(obj)) : permission2.Union((IPermission)obj));
1693 if (m_Unrestricted && obj is IPermission)
1697 m_permSet.SetItem(permissionToken.m_index, obj);
1700 catch (Exception ex2)
1715 private IPermission CreatePerm(
object obj)
1717 return CreatePerm(obj, m_ignoreTypeLoadFailures);
1720 internal static IPermission CreatePerm(
object obj,
bool ignoreTypeLoadFailures)
1722 SecurityElement securityElement = obj as SecurityElement;
1723 ISecurityElementFactory securityElementFactory = obj as ISecurityElementFactory;
1724 if (securityElement ==
null && securityElementFactory !=
null)
1726 securityElement = securityElementFactory.CreateSecurityElement();
1728 IPermission permission =
null;
1729 switch (securityElement.Tag)
1731 case "PermissionUnion":
1733 IEnumerator enumerator = securityElement.Children.GetEnumerator();
1736 IPermission permission5 = CreatePerm((SecurityElement)enumerator.
Current, ignoreTypeLoadFailures);
1737 permission = ((permission ==
null) ? permission5 : permission.Union(permission5));
1741 case "PermissionIntersection":
1743 IEnumerator enumerator = securityElement.Children.GetEnumerator();
1746 IPermission permission3 = CreatePerm((SecurityElement)enumerator.
Current, ignoreTypeLoadFailures);
1747 permission = ((permission ==
null) ? permission3 : permission.Intersect(permission3));
1748 if (permission ==
null)
1755 case "PermissionUnrestrictedUnion":
1757 IEnumerator enumerator = securityElement.Children.GetEnumerator();
1761 IPermission permission4 = CreatePerm((SecurityElement)enumerator.
Current, ignoreTypeLoadFailures);
1762 if (permission4 !=
null)
1764 PermissionToken token2 = PermissionToken.GetToken(permission4);
1765 if ((token2.m_type & PermissionTokenType.IUnrestricted) != 0)
1767 permission = XMLUtil.CreatePermission(GetPermissionElement((SecurityElement)enumerator.
Current),
PermissionState.Unrestricted, ignoreTypeLoadFailures);
1771 permission = ((!flag) ? permission4.Union(permission) : permission4);
1777 case "PermissionUnrestrictedIntersection":
1779 IEnumerator enumerator = securityElement.Children.GetEnumerator();
1782 IPermission permission2 = CreatePerm((SecurityElement)enumerator.
Current, ignoreTypeLoadFailures);
1783 if (permission2 ==
null)
1787 PermissionToken token = PermissionToken.GetToken(permission2);
1788 permission = (((token.m_type & PermissionTokenType.IUnrestricted) == (PermissionTokenType)0) ?
null : ((permission ==
null) ? permission2 : permission2.Intersect(permission)));
1789 if (permission ==
null)
1798 permission = securityElement.ToPermission(ignoreTypeLoadFailures);
1804 internal IPermission CreatePermission(
object obj,
int index)
1806 IPermission permission = CreatePerm(obj);
1807 if (permission ==
null)
1816 m_permSet.SetItem(index, permission);
1817 if (permission !=
null)
1819 PermissionToken token = PermissionToken.GetToken(permission);
1820 if (token !=
null && token.m_index != index)
1822 throw new ArgumentException(Environment.GetResourceString(
"Argument_UnableToGeneratePermissionSet"));
1828 private static SecurityElement GetPermissionElement(SecurityElement el)
1830 string tag = el.Tag;
1831 if (tag ==
"IPermission" || tag ==
"Permission")
1835 IEnumerator enumerator = el.Children.GetEnumerator();
1838 return GetPermissionElement((SecurityElement)enumerator.
Current);
1843 internal static SecurityElement CreateEmptyPermissionSetXml()
1845 SecurityElement securityElement =
new SecurityElement(
"PermissionSet");
1846 securityElement.AddAttribute(
"class",
"System.Security.PermissionSet");
1847 securityElement.AddAttribute(
"version",
"1");
1848 return securityElement;
1851 internal SecurityElement
ToXml(
string permName)
1853 SecurityElement securityElement =
new SecurityElement(
"PermissionSet");
1854 securityElement.AddAttribute(
"class", permName);
1855 securityElement.AddAttribute(
"version",
"1");
1856 PermissionSetEnumeratorInternal permissionSetEnumeratorInternal =
new PermissionSetEnumeratorInternal(
this);
1859 securityElement.AddAttribute(
"Unrestricted",
"true");
1861 while (permissionSetEnumeratorInternal.MoveNext())
1863 IPermission permission = (IPermission)permissionSetEnumeratorInternal.Current;
1864 if (!m_Unrestricted)
1866 securityElement.AddChild(permission.ToXml());
1869 return securityElement;
1872 internal SecurityElement InternalToXml()
1874 SecurityElement securityElement =
new SecurityElement(
"PermissionSet");
1875 securityElement.AddAttribute(
"class", GetType().FullName);
1876 securityElement.AddAttribute(
"version",
"1");
1879 securityElement.AddAttribute(
"Unrestricted",
"true");
1881 if (m_permSet !=
null)
1883 int maxUsedIndex = m_permSet.GetMaxUsedIndex();
1884 for (
int i = m_permSet.GetStartingIndex(); i <= maxUsedIndex; i++)
1886 object item = m_permSet.GetItem(i);
1891 if (item is IPermission)
1893 if (!m_Unrestricted)
1895 securityElement.AddChild(((IPermission)item).
ToXml());
1900 securityElement.AddChild((SecurityElement)item);
1904 return securityElement;
1911 return ToXml(
"System.Security.PermissionSet");
1914 internal byte[] EncodeXml()
1919 binaryWriter.
Flush();
1921 int num = (int)memoryStream.
Length - 2;
1922 byte[] array =
new byte[num];
1923 memoryStream.
Read(array, 0, array.Length);
1933 [Obsolete(
"This method is obsolete and shoud no longer be used.")]
1944 if (m_CheckedForNonCas)
1946 return m_ContainsNonCas;
1950 if (m_CheckedForNonCas)
1952 return m_ContainsNonCas;
1954 m_ContainsCas =
false;
1955 m_ContainsNonCas =
false;
1958 m_ContainsCas =
true;
1960 if (m_permSet !=
null)
1962 PermissionSetEnumeratorInternal permissionSetEnumeratorInternal =
new PermissionSetEnumeratorInternal(
this);
1963 while (permissionSetEnumeratorInternal.MoveNext() && (!m_ContainsCas || !m_ContainsNonCas))
1966 if (permission !=
null)
1970 m_ContainsCas =
true;
1974 m_ContainsNonCas =
true;
1979 m_CheckedForNonCas =
true;
1981 return m_ContainsNonCas;
1986 if (!m_ContainsNonCas)
1994 PermissionSet permissionSet =
new PermissionSet(fUnrestricted:
false);
1995 PermissionSetEnumeratorInternal permissionSetEnumeratorInternal =
new PermissionSetEnumeratorInternal(
this);
1996 while (permissionSetEnumeratorInternal.MoveNext())
1998 IPermission permission = (IPermission)permissionSetEnumeratorInternal.Current;
1999 if (permission is CodeAccessPermission)
2001 permissionSet.AddPermission(permission);
2004 permissionSet.m_CheckedForNonCas =
true;
2005 permissionSet.m_ContainsCas = !permissionSet.IsEmpty();
2006 permissionSet.m_ContainsNonCas =
false;
2007 return permissionSet;
2011 private static void SetupSecurity()
2015 StrongNamePublicKeyBlob blob =
new StrongNamePublicKeyBlob(
"002400000480000094000000060200000024000052534131000400000100010007D1FA57C4AED9F0A32E84AA0FAEFD0DE9E8FD6AEC8F87FB03766C834C99921EB23BE79AD9D5DCC1DD9AD236132102900B723CF980957FC4E177108FC607774F29E8320E92EA05ECE4E821C0A5EFE8F1645C4C0C93C1AB99285D622CAA652C1DFAD63D745D6F2DE5F17E5EAF0FC4963D261C8A12436518206DC093344D5AD293");
2026 AppDomain.CurrentDomain.SetAppDomainPolicy(policyLevel);
2033 private static void MergePermission(IPermission perm,
bool separateCasFromNonCas, ref PermissionSet casPset, ref PermissionSet nonCasPset)
2039 if (!separateCasFromNonCas || perm is CodeAccessPermission)
2041 if (casPset ==
null)
2043 casPset =
new PermissionSet(fUnrestricted:
false);
2045 IPermission permission = casPset.GetPermission(perm);
2046 IPermission target = casPset.AddPermission(perm);
2047 if (permission !=
null && !permission.IsSubsetOf(target))
2049 throw new NotSupportedException(Environment.GetResourceString(
"NotSupported_DeclarativeUnion"));
2054 if (nonCasPset ==
null)
2056 nonCasPset =
new PermissionSet(fUnrestricted:
false);
2058 IPermission permission2 = nonCasPset.GetPermission(perm);
2059 IPermission target2 = nonCasPset.AddPermission(perm);
2060 if (permission2 !=
null && !permission2.IsSubsetOf(target2))
2062 throw new NotSupportedException(Environment.GetResourceString(
"NotSupported_DeclarativeUnion"));
2067 private static byte[] CreateSerialized(
object[] attrs,
bool serialize, ref
byte[] nonCasBlob, out PermissionSet casPset,
HostProtectionResource fullTrustOnlyResources,
bool allowEmptyPermissionSets)
2070 PermissionSet nonCasPset =
null;
2071 for (
int i = 0; i < attrs.Length; i++)
2076 if (permissionSet ==
null)
2078 throw new ArgumentException(Environment.GetResourceString(
"Argument_UnableToGeneratePermissionSet"));
2080 PermissionSetEnumeratorInternal permissionSetEnumeratorInternal =
new PermissionSetEnumeratorInternal(permissionSet);
2081 while (permissionSetEnumeratorInternal.MoveNext())
2083 IPermission perm = (IPermission)permissionSetEnumeratorInternal.Current;
2084 MergePermission(perm, serialize, ref casPset, ref nonCasPset);
2086 if (casPset ==
null)
2088 casPset =
new PermissionSet(fUnrestricted:
false);
2090 if (permissionSet.IsUnrestricted())
2092 casPset.SetUnrestricted(unrestricted:
true);
2098 MergePermission(perm2, serialize, ref casPset, ref nonCasPset);
2101 if (casPset !=
null)
2104 casPset.ContainsNonCodeAccessPermissions();
2105 if (allowEmptyPermissionSets && casPset.IsEmpty())
2110 if (nonCasPset !=
null)
2113 nonCasPset.ContainsNonCodeAccessPermissions();
2114 if (allowEmptyPermissionSets && nonCasPset.IsEmpty())
2119 byte[] result =
null;
2123 if (casPset !=
null)
2125 result = casPset.EncodeXml();
2127 if (nonCasPset !=
null)
2129 nonCasBlob = nonCasPset.EncodeXml();
2139 NormalizePermissionSet();
2140 m_CheckedForNonCas =
false;
2146 [SecuritySafeCritical]
2149 StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
2150 SecurityRuntime.RevertAssert(ref stackMark);
2156 bFailedToCompress =
false;
2157 if (assertSet ==
null)
2161 if (refusedSet !=
null)
2167 PermissionSetEnumeratorInternal permissionSetEnumeratorInternal =
new PermissionSetEnumeratorInternal(refusedSet);
2168 while (permissionSetEnumeratorInternal.MoveNext())
2170 CodeAccessPermission codeAccessPermission = (CodeAccessPermission)permissionSetEnumeratorInternal.Current;
2171 int currentIndex = permissionSetEnumeratorInternal.GetCurrentIndex();
2172 if (codeAccessPermission !=
null)
2174 CodeAccessPermission codeAccessPermission2 = (CodeAccessPermission)assertSet.GetPermission(currentIndex);
2177 if (codeAccessPermission.Intersect(codeAccessPermission2) !=
null)
2179 if (!codeAccessPermission.Equals(codeAccessPermission2))
2181 bFailedToCompress =
true;
2184 if (permissionSet ==
null)
2186 permissionSet = assertSet.
Copy();
2188 permissionSet.RemovePermission(currentIndex);
2191 catch (ArgumentException)
2193 if (permissionSet ==
null)
2195 permissionSet = assertSet.
Copy();
2197 permissionSet.RemovePermission(currentIndex);
2202 if (permissionSet !=
null)
2204 return permissionSet;
2209 internal static void RemoveAssertedPermissionSet(PermissionSet demandSet, PermissionSet assertSet, out PermissionSet alteredDemandSet)
2211 alteredDemandSet =
null;
2212 PermissionSetEnumeratorInternal permissionSetEnumeratorInternal =
new PermissionSetEnumeratorInternal(demandSet);
2213 while (permissionSetEnumeratorInternal.MoveNext())
2215 CodeAccessPermission codeAccessPermission = (CodeAccessPermission)permissionSetEnumeratorInternal.Current;
2216 int currentIndex = permissionSetEnumeratorInternal.GetCurrentIndex();
2217 if (codeAccessPermission !=
null)
2219 CodeAccessPermission asserted = (CodeAccessPermission)assertSet.GetPermission(currentIndex);
2222 if (codeAccessPermission.CheckAssert(asserted))
2224 if (alteredDemandSet ==
null)
2226 alteredDemandSet = demandSet.Copy();
2228 alteredDemandSet.RemovePermission(currentIndex);
2231 catch (ArgumentException)
2238 internal static bool IsIntersectingAssertedPermissions(PermissionSet assertSet1, PermissionSet assertSet2)
2240 bool result =
false;
2241 if (assertSet1 !=
null && assertSet2 !=
null)
2243 PermissionSetEnumeratorInternal permissionSetEnumeratorInternal =
new PermissionSetEnumeratorInternal(assertSet2);
2244 while (permissionSetEnumeratorInternal.MoveNext())
2246 CodeAccessPermission codeAccessPermission = (CodeAccessPermission)permissionSetEnumeratorInternal.Current;
2247 int currentIndex = permissionSetEnumeratorInternal.GetCurrentIndex();
2248 if (codeAccessPermission !=
null)
2250 CodeAccessPermission codeAccessPermission2 = (CodeAccessPermission)assertSet1.GetPermission(currentIndex);
2253 if (codeAccessPermission2 !=
null && !codeAccessPermission2.Equals(codeAccessPermission))
2258 catch (ArgumentException)
Represents a character encoding.To browse the .NET Framework source code for this type,...
virtual IPermission SetPermissionImpl(IPermission perm)
Sets a permission to the T:System.Security.PermissionSet, replacing any existing permission of the sa...
bool IsUnrestricted()
Determines whether the T:System.Security.PermissionSet is Unrestricted.
virtual IPermission RemovePermissionImpl(Type permClass)
Removes a permission of a certain type from the set.
virtual IEnumerator GetEnumeratorImpl()
Returns an enumerator for the permissions of the set.
The exception that is thrown when a null reference (Nothing in Visual Basic) is passed to a method th...
override int Read([In] [Out] byte[] buffer, int offset, int count)
Reads a block of bytes from the current stream and writes the data to a buffer.
override long Length
Gets the length of the stream in bytes.
bool ContainsNonCodeAccessPermissions()
Gets a value indicating whether the T:System.Security.PermissionSet contains permissions that are not...
void Deny()
Causes any M:System.Security.PermissionSet.Demand that passes through the calling code for a permissi...
virtual IPermission GetPermissionImpl(Type permClass)
Gets a permission object of the specified type, if it exists in the set.
bool MoveNext()
Advances the enumerator to the next element of the collection.
IEnumerator GetEnumerator()
Returns an enumerator for the permissions of the set.
StreamingContextStates State
Gets the source or destination of the transmitted data.
void Demand()
Forces a T:System.Security.SecurityException at run time if all callers higher in the call stack have...
virtual bool IsSynchronized
Gets a value indicating whether the collection is guaranteed to be thread safe.
virtual void Flush()
Clears all buffers for the current writer and causes any buffered data to be written to the underlyin...
static Encoding Unicode
Gets an encoding for the UTF-16 format using the little endian byte order.
Represents the security policy levels for the common language runtime. This class cannot be inherited...
Indicates that a class is to be notified when deserialization of the entire object graph has been com...
virtual int Count
Gets the number of elements actually contained in the T:System.Collections.ArrayList.
BindingFlags
Specifies flags that control binding and the way in which the search for members and types is conduct...
HostProtectionResource
Specifies categories of functionality potentially harmful to the host if invoked by a method or class...
IPermission Copy()
Creates and returns an identical copy of the current permission.
IPermission SetPermission(IPermission perm)
Sets a permission to the T:System.Security.PermissionSet, replacing any existing permission of the sa...
Determines whether an assembly belongs to a code group by testing its strong name....
bool IsSubsetOf(PermissionSet target)
Determines whether the current T:System.Security.PermissionSet is a subset of the specified T:System....
Allows security actions for a T:System.Security.PermissionSet to be applied to code using declarative...
Describes the source and destination of a given serialized stream, and provides an additional caller-...
void AddChild(CodeGroup group)
Adds a child code group to the current code group.
IPermission AddPermission(IPermission perm)
Adds a specified permission to the T:System.Security.PermissionSet.
PermissionSet Union(PermissionSet other)
Creates a T:System.Security.PermissionSet that is the union of the current T:System....
Contains methods to create types of objects locally or remotely, or obtain references to existing rem...
Exposes an enumerator, which supports a simple iteration over a non-generic collection....
SecurityAction
Specifies the security actions that can be performed using declarative security.
Provides information about, and means to manipulate, the current environment and platform....
Creates a stream whose backing store is memory.To browse the .NET Framework source code for this type...
override string ToString()
Returns a string representation of the T:System.Security.PermissionSet.
virtual bool IsReadOnly
Gets a value indicating whether the collection is read-only.
Represents a collection that can contain many different types of permissions.
void OnDeserialization(object sender)
Runs when the entire object graph has been deserialized.
bool IsEmpty()
Gets a value indicating whether the T:System.Security.PermissionSet is empty.
Represents the XML object model for encoding security objects. This class cannot be inherited.
static sbyte Max(sbyte val1, sbyte val2)
Returns the larger of two 8-bit signed integers.
IPermission RemovePermission(Type permClass)
Removes a permission of a certain type from the set.
Specifies the base attribute class for declarative security from which T:System.Security....
virtual SecurityElement ToXml()
Creates an XML encoding of the security object and its current state.
Defines the methods that convert permission object state to and from XML element representation.
virtual void FromXml(SecurityElement et)
Reconstructs a security object with a specified state from an XML encoding.
object Current
Gets the element in the collection at the current position of the enumerator.
Defines the underlying structure of all code access permissions.
Represents the abstract base class from which all implementations of code groups must derive.
Security policy for all managed code in an application.
PermissionSet(PermissionSet permSet)
Initializes a new instance of the T:System.Security.PermissionSet class with initial values taken fro...
Provides methods for creating, manipulating, searching, and sorting arrays, thereby serving as the ba...
IPermission Intersect(IPermission target)
Creates and returns a permission that is the intersection of the current permission and the specified...
Represents type declarations: class types, interface types, array types, value types,...
virtual void Write(bool value)
Writes a one-byte Boolean value to the current stream, with 0 representing false and 1 representing t...
CodeGroup RootCodeGroup
Gets or sets the root code group for the policy level.
MethodImplOptions
Defines the details of how a method is implemented.
PermissionSet(PermissionState state)
Initializes a new instance of the T:System.Security.PermissionSet class with the specified T:System....
Represents a membership condition that matches all code. This class cannot be inherited.
override bool Equals(object obj)
Determines whether the specified T:System.Security.PermissionSet or T:System.Security....
Defines methods implemented by permission types.
PermissionSet Intersect(PermissionSet other)
Creates and returns a permission set that is the intersection of the current T:System....
bool IsSubsetOf(IPermission target)
Determines whether the current permission is a subset of the specified permission.
Represents the identity of a software publisher. This class cannot be inherited.
Defines the identity permission for strong names. This class cannot be inherited.
static PolicyLevel CreateAppDomainLevel()
Creates a new policy level for use at the application domain policy level.
The exception that is thrown when one of the arguments provided to a method is not valid.
static object CreateInstance(Type type, BindingFlags bindingAttr, Binder binder, object[] args, CultureInfo culture)
Creates an instance of the specified type using the constructor that best matches the specified param...
Defines the identity permission for the URL from which the code originates. This class cannot be inhe...
Defines the identity permission for the zone from which the code originates. This class cannot be inh...
PermissionState
Specifies whether a permission should have all or no access to resources at creation.
virtual object SyncRoot
Gets the root object of the current collection.
void AddAttribute(string name, string value)
Adds a name/value attribute to an XML element.
IPermission GetPermission(Type permClass)
Gets a permission object of the specified type, if it exists in the set.
Specifies that the class can be serialized.
static byte [] ConvertPermissionSet(string inFormat, byte[] inData, string outFormat)
Converts an encoded T:System.Security.PermissionSet from one XML encoding format to another XML encod...
void Assert()
Declares that the calling code can access the resource protected by a permission demand through the c...
override int GetHashCode()
Gets a hash code for the T:System.Security.PermissionSet object that is suitable for use in hashing a...
virtual PermissionSet Copy()
Creates a copy of the T:System.Security.PermissionSet.
StreamingContextStates
Defines a set of flags that specifies the source or destination context for the stream during seriali...
Determines whether an assembly belongs to a code group by testing its global assembly cache membershi...
Provides constants and static methods for trigonometric, logarithmic, and other common mathematical f...
NamedPermissionSet GetNamedPermissionSet(string name)
Returns the T:System.Security.NamedPermissionSet in the current policy level with the specified name.
Defines size, enumerators, and synchronization methods for all nongeneric collections.
A conditional operation, such as a > b ? a : b in C# or If(a > b, a, b) in Visual Basic.
static void RevertAssert()
Causes any previous M:System.Security.CodeAccessPermission.Assert for the current frame to be removed...
Represents a code group whose policy statement is the union of the current code group's policy statem...
Writes primitive types in binary to a stream and supports writing strings in a specific encoding.
void PermitOnly()
Causes any M:System.Security.PermissionSet.Demand that passes through the calling code for any T:Syst...
virtual void CopyTo(Array array, int index)
Copies the permission objects of the set to the indicated location in an T:System....
Manages the stack walk that determines whether all callers in the call stack have the required permis...
override long Position
Gets or sets the current position within the stream.
The exception that is thrown when policy forbids code to run.
The exception that is thrown when a requested method or operation is not implemented.
Supports a simple iteration over a non-generic collection.
override string ToString()
Produces a string representation of an XML element and its constituent attributes,...
virtual IPermission AddPermissionImpl(IPermission perm)
Adds a specified permission to the T:System.Security.PermissionSet.
Represents the public key information (called a blob) for a strong name. This class cannot be inherit...
virtual int Count
Gets the number of permission objects contained in the permission set.
IPermission Union(IPermission target)
Creates a permission that is the union of the current permission and the specified permission.
Implements the T:System.Collections.IList interface using an array whose size is dynamically increase...
Defines the identity permission for files originating in the global assembly cache....