Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / whidbey / NetFXspW7 / ndp / clr / src / BCL / System / Security / Policy / ApplicationTrust.cs / 2 / ApplicationTrust.cs
// ==++== // // Copyright (c) Microsoft Corporation. All rights reserved. // // ==--== // // ApplicationTrust.cs // // This class encapsulates security decisions about an application. // namespace System.Security.Policy { using System.Collections; using System.Deployment.Internal.Isolation; using System.Deployment.Internal.Isolation.Manifest; using System.Globalization; using System.IO; using System.Runtime.InteropServices; using System.Runtime.Serialization.Formatters.Binary; using System.Security.Permissions; using System.Security.Util; using System.Text; using System.Threading; [System.Runtime.InteropServices.ComVisible(true)] public enum ApplicationVersionMatch { MatchExactVersion, MatchAllVersions } [System.Runtime.InteropServices.ComVisible(true)] [Serializable] public sealed class ApplicationTrust : ISecurityEncodable { private ApplicationIdentity m_appId; private bool m_appTrustedToRun; private bool m_persist; private object m_extraInfo; private SecurityElement m_elExtraInfo; private PolicyStatement m_psDefaultGrant; private StrongName[] m_fullTrustAssemblies; // Permission special flags for the default grant set in this ApplicationTrust. This should be // updated in [....] with any updates to the default grant set. // // In the general case, these values cannot be trusted - we only store a reference to the // DefaultGrantSet, and return the reference directly, which means that code can update the // permission set without our knowledge. That would lead to the flags getting out of [....] with the // grant set. // // However, we only care about these flags when we're creating a homogenous AppDomain, and in that // case we control the ApplicationTrust object end-to-end, and know that the permission set will not // change after the flags are calculated. [NonSerialized] private int m_grantSetSpecialFlags; public ApplicationTrust (ApplicationIdentity applicationIdentity) : this () { ApplicationIdentity = applicationIdentity; } public ApplicationTrust () : this (new PermissionSet(PermissionState.None)) {} internal ApplicationTrust (PermissionSet defaultGrantSet) : this (defaultGrantSet, null) {} internal ApplicationTrust (PermissionSet defaultGrantSet, StrongName[] fullTrustAssemblies) { // Creating a PolicyStatement copies the incoming permission set, so we don't have to worry // about the PermissionSet parameter changing underneath us after we've calculated the // permisison flags in the DefaultGrantSet setter. DefaultGrantSet = new PolicyStatement(defaultGrantSet); FullTrustAssemblies = fullTrustAssemblies; } public ApplicationIdentity ApplicationIdentity { get { return m_appId; } set { if (value == null) throw new ArgumentNullException(Environment.GetResourceString("Argument_InvalidAppId")); m_appId = value; } } public PolicyStatement DefaultGrantSet { get { if (m_psDefaultGrant == null) return new PolicyStatement(new PermissionSet(PermissionState.None)); return m_psDefaultGrant; } set { if (value == null) { m_psDefaultGrant = null; m_grantSetSpecialFlags = 0; } else { m_psDefaultGrant = value; m_grantSetSpecialFlags = SecurityManager.GetSpecialFlags(m_psDefaultGrant.PermissionSet, null); } } } internal StrongName[] FullTrustAssemblies { get { return m_fullTrustAssemblies; } set { m_fullTrustAssemblies = value; } } public bool IsApplicationTrustedToRun { get { return m_appTrustedToRun; } set { m_appTrustedToRun = value; } } public bool Persist { get { return m_persist; } set { m_persist = value; } } public object ExtraInfo { get { if (m_elExtraInfo != null) { m_extraInfo = ObjectFromXml(m_elExtraInfo); m_elExtraInfo = null; } return m_extraInfo; } set { m_elExtraInfo = null; m_extraInfo = value; } } public SecurityElement ToXml () { SecurityElement elRoot = new SecurityElement("ApplicationTrust"); elRoot.AddAttribute("version", "1"); if (m_appId != null) elRoot.AddAttribute("FullName", SecurityElement.Escape(m_appId.FullName)); if (m_appTrustedToRun) elRoot.AddAttribute("TrustedToRun", "true"); if (m_persist) elRoot.AddAttribute("Persist", "true"); if (m_psDefaultGrant != null) { SecurityElement elDefaultGrant = new SecurityElement("DefaultGrant"); elDefaultGrant.AddChild(m_psDefaultGrant.ToXml()); elRoot.AddChild(elDefaultGrant); } if (m_fullTrustAssemblies != null) { SecurityElement elFullTrustAssemblies = new SecurityElement("FullTrustAssemblies"); for (int index = 0; index < m_fullTrustAssemblies.Length; index++) { if (m_fullTrustAssemblies[index] != null) elFullTrustAssemblies.AddChild(m_fullTrustAssemblies[index].ToXml()); } elRoot.AddChild(elFullTrustAssemblies); } if (ExtraInfo != null) elRoot.AddChild(ObjectToXml("ExtraInfo", ExtraInfo)); return elRoot; } public void FromXml (SecurityElement element) { if (element == null) throw new ArgumentNullException("element"); if (String.Compare(element.Tag, "ApplicationTrust", StringComparison.Ordinal) != 0) throw new ArgumentException(Environment.GetResourceString("Argument_InvalidXML")); m_psDefaultGrant = null; m_grantSetSpecialFlags = 0; m_fullTrustAssemblies = null; m_appTrustedToRun = false; string isAppTrustedToRun = element.Attribute("TrustedToRun"); if (isAppTrustedToRun != null && String.Compare(isAppTrustedToRun, "true", StringComparison.Ordinal) == 0) m_appTrustedToRun = true; string persist = element.Attribute("Persist"); if (persist != null && String.Compare(persist, "true", StringComparison.Ordinal) == 0) m_persist = true; string fullName = element.Attribute("FullName"); if (fullName != null && fullName.Length > 0) m_appId = new ApplicationIdentity(fullName); SecurityElement elDefaultGrant = element.SearchForChildByTag("DefaultGrant"); if (elDefaultGrant != null) { SecurityElement elDefaultGrantPS = elDefaultGrant.SearchForChildByTag("PolicyStatement"); if (elDefaultGrantPS != null) { PolicyStatement ps = new PolicyStatement(null); ps.FromXml(elDefaultGrantPS); m_psDefaultGrant = ps; m_grantSetSpecialFlags = SecurityManager.GetSpecialFlags(ps.PermissionSet, null); } } SecurityElement elFullTrustAssemblies = element.SearchForChildByTag("FullTrustAssemblies"); if (elFullTrustAssemblies != null && elFullTrustAssemblies.InternalChildren != null) { m_fullTrustAssemblies = new StrongName[elFullTrustAssemblies.Children.Count]; IEnumerator enumerator = elFullTrustAssemblies.Children.GetEnumerator(); int index = 0; while (enumerator.MoveNext()) { m_fullTrustAssemblies[index] = new StrongName(); m_fullTrustAssemblies[index].FromXml(enumerator.Current as SecurityElement); index++; } } m_elExtraInfo = element.SearchForChildByTag("ExtraInfo"); } private static SecurityElement ObjectToXml (string tag, Object obj) { BCLDebug.Assert(obj != null, "You need to pass in an object"); ISecurityEncodable encodableObj = obj as ISecurityEncodable; SecurityElement elObject; if (encodableObj != null) { elObject = encodableObj.ToXml(); if (!elObject.Tag.Equals(tag)) throw new ArgumentException(Environment.GetResourceString("Argument_InvalidXML")); } MemoryStream stream = new MemoryStream(); BinaryFormatter formatter = new BinaryFormatter(); formatter.Serialize(stream, obj); byte[] array = stream.ToArray(); elObject = new SecurityElement(tag); elObject.AddAttribute("Data", Hex.EncodeHexString(array)); return elObject; } private static Object ObjectFromXml (SecurityElement elObject) { BCLDebug.Assert(elObject != null, "You need to pass in a security element"); if (elObject.Attribute("class") != null) { ISecurityEncodable encodableObj = XMLUtil.CreateCodeGroup(elObject) as ISecurityEncodable; if (encodableObj != null) { encodableObj.FromXml(elObject); return encodableObj; } } string objectData = elObject.Attribute("Data"); MemoryStream stream = new MemoryStream(Hex.DecodeHexString(objectData)); BinaryFormatter formatter = new BinaryFormatter(); return formatter.Deserialize(stream); } } [SecurityPermissionAttribute(SecurityAction.LinkDemand, Flags=SecurityPermissionFlag.ControlPolicy)] [System.Runtime.InteropServices.ComVisible(true)] public sealed class ApplicationTrustCollection : ICollection { private const string ApplicationTrustProperty = "ApplicationTrust"; private const string InstallerIdentifier = "{60051b8f-4f12-400a-8e50-dd05ebd438d1}"; private static Guid ClrPropertySet = new Guid("c989bb7a-8385-4715-98cf-a741a8edb823"); // The CLR specific constant install reference. private static object s_installReference = null; private static StoreApplicationReference InstallReference { get { if (s_installReference == null) { Interlocked.CompareExchange(ref s_installReference, new StoreApplicationReference( IsolationInterop.GUID_SXS_INSTALL_REFERENCE_SCHEME_OPAQUESTRING, InstallerIdentifier, null), null); } return (StoreApplicationReference) s_installReference; } } private readonly object m_syncRoot = new object(); private object m_appTrusts = null; private ArrayList AppTrusts { get { if (m_appTrusts == null) { ArrayList appTrusts = new ArrayList(); if (m_storeBounded) { RefreshStorePointer(); // enumerate the user store and populate the collection StoreDeploymentMetadataEnumeration deplEnum = m_pStore.EnumInstallerDeployments(IsolationInterop.GUID_SXS_INSTALL_REFERENCE_SCHEME_OPAQUESTRING, InstallerIdentifier, ApplicationTrustProperty, null); foreach (IDefinitionAppId defAppId in deplEnum) { StoreDeploymentMetadataPropertyEnumeration metadataEnum = m_pStore.EnumInstallerDeploymentProperties(IsolationInterop.GUID_SXS_INSTALL_REFERENCE_SCHEME_OPAQUESTRING, InstallerIdentifier, ApplicationTrustProperty, defAppId); foreach (StoreOperationMetadataProperty appTrustProperty in metadataEnum) { string appTrustXml = appTrustProperty.Value; if (appTrustXml != null && appTrustXml.Length > 0) { SecurityElement seTrust = SecurityElement.FromString(appTrustXml); ApplicationTrust appTrust = new ApplicationTrust(); appTrust.FromXml(seTrust); appTrusts.Add(appTrust); } } } } Interlocked.CompareExchange(ref m_appTrusts, appTrusts, null); } return m_appTrusts as ArrayList; } } private bool m_storeBounded = false; private Store m_pStore = null; // Component store interface pointer. // Only internal constructors are exposed. internal ApplicationTrustCollection () : this(false) {} internal ApplicationTrustCollection (bool storeBounded) { m_storeBounded = storeBounded; } private void RefreshStorePointer () { // Refresh store pointer. if (m_pStore != null) Marshal.ReleaseComObject(m_pStore.InternalStore); m_pStore = IsolationInterop.GetUserStore(); } public int Count { get { return AppTrusts.Count; } } public ApplicationTrust this[int index] { get { return AppTrusts[index] as ApplicationTrust; } } public ApplicationTrust this[string appFullName] { get { ApplicationIdentity identity = new ApplicationIdentity(appFullName); ApplicationTrustCollection appTrusts = Find(identity, ApplicationVersionMatch.MatchExactVersion); if (appTrusts.Count > 0) return appTrusts[0]; return null; } } private void CommitApplicationTrust(ApplicationIdentity applicationIdentity, string trustXml) { StoreOperationMetadataProperty[] properties = new StoreOperationMetadataProperty[] { new StoreOperationMetadataProperty(ClrPropertySet, ApplicationTrustProperty, trustXml) }; IEnumDefinitionIdentity idenum = applicationIdentity.Identity.EnumAppPath(); IDefinitionIdentity[] asbId = new IDefinitionIdentity[1]; IDefinitionIdentity deplId = null; if (idenum.Next(1, asbId) == 1) deplId = asbId[0]; IDefinitionAppId defAppId = IsolationInterop.AppIdAuthority.CreateDefinition(); defAppId.SetAppPath(1, new IDefinitionIdentity[] {deplId}); defAppId.put_Codebase(applicationIdentity.CodeBase); using (StoreTransaction storeTxn = new StoreTransaction()) { storeTxn.Add(new StoreOperationSetDeploymentMetadata(defAppId, InstallReference, properties)); RefreshStorePointer(); m_pStore.Transact(storeTxn.Operations); } m_appTrusts = null; // reset the app trusts in the collection. } public int Add (ApplicationTrust trust) { if (trust == null) throw new ArgumentNullException("trust"); if (trust.ApplicationIdentity == null) throw new ArgumentException(Environment.GetResourceString("Argument_ApplicationTrustShouldHaveIdentity")); // Add the trust decision of the application to the fusion store. if (m_storeBounded) { CommitApplicationTrust(trust.ApplicationIdentity, trust.ToXml().ToString()); return -1; } else { return AppTrusts.Add(trust); } } public void AddRange (ApplicationTrust[] trusts) { if (trusts == null) throw new ArgumentNullException("trusts"); int i=0; try { for (; iIEnumerator IEnumerable.GetEnumerator() { return new ApplicationTrustEnumerator(this); } /// void ICollection.CopyTo(Array array, int index) { if (array == null) throw new ArgumentNullException("array"); if (array.Rank != 1) throw new ArgumentException(Environment.GetResourceString("Arg_RankMultiDimNotSupported")); if (index < 0 || index >= array.Length) throw new ArgumentOutOfRangeException("index", Environment.GetResourceString("ArgumentOutOfRange_Index")); if (array.Length - index < this.Count) throw new ArgumentException(Environment.GetResourceString("Argument_InvalidOffLen")); for (int i=0; i < this.Count; i++) { array.SetValue(this[i], index++); } } public void CopyTo (ApplicationTrust[] array, int index) { ((ICollection)this).CopyTo(array, index); } public bool IsSynchronized { get { return false; } } public object SyncRoot { get { return this; } } } [System.Runtime.InteropServices.ComVisible(true)] public sealed class ApplicationTrustEnumerator : IEnumerator { private ApplicationTrustCollection m_trusts; private int m_current; private ApplicationTrustEnumerator() {} internal ApplicationTrustEnumerator(ApplicationTrustCollection trusts) { m_trusts = trusts; m_current = -1; } public ApplicationTrust Current { get { return m_trusts[m_current]; } } /// object IEnumerator.Current { get { return (object) m_trusts[m_current]; } } public bool MoveNext() { if (m_current == ((int) m_trusts.Count - 1)) return false; m_current++; return true; } public void Reset() { m_current = -1; } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // ==++== // // Copyright (c) Microsoft Corporation. All rights reserved. // // ==--== // // ApplicationTrust.cs // // This class encapsulates security decisions about an application. // namespace System.Security.Policy { using System.Collections; using System.Deployment.Internal.Isolation; using System.Deployment.Internal.Isolation.Manifest; using System.Globalization; using System.IO; using System.Runtime.InteropServices; using System.Runtime.Serialization.Formatters.Binary; using System.Security.Permissions; using System.Security.Util; using System.Text; using System.Threading; [System.Runtime.InteropServices.ComVisible(true)] public enum ApplicationVersionMatch { MatchExactVersion, MatchAllVersions } [System.Runtime.InteropServices.ComVisible(true)] [Serializable] public sealed class ApplicationTrust : ISecurityEncodable { private ApplicationIdentity m_appId; private bool m_appTrustedToRun; private bool m_persist; private object m_extraInfo; private SecurityElement m_elExtraInfo; private PolicyStatement m_psDefaultGrant; private StrongName[] m_fullTrustAssemblies; // Permission special flags for the default grant set in this ApplicationTrust. This should be // updated in [....] with any updates to the default grant set. // // In the general case, these values cannot be trusted - we only store a reference to the // DefaultGrantSet, and return the reference directly, which means that code can update the // permission set without our knowledge. That would lead to the flags getting out of [....] with the // grant set. // // However, we only care about these flags when we're creating a homogenous AppDomain, and in that // case we control the ApplicationTrust object end-to-end, and know that the permission set will not // change after the flags are calculated. [NonSerialized] private int m_grantSetSpecialFlags; public ApplicationTrust (ApplicationIdentity applicationIdentity) : this () { ApplicationIdentity = applicationIdentity; } public ApplicationTrust () : this (new PermissionSet(PermissionState.None)) {} internal ApplicationTrust (PermissionSet defaultGrantSet) : this (defaultGrantSet, null) {} internal ApplicationTrust (PermissionSet defaultGrantSet, StrongName[] fullTrustAssemblies) { // Creating a PolicyStatement copies the incoming permission set, so we don't have to worry // about the PermissionSet parameter changing underneath us after we've calculated the // permisison flags in the DefaultGrantSet setter. DefaultGrantSet = new PolicyStatement(defaultGrantSet); FullTrustAssemblies = fullTrustAssemblies; } public ApplicationIdentity ApplicationIdentity { get { return m_appId; } set { if (value == null) throw new ArgumentNullException(Environment.GetResourceString("Argument_InvalidAppId")); m_appId = value; } } public PolicyStatement DefaultGrantSet { get { if (m_psDefaultGrant == null) return new PolicyStatement(new PermissionSet(PermissionState.None)); return m_psDefaultGrant; } set { if (value == null) { m_psDefaultGrant = null; m_grantSetSpecialFlags = 0; } else { m_psDefaultGrant = value; m_grantSetSpecialFlags = SecurityManager.GetSpecialFlags(m_psDefaultGrant.PermissionSet, null); } } } internal StrongName[] FullTrustAssemblies { get { return m_fullTrustAssemblies; } set { m_fullTrustAssemblies = value; } } public bool IsApplicationTrustedToRun { get { return m_appTrustedToRun; } set { m_appTrustedToRun = value; } } public bool Persist { get { return m_persist; } set { m_persist = value; } } public object ExtraInfo { get { if (m_elExtraInfo != null) { m_extraInfo = ObjectFromXml(m_elExtraInfo); m_elExtraInfo = null; } return m_extraInfo; } set { m_elExtraInfo = null; m_extraInfo = value; } } public SecurityElement ToXml () { SecurityElement elRoot = new SecurityElement("ApplicationTrust"); elRoot.AddAttribute("version", "1"); if (m_appId != null) elRoot.AddAttribute("FullName", SecurityElement.Escape(m_appId.FullName)); if (m_appTrustedToRun) elRoot.AddAttribute("TrustedToRun", "true"); if (m_persist) elRoot.AddAttribute("Persist", "true"); if (m_psDefaultGrant != null) { SecurityElement elDefaultGrant = new SecurityElement("DefaultGrant"); elDefaultGrant.AddChild(m_psDefaultGrant.ToXml()); elRoot.AddChild(elDefaultGrant); } if (m_fullTrustAssemblies != null) { SecurityElement elFullTrustAssemblies = new SecurityElement("FullTrustAssemblies"); for (int index = 0; index < m_fullTrustAssemblies.Length; index++) { if (m_fullTrustAssemblies[index] != null) elFullTrustAssemblies.AddChild(m_fullTrustAssemblies[index].ToXml()); } elRoot.AddChild(elFullTrustAssemblies); } if (ExtraInfo != null) elRoot.AddChild(ObjectToXml("ExtraInfo", ExtraInfo)); return elRoot; } public void FromXml (SecurityElement element) { if (element == null) throw new ArgumentNullException("element"); if (String.Compare(element.Tag, "ApplicationTrust", StringComparison.Ordinal) != 0) throw new ArgumentException(Environment.GetResourceString("Argument_InvalidXML")); m_psDefaultGrant = null; m_grantSetSpecialFlags = 0; m_fullTrustAssemblies = null; m_appTrustedToRun = false; string isAppTrustedToRun = element.Attribute("TrustedToRun"); if (isAppTrustedToRun != null && String.Compare(isAppTrustedToRun, "true", StringComparison.Ordinal) == 0) m_appTrustedToRun = true; string persist = element.Attribute("Persist"); if (persist != null && String.Compare(persist, "true", StringComparison.Ordinal) == 0) m_persist = true; string fullName = element.Attribute("FullName"); if (fullName != null && fullName.Length > 0) m_appId = new ApplicationIdentity(fullName); SecurityElement elDefaultGrant = element.SearchForChildByTag("DefaultGrant"); if (elDefaultGrant != null) { SecurityElement elDefaultGrantPS = elDefaultGrant.SearchForChildByTag("PolicyStatement"); if (elDefaultGrantPS != null) { PolicyStatement ps = new PolicyStatement(null); ps.FromXml(elDefaultGrantPS); m_psDefaultGrant = ps; m_grantSetSpecialFlags = SecurityManager.GetSpecialFlags(ps.PermissionSet, null); } } SecurityElement elFullTrustAssemblies = element.SearchForChildByTag("FullTrustAssemblies"); if (elFullTrustAssemblies != null && elFullTrustAssemblies.InternalChildren != null) { m_fullTrustAssemblies = new StrongName[elFullTrustAssemblies.Children.Count]; IEnumerator enumerator = elFullTrustAssemblies.Children.GetEnumerator(); int index = 0; while (enumerator.MoveNext()) { m_fullTrustAssemblies[index] = new StrongName(); m_fullTrustAssemblies[index].FromXml(enumerator.Current as SecurityElement); index++; } } m_elExtraInfo = element.SearchForChildByTag("ExtraInfo"); } private static SecurityElement ObjectToXml (string tag, Object obj) { BCLDebug.Assert(obj != null, "You need to pass in an object"); ISecurityEncodable encodableObj = obj as ISecurityEncodable; SecurityElement elObject; if (encodableObj != null) { elObject = encodableObj.ToXml(); if (!elObject.Tag.Equals(tag)) throw new ArgumentException(Environment.GetResourceString("Argument_InvalidXML")); } MemoryStream stream = new MemoryStream(); BinaryFormatter formatter = new BinaryFormatter(); formatter.Serialize(stream, obj); byte[] array = stream.ToArray(); elObject = new SecurityElement(tag); elObject.AddAttribute("Data", Hex.EncodeHexString(array)); return elObject; } private static Object ObjectFromXml (SecurityElement elObject) { BCLDebug.Assert(elObject != null, "You need to pass in a security element"); if (elObject.Attribute("class") != null) { ISecurityEncodable encodableObj = XMLUtil.CreateCodeGroup(elObject) as ISecurityEncodable; if (encodableObj != null) { encodableObj.FromXml(elObject); return encodableObj; } } string objectData = elObject.Attribute("Data"); MemoryStream stream = new MemoryStream(Hex.DecodeHexString(objectData)); BinaryFormatter formatter = new BinaryFormatter(); return formatter.Deserialize(stream); } } [SecurityPermissionAttribute(SecurityAction.LinkDemand, Flags=SecurityPermissionFlag.ControlPolicy)] [System.Runtime.InteropServices.ComVisible(true)] public sealed class ApplicationTrustCollection : ICollection { private const string ApplicationTrustProperty = "ApplicationTrust"; private const string InstallerIdentifier = "{60051b8f-4f12-400a-8e50-dd05ebd438d1}"; private static Guid ClrPropertySet = new Guid("c989bb7a-8385-4715-98cf-a741a8edb823"); // The CLR specific constant install reference. private static object s_installReference = null; private static StoreApplicationReference InstallReference { get { if (s_installReference == null) { Interlocked.CompareExchange(ref s_installReference, new StoreApplicationReference( IsolationInterop.GUID_SXS_INSTALL_REFERENCE_SCHEME_OPAQUESTRING, InstallerIdentifier, null), null); } return (StoreApplicationReference) s_installReference; } } private readonly object m_syncRoot = new object(); private object m_appTrusts = null; private ArrayList AppTrusts { get { if (m_appTrusts == null) { ArrayList appTrusts = new ArrayList(); if (m_storeBounded) { RefreshStorePointer(); // enumerate the user store and populate the collection StoreDeploymentMetadataEnumeration deplEnum = m_pStore.EnumInstallerDeployments(IsolationInterop.GUID_SXS_INSTALL_REFERENCE_SCHEME_OPAQUESTRING, InstallerIdentifier, ApplicationTrustProperty, null); foreach (IDefinitionAppId defAppId in deplEnum) { StoreDeploymentMetadataPropertyEnumeration metadataEnum = m_pStore.EnumInstallerDeploymentProperties(IsolationInterop.GUID_SXS_INSTALL_REFERENCE_SCHEME_OPAQUESTRING, InstallerIdentifier, ApplicationTrustProperty, defAppId); foreach (StoreOperationMetadataProperty appTrustProperty in metadataEnum) { string appTrustXml = appTrustProperty.Value; if (appTrustXml != null && appTrustXml.Length > 0) { SecurityElement seTrust = SecurityElement.FromString(appTrustXml); ApplicationTrust appTrust = new ApplicationTrust(); appTrust.FromXml(seTrust); appTrusts.Add(appTrust); } } } } Interlocked.CompareExchange(ref m_appTrusts, appTrusts, null); } return m_appTrusts as ArrayList; } } private bool m_storeBounded = false; private Store m_pStore = null; // Component store interface pointer. // Only internal constructors are exposed. internal ApplicationTrustCollection () : this(false) {} internal ApplicationTrustCollection (bool storeBounded) { m_storeBounded = storeBounded; } private void RefreshStorePointer () { // Refresh store pointer. if (m_pStore != null) Marshal.ReleaseComObject(m_pStore.InternalStore); m_pStore = IsolationInterop.GetUserStore(); } public int Count { get { return AppTrusts.Count; } } public ApplicationTrust this[int index] { get { return AppTrusts[index] as ApplicationTrust; } } public ApplicationTrust this[string appFullName] { get { ApplicationIdentity identity = new ApplicationIdentity(appFullName); ApplicationTrustCollection appTrusts = Find(identity, ApplicationVersionMatch.MatchExactVersion); if (appTrusts.Count > 0) return appTrusts[0]; return null; } } private void CommitApplicationTrust(ApplicationIdentity applicationIdentity, string trustXml) { StoreOperationMetadataProperty[] properties = new StoreOperationMetadataProperty[] { new StoreOperationMetadataProperty(ClrPropertySet, ApplicationTrustProperty, trustXml) }; IEnumDefinitionIdentity idenum = applicationIdentity.Identity.EnumAppPath(); IDefinitionIdentity[] asbId = new IDefinitionIdentity[1]; IDefinitionIdentity deplId = null; if (idenum.Next(1, asbId) == 1) deplId = asbId[0]; IDefinitionAppId defAppId = IsolationInterop.AppIdAuthority.CreateDefinition(); defAppId.SetAppPath(1, new IDefinitionIdentity[] {deplId}); defAppId.put_Codebase(applicationIdentity.CodeBase); using (StoreTransaction storeTxn = new StoreTransaction()) { storeTxn.Add(new StoreOperationSetDeploymentMetadata(defAppId, InstallReference, properties)); RefreshStorePointer(); m_pStore.Transact(storeTxn.Operations); } m_appTrusts = null; // reset the app trusts in the collection. } public int Add (ApplicationTrust trust) { if (trust == null) throw new ArgumentNullException("trust"); if (trust.ApplicationIdentity == null) throw new ArgumentException(Environment.GetResourceString("Argument_ApplicationTrustShouldHaveIdentity")); // Add the trust decision of the application to the fusion store. if (m_storeBounded) { CommitApplicationTrust(trust.ApplicationIdentity, trust.ToXml().ToString()); return -1; } else { return AppTrusts.Add(trust); } } public void AddRange (ApplicationTrust[] trusts) { if (trusts == null) throw new ArgumentNullException("trusts"); int i=0; try { for (; i IEnumerator IEnumerable.GetEnumerator() { return new ApplicationTrustEnumerator(this); } /// void ICollection.CopyTo(Array array, int index) { if (array == null) throw new ArgumentNullException("array"); if (array.Rank != 1) throw new ArgumentException(Environment.GetResourceString("Arg_RankMultiDimNotSupported")); if (index < 0 || index >= array.Length) throw new ArgumentOutOfRangeException("index", Environment.GetResourceString("ArgumentOutOfRange_Index")); if (array.Length - index < this.Count) throw new ArgumentException(Environment.GetResourceString("Argument_InvalidOffLen")); for (int i=0; i < this.Count; i++) { array.SetValue(this[i], index++); } } public void CopyTo (ApplicationTrust[] array, int index) { ((ICollection)this).CopyTo(array, index); } public bool IsSynchronized { get { return false; } } public object SyncRoot { get { return this; } } } [System.Runtime.InteropServices.ComVisible(true)] public sealed class ApplicationTrustEnumerator : IEnumerator { private ApplicationTrustCollection m_trusts; private int m_current; private ApplicationTrustEnumerator() {} internal ApplicationTrustEnumerator(ApplicationTrustCollection trusts) { m_trusts = trusts; m_current = -1; } public ApplicationTrust Current { get { return m_trusts[m_current]; } } /// object IEnumerator.Current { get { return (object) m_trusts[m_current]; } } public bool MoveNext() { if (m_current == ((int) m_trusts.Count - 1)) return false; m_current++; return true; } public void Reset() { m_current = -1; } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- WebPart.cs
- DifferencingCollection.cs
- Thread.cs
- WindowsGraphicsWrapper.cs
- ADMembershipUser.cs
- SqlFacetAttribute.cs
- PostBackOptions.cs
- AssemblyHash.cs
- DependencyPropertyKey.cs
- XamlVector3DCollectionSerializer.cs
- WebPartCancelEventArgs.cs
- XmlSubtreeReader.cs
- input.cs
- RootProfilePropertySettingsCollection.cs
- ListenerConnectionModeReader.cs
- DataGridDefaultColumnWidthTypeConverter.cs
- EntitySetDataBindingList.cs
- ProfileService.cs
- SqlConnectionHelper.cs
- WebWorkflowRole.cs
- DBConcurrencyException.cs
- MetadataArtifactLoaderResource.cs
- ZeroOpNode.cs
- MergePropertyDescriptor.cs
- RemotingException.cs
- BoundColumn.cs
- SHA256Managed.cs
- SecondaryViewProvider.cs
- DescendantOverDescendantQuery.cs
- SmiContext.cs
- ImageMapEventArgs.cs
- AutoGeneratedField.cs
- JobInputBins.cs
- GatewayDefinition.cs
- DesignTimeResourceProviderFactoryAttribute.cs
- RequestStatusBarUpdateEventArgs.cs
- UIElementParagraph.cs
- TypeUnloadedException.cs
- Cast.cs
- WindowsIPAddress.cs
- CustomError.cs
- ScriptControl.cs
- CollectionView.cs
- PersonalizationStateInfoCollection.cs
- PolygonHotSpot.cs
- ResourceAssociationSetEnd.cs
- DataGridCellsPresenter.cs
- GridViewUpdateEventArgs.cs
- Console.cs
- SqlError.cs
- DragEventArgs.cs
- Msec.cs
- HwndAppCommandInputProvider.cs
- ColorMap.cs
- DataRowCollection.cs
- Selector.cs
- ServiceHostFactory.cs
- VersionPair.cs
- DetailsViewUpdatedEventArgs.cs
- SqlRowUpdatedEvent.cs
- SchemaManager.cs
- SecurityManager.cs
- ValidationHelper.cs
- PartitionedStream.cs
- WebPartRestoreVerb.cs
- ImageField.cs
- RSAPKCS1KeyExchangeFormatter.cs
- CodeConstructor.cs
- ControlDesigner.cs
- CodeAccessSecurityEngine.cs
- ToolStripDropDownClosedEventArgs.cs
- FtpWebResponse.cs
- ToolStripStatusLabel.cs
- ServiceControllerDesigner.cs
- FixedHyperLink.cs
- baseaxisquery.cs
- OleDbDataAdapter.cs
- DelegateInArgument.cs
- ClientTargetSection.cs
- BitmapEffectrendercontext.cs
- Maps.cs
- SafeEventHandle.cs
- _ReceiveMessageOverlappedAsyncResult.cs
- HitTestFilterBehavior.cs
- ControlPaint.cs
- ObjectDataSourceView.cs
- Quaternion.cs
- BamlBinaryWriter.cs
- DragDrop.cs
- CompilerParameters.cs
- DataColumnChangeEvent.cs
- MasterPageCodeDomTreeGenerator.cs
- ClientTargetCollection.cs
- GridViewSelectEventArgs.cs
- ThreadPool.cs
- SettingsPropertyNotFoundException.cs
- _FixedSizeReader.cs
- dataobject.cs
- InputLangChangeEvent.cs
- CssClassPropertyAttribute.cs