3 // Copyright (c) Microsoft Corporation. All rights reserved.
7 // <OWNER>[....]</OWNER>
9 // Purpose : This permission is used to controls/administer access to
10 // IsolatedStorageFile
13 namespace System.Security.Permissions {
15 using System.Globalization;
18 [System.Runtime.InteropServices.ComVisible(true)]
19 sealed public class IsolatedStorageFilePermission : IsolatedStoragePermission, IBuiltInPermission
21 public IsolatedStorageFilePermission(PermissionState state)
24 internal IsolatedStorageFilePermission(IsolatedStorageContainment UsageAllowed,
25 long ExpirationDays, bool PermanentData)
26 : base(UsageAllowed, ExpirationDays, PermanentData) { }
28 //------------------------------------------------------
30 // IPERMISSION IMPLEMENTATION
32 //------------------------------------------------------
34 public override IPermission Union(IPermission target)
40 else if (!VerifyType(target))
44 Environment.GetResourceString("Argument_WrongType", this.GetType().FullName)
48 IsolatedStorageFilePermission operand = (IsolatedStorageFilePermission)target;
50 if (this.IsUnrestricted() || operand.IsUnrestricted())
52 return new IsolatedStorageFilePermission( PermissionState.Unrestricted );
56 IsolatedStorageFilePermission union;
57 union = new IsolatedStorageFilePermission( PermissionState.None );
58 union.m_userQuota = max(m_userQuota,operand.m_userQuota);
59 union.m_machineQuota = max(m_machineQuota,operand.m_machineQuota);
60 union.m_expirationDays = max(m_expirationDays,operand.m_expirationDays);
61 union.m_permanentData = m_permanentData || operand.m_permanentData;
62 union.m_allowed = (IsolatedStorageContainment)max((long)m_allowed,(long)operand.m_allowed);
67 public override bool IsSubsetOf(IPermission target)
71 return ((m_userQuota == 0) &&
72 (m_machineQuota == 0) &&
73 (m_expirationDays == 0) &&
74 (m_permanentData == false) &&
75 (m_allowed == IsolatedStorageContainment.None));
80 IsolatedStorageFilePermission operand = (IsolatedStorageFilePermission)target;
82 if (operand.IsUnrestricted())
85 return ((operand.m_userQuota >= m_userQuota) &&
86 (operand.m_machineQuota >= m_machineQuota) &&
87 (operand.m_expirationDays >= m_expirationDays) &&
88 (operand.m_permanentData || !m_permanentData) &&
89 (operand.m_allowed >= m_allowed));
91 catch (InvalidCastException)
95 Environment.GetResourceString("Argument_WrongType", this.GetType().FullName)
101 public override IPermission Intersect(IPermission target)
105 else if (!VerifyType(target))
109 Environment.GetResourceString("Argument_WrongType", this.GetType().FullName)
113 IsolatedStorageFilePermission operand = (IsolatedStorageFilePermission)target;
115 if(operand.IsUnrestricted())
117 else if(IsUnrestricted())
118 return target.Copy();
120 IsolatedStorageFilePermission intersection;
121 intersection = new IsolatedStorageFilePermission( PermissionState.None );
122 intersection.m_userQuota = min(m_userQuota,operand.m_userQuota);
123 intersection.m_machineQuota = min(m_machineQuota,operand.m_machineQuota);
124 intersection.m_expirationDays = min(m_expirationDays,operand.m_expirationDays);
125 intersection.m_permanentData = m_permanentData && operand.m_permanentData;
126 intersection.m_allowed = (IsolatedStorageContainment)min((long)m_allowed,(long)operand.m_allowed);
128 if ((intersection.m_userQuota == 0) &&
129 (intersection.m_machineQuota == 0) &&
130 (intersection.m_expirationDays == 0) &&
131 (intersection.m_permanentData == false) &&
132 (intersection.m_allowed == IsolatedStorageContainment.None))
138 public override IPermission Copy()
140 IsolatedStorageFilePermission copy ;
141 copy = new IsolatedStorageFilePermission(PermissionState.Unrestricted);
142 if(!IsUnrestricted()){
143 copy.m_userQuota = m_userQuota;
144 copy.m_machineQuota = m_machineQuota;
145 copy.m_expirationDays = m_expirationDays;
146 copy.m_permanentData = m_permanentData;
147 copy.m_allowed = m_allowed;
154 int IBuiltInPermission.GetTokenIndex()
156 return IsolatedStorageFilePermission.GetTokenIndex();
159 internal static int GetTokenIndex()
161 return BuiltInPermissionIndex.IsolatedStorageFilePermissionIndex;
164 //------------------------------------------------------
166 // IsolatedStoragePermission OVERRIDES
168 //------------------------------------------------------
169 #if FEATURE_CAS_POLICY
170 [System.Runtime.InteropServices.ComVisible(false)]
171 public override SecurityElement ToXml()
173 return base.ToXml( "System.Security.Permissions.IsolatedStorageFilePermission" );
175 #endif // FEATURE_CAS_POLICY