Code:
/ WCF / WCF / 3.5.30729.1 / untmp / Orcas / SP / ndp / cdf / src / WCF / WasHosting / System / ServiceModel / WasHosting / MetabaseSettingsIis7.cs / 1 / MetabaseSettingsIis7.cs
//---------------------------------------------------------------------------- // Copyright (c) Microsoft Corporation. All rights reserved. //--------------------------------------------------------------------------- namespace System.ServiceModel.WasHosting { using System.Collections.Generic; using System.Configuration; using System.Diagnostics; using System.Security.Principal; using System.ServiceModel.Activation; using System.ServiceModel.Channels; using System.Web.Hosting; using System.Web; using Microsoft.Web.Administration; using System.Runtime.CompilerServices; using System.Reflection; using System.Security.Permissions; internal static class MetabaseSettingsIis7Constants { internal const string SitesSectionName = "system.applicationHost/sites"; internal const string ClientCertMapAuthenticationName = "system.webServer/security/authentication/clientCertificateMappingAuthentication"; internal const string IisClientCertMapAuthenticationName = "system.webServer/security/authentication/iisClientCertificateMappingAuthentication"; internal const string AnonymousAuthenticationSectionName = "system.webServer/security/authentication/anonymousAuthentication"; internal const string BasicAuthenticationSectionName = "system.webServer/security/authentication/basicAuthentication"; internal const string DigestAuthenticationSectionName = "system.webServer/security/authentication/digestAuthentication"; internal const string WindowsAuthenticationSectionName = "system.webServer/security/authentication/windowsAuthentication"; internal const string SecurityAccessSectionName = "system.webServer/security/access"; internal const string EnabledAttributeName = "enabled"; internal const string RealmAttributeName = "realm"; internal const string ValueAttributeName = "value"; internal const string SslFlagsAttributeName = "sslFlags"; internal const string ProviderElementName = "providers"; internal const string BindingsElementName = "bindings"; internal const string ProtocolAttributeName = "protocol"; internal const string BindingInfoAttributeName = "bindingInformation"; internal const string PathAttributeName = "path"; internal const string EnabledProtocolsAttributeName = "enabledProtocols"; internal const string NameAttributeName = "name"; internal const string CommaSeparator = ","; internal const string WebConfigGetSectionMethodName = "GetSection"; } // MetabaseSettingsIis7 use ServerManager class to get Metabase settings. ServerManager // does not work in Longhorn Sever/SP1 builds. internal class MetabaseSettingsIis7 : MetabaseSettingsIis { internal MetabaseSettingsIis7() : base() { if (!Iis7Helper.IsIis7) { DiagnosticUtility.DebugAssert("MetabaseSettingsIis7 constructor must not be called when running outside of IIS7"); throw DiagnosticUtility.ExceptionUtility.ThrowHelperInternal(true); } PopulateSiteProperties(); } void PopulateSiteProperties() { Site site = ServerManagerWrapper.GetSite(HostingEnvironment.SiteName); DiagnosticUtility.DebugAssert(site != null, "Unable to find site."); // // Build up the binding table. // IDictionary> bindingList = ServerManagerWrapper.GetProtocolBindingTable(site); // Convert to string arrays foreach (KeyValuePair > entry in bindingList) { this.Bindings.Add(entry.Key, entry.Value.ToArray()); entry.Value.Clear(); } // Clear the temporary buffer bindingList.Clear(); // // Build up the protocol list. // foreach (string protocolValue in ServerManagerWrapper.GetEnabledProtocols(site).Split(MetabaseSettingsIis7Constants.CommaSeparator.ToCharArray())) { string protocol = protocolValue.ToLowerInvariant(); if (this.Protocols.Contains(protocol)) { // Ignore duplicates. continue; } else if (string.Compare(protocol,Uri.UriSchemeHttp,StringComparison.OrdinalIgnoreCase)==0 || string.Compare(protocol,Uri.UriSchemeHttps,StringComparison.OrdinalIgnoreCase)==0) { // Special casing HTTPS. If HTTP is enabled, it means that // both HTTP and HTTPS are enabled. if (this.Bindings.ContainsKey(Uri.UriSchemeHttp)) { this.Protocols.Add(Uri.UriSchemeHttp); } if (this.Bindings.ContainsKey(Uri.UriSchemeHttps)) { this.Protocols.Add(Uri.UriSchemeHttps); } } else if (this.Bindings.ContainsKey(protocol)) { // We only take the protocols that have bindings. this.Protocols.Add(protocol); } } } protected override HostedServiceTransportSettings CreateTransportSettings(string relativeVirtualPath) { Debug.Print("MetabaseSettingsIis7.CreateTransportSettings() calling ServerManager.GetWebConfiguration() virtualPath: " + relativeVirtualPath); string absolutePath = VirtualPathUtility.ToAbsolute(relativeVirtualPath, HostingEnvironmentWrapper.ApplicationVirtualPath); Configuration config = ServerManagerWrapper.GetWebConfiguration( HostingEnvironment.SiteName, absolutePath); HostedServiceTransportSettings transportSettings = new HostedServiceTransportSettings(); ProcessAnonymousAuthentication(config, ref transportSettings); ProcessBasicAuthentication(config, ref transportSettings); ProcessWindowsAuthentication(config, ref transportSettings); ProcessDigestAuthentication(config, ref transportSettings); ProcessSecurityAccess(config, ref transportSettings); return transportSettings; } void ProcessAnonymousAuthentication(Configuration config, ref HostedServiceTransportSettings transportSettings) { ConfigurationSection section = ServerManagerWrapper.GetSection(config, MetabaseSettingsIis7Constants.AnonymousAuthenticationSectionName); if ((section != null) && ((bool)ServerManagerWrapper.GetAttributeValue(section, MetabaseSettingsIis7Constants.EnabledAttributeName)) ) { transportSettings.AuthFlags = transportSettings.AuthFlags | AuthFlags.AuthAnonymous; } } void ProcessBasicAuthentication(Configuration config, ref HostedServiceTransportSettings transportSettings) { ConfigurationSection section = ServerManagerWrapper.GetSection(config, MetabaseSettingsIis7Constants.BasicAuthenticationSectionName); if ((section != null) && ((bool)ServerManagerWrapper.GetAttributeValue(section, MetabaseSettingsIis7Constants.EnabledAttributeName)) ) { transportSettings.AuthFlags = transportSettings.AuthFlags | AuthFlags.AuthBasic; transportSettings.Realm = (string)ServerManagerWrapper.GetAttributeValue(section, MetabaseSettingsIis7Constants.RealmAttributeName); } } void ProcessWindowsAuthentication(Configuration config, ref HostedServiceTransportSettings transportSettings) { ConfigurationSection section = ServerManagerWrapper.GetSection(config, MetabaseSettingsIis7Constants.WindowsAuthenticationSectionName); if ((section != null) && ((bool)ServerManagerWrapper.GetAttributeValue(section, MetabaseSettingsIis7Constants.EnabledAttributeName)) ) { transportSettings.AuthFlags = transportSettings.AuthFlags | AuthFlags.AuthNTLM; List providerList = ServerManagerWrapper.GetProviders(section, MetabaseSettingsIis7Constants.ProviderElementName, MetabaseSettingsIis7Constants.ValueAttributeName); if (providerList.Count != 0) { transportSettings.AuthProviders = providerList.ToArray(); } } } void ProcessDigestAuthentication(Configuration config, ref HostedServiceTransportSettings transportSettings) { ConfigurationSection section = ServerManagerWrapper.GetSection(config, MetabaseSettingsIis7Constants.DigestAuthenticationSectionName); if ((section != null) && ((bool)ServerManagerWrapper.GetAttributeValue(section, MetabaseSettingsIis7Constants.EnabledAttributeName)) ) { transportSettings.AuthFlags = transportSettings.AuthFlags | AuthFlags.AuthMD5; } } void ProcessSecurityAccess(Configuration config, ref HostedServiceTransportSettings transportSettings) { ConfigurationSection section = ServerManagerWrapper.GetSection(config, MetabaseSettingsIis7Constants.SecurityAccessSectionName); // Check SSL Flags. if (section != null) { int sslFlags = (int)ServerManagerWrapper.GetAttributeValue(section, MetabaseSettingsIis7Constants.SslFlagsAttributeName); transportSettings.AccessSslFlags = (HttpAccessSslFlags)sslFlags; // Clear SslMapCert field, which should not contain any useful data now. transportSettings.AccessSslFlags &= ~(HttpAccessSslFlags.SslMapCert); } // Check whether IIS client certificate mapping is enabled. section = ServerManagerWrapper.GetSection(config, MetabaseSettingsIis7Constants.IisClientCertMapAuthenticationName); if ((section != null) && ((bool)ServerManagerWrapper.GetAttributeValue(section, MetabaseSettingsIis7Constants.EnabledAttributeName)) ) { transportSettings.AccessSslFlags |= HttpAccessSslFlags.SslMapCert; } else { // Check whether Active Directory client certification mapping is enabled. section = ServerManagerWrapper.GetSection(config, MetabaseSettingsIis7Constants.ClientCertMapAuthenticationName); if ((section != null) && ((bool)ServerManagerWrapper.GetAttributeValue(section, MetabaseSettingsIis7Constants.EnabledAttributeName)) ) { transportSettings.AccessSslFlags |= HttpAccessSslFlags.SslMapCert; } } } // wraps calls to ServerManager with Asserts as necessary to support partial trust scenarios [PermissionSet(SecurityAction.Assert, Unrestricted = true)] static class ServerManagerWrapper { static internal Site GetSite(string name) { return new ServerManager().Sites[name]; } static internal Configuration GetWebConfiguration(string siteName, string absolutePath) { return new ServerManager().GetWebConfiguration(siteName, absolutePath); } static internal ConfigurationSection GetSection(Configuration config, string sectionName) { return config.GetSection(sectionName); } static internal List GetProviders(ConfigurationSection section, string providerElementName, string valueAttributeName) { List providerList = new List (); foreach (ConfigurationElement element in section.GetCollection(providerElementName)) { providerList.Add((string)ServerManagerWrapper.GetAttributeValue(element, valueAttributeName)); } return providerList; } static internal object GetAttributeValue(ConfigurationSection section, string attributeName) { return section.GetAttribute(attributeName).Value; } static internal object GetAttributeValue(ConfigurationElement element, string attributeName) { return element.GetAttribute(attributeName).Value; } static internal IDictionary > GetProtocolBindingTable(Site site) { IDictionary > bindingList = new Dictionary >(); foreach (Microsoft.Web.Administration.Binding binding in site.Bindings) { string protocol = binding.Protocol.ToLowerInvariant(); string bindingInformation = binding.BindingInformation; Debug.Print("MetabaseSettingsIis7.ctor() adding Protocol: " + protocol + " BindingInformation: " + bindingInformation); if (!bindingList.ContainsKey(protocol)) { bindingList.Add(protocol, new List ()); } bindingList[protocol].Add(bindingInformation); } return bindingList; } static internal string GetEnabledProtocols(Site site) { Application application = site.Applications[HostingEnvironmentWrapper.ApplicationVirtualPath]; DiagnosticUtility.DebugAssert(application != null, "Unable to find application."); return application.EnabledProtocols; } } } // MetabaseSettingsIis7V2 use WebConfigurationManager to get Metabase settings, we depend on // some methods which only availble in Longhorn Server/SP1 build. internal class MetabaseSettingsIis7V2 : MetabaseSettingsIis { static MethodInfo getSectionMethod; internal MetabaseSettingsIis7V2() : base() { if (!Iis7Helper.IsIis7) { DiagnosticUtility.DebugAssert("MetabaseSettingsIis7V2 constructor must not be called when running outside of IIS7"); throw DiagnosticUtility.ExceptionUtility.ThrowHelperInternal(true); } PopulateSiteProperties(); } static internal MethodInfo GetSectionMethod { get { if (getSectionMethod == null) { Type type = typeof(WebConfigurationManager); getSectionMethod = type.GetMethod( MetabaseSettingsIis7Constants.WebConfigGetSectionMethodName, new Type[3] { typeof(string), typeof(string), typeof(string) } ); } return getSectionMethod; } } void PopulateSiteProperties() { ConfigurationElement site = WebConfigurationManagerWrapper.GetSite(HostingEnvironment.SiteName); // // Build up the binding table. // IDictionary > bindingList = WebConfigurationManagerWrapper.GetProtocolBindingTable(site); // Convert to string arrays foreach (KeyValuePair > entry in bindingList) { this.Bindings.Add(entry.Key, entry.Value.ToArray()); entry.Value.Clear(); } // Clear the temporary buffer bindingList.Clear(); // // Build up the protocol list. // foreach (string protocolValue in WebConfigurationManagerWrapper.GetEnabledProtocols(site).Split(MetabaseSettingsIis7Constants.CommaSeparator.ToCharArray())) { string protocol = protocolValue.ToLowerInvariant(); if (this.Protocols.Contains(protocol)) { // Ignore duplicates. continue; } else if (string.Compare(protocol,Uri.UriSchemeHttp,StringComparison.OrdinalIgnoreCase) == 0 || string.Compare(protocol,Uri.UriSchemeHttps,StringComparison.OrdinalIgnoreCase) == 0) { // Special casing HTTPS. If HTTP is enabled, it means that // both HTTP and HTTPS are enabled. if (this.Bindings.ContainsKey(Uri.UriSchemeHttp)) { this.Protocols.Add(Uri.UriSchemeHttp); } if (this.Bindings.ContainsKey(Uri.UriSchemeHttps)) { this.Protocols.Add(Uri.UriSchemeHttps); } } else if (this.Bindings.ContainsKey(protocol)) { // We only take the protocols that have bindings. this.Protocols.Add(protocol); } } } protected override HostedServiceTransportSettings CreateTransportSettings(string relativeVirtualPath) { Debug.Print("MetabaseSettingsIis7.CreateTransportSettings() calling ServerManager.GetWebConfiguration() virtualPath: " + relativeVirtualPath); string absolutePath = VirtualPathUtility.ToAbsolute(relativeVirtualPath, HostingEnvironment.ApplicationVirtualPath); HostedServiceTransportSettings transportSettings = new HostedServiceTransportSettings(); string siteName = HostingEnvironment.SiteName; ProcessAnonymousAuthentication(siteName, absolutePath, ref transportSettings); ProcessBasicAuthentication(siteName, absolutePath, ref transportSettings); ProcessWindowsAuthentication(siteName, absolutePath, ref transportSettings); ProcessDigestAuthentication(siteName, absolutePath, ref transportSettings); ProcessSecurityAccess(siteName, absolutePath, ref transportSettings); return transportSettings; } void ProcessAnonymousAuthentication(string siteName, string virtualPath, ref HostedServiceTransportSettings transportSettings) { ConfigurationSection section = WebConfigurationManagerWrapper.WebConfigGetSection(siteName, virtualPath, MetabaseSettingsIis7Constants.AnonymousAuthenticationSectionName); if ((section != null) && ((bool)WebConfigurationManagerWrapper.GetValue(section, MetabaseSettingsIis7Constants.EnabledAttributeName)) ) { transportSettings.AuthFlags = transportSettings.AuthFlags | AuthFlags.AuthAnonymous; } } void ProcessBasicAuthentication(string siteName, string virtualPath, ref HostedServiceTransportSettings transportSettings) { ConfigurationSection section = WebConfigurationManagerWrapper.WebConfigGetSection(siteName, virtualPath, MetabaseSettingsIis7Constants.BasicAuthenticationSectionName); if ((section != null) && ((bool)WebConfigurationManagerWrapper.GetValue(section, MetabaseSettingsIis7Constants.EnabledAttributeName)) ) { transportSettings.AuthFlags = transportSettings.AuthFlags | AuthFlags.AuthBasic; transportSettings.Realm = (string)section.GetAttribute(MetabaseSettingsIis7Constants.RealmAttributeName).Value; } } void ProcessWindowsAuthentication(string siteName, string virtualPath, ref HostedServiceTransportSettings transportSettings) { ConfigurationSection section = WebConfigurationManagerWrapper.WebConfigGetSection(siteName, virtualPath, MetabaseSettingsIis7Constants.WindowsAuthenticationSectionName); if ((section != null) && ((bool)WebConfigurationManagerWrapper.GetValue(section, MetabaseSettingsIis7Constants.EnabledAttributeName)) ) { transportSettings.AuthFlags = transportSettings.AuthFlags | AuthFlags.AuthNTLM; List providerList = WebConfigurationManagerWrapper.GetProviderList(section); if (providerList.Count != 0) { transportSettings.AuthProviders = providerList.ToArray(); } } } void ProcessDigestAuthentication(string siteName, string virtualPath, ref HostedServiceTransportSettings transportSettings) { ConfigurationSection section = WebConfigurationManagerWrapper.WebConfigGetSection(siteName, virtualPath, MetabaseSettingsIis7Constants.DigestAuthenticationSectionName); if ((section != null) && ((bool)WebConfigurationManagerWrapper.GetValue(section, MetabaseSettingsIis7Constants.EnabledAttributeName)) ) { transportSettings.AuthFlags = transportSettings.AuthFlags | AuthFlags.AuthMD5; } } void ProcessSecurityAccess(string siteName, string virtualPath, ref HostedServiceTransportSettings transportSettings) { ConfigurationSection section = WebConfigurationManagerWrapper.WebConfigGetSection(siteName, virtualPath, MetabaseSettingsIis7Constants.SecurityAccessSectionName); // Check SSL Flags. if (section != null) { int sslFlags = (int)WebConfigurationManagerWrapper.GetValue(section, MetabaseSettingsIis7Constants.SslFlagsAttributeName); transportSettings.AccessSslFlags = (HttpAccessSslFlags)sslFlags; // Clear SslMapCert field, which should not contain any useful data now. transportSettings.AccessSslFlags &= ~(HttpAccessSslFlags.SslMapCert); } // Check whether IIS client certificate mapping is enabled. section = WebConfigurationManagerWrapper.WebConfigGetSection(siteName, virtualPath, MetabaseSettingsIis7Constants.IisClientCertMapAuthenticationName); if ((section != null) && ((bool)WebConfigurationManagerWrapper.GetValue(section, MetabaseSettingsIis7Constants.EnabledAttributeName)) ) { transportSettings.AccessSslFlags |= HttpAccessSslFlags.SslMapCert; } else { // Check whether Active Directory client certification mapping is enabled. section = WebConfigurationManagerWrapper.WebConfigGetSection(siteName, virtualPath, MetabaseSettingsIis7Constants.ClientCertMapAuthenticationName); if ((section != null) && ((bool)WebConfigurationManagerWrapper.GetValue(section, MetabaseSettingsIis7Constants.EnabledAttributeName)) ) { transportSettings.AccessSslFlags |= HttpAccessSslFlags.SslMapCert; } } } [PermissionSet(SecurityAction.Assert, Unrestricted=true)] static class WebConfigurationManagerWrapper { // Helper Method to get a site configuration static internal ConfigurationElement GetSite(string siteName) { ConfigurationSection sitesSection = WebConfigGetSection(null, null, MetabaseSettingsIis7Constants.SitesSectionName); ConfigurationElementCollection sitesCollection = sitesSection.GetCollection(); return FindElement(sitesCollection, MetabaseSettingsIis7Constants.NameAttributeName, siteName); } // Helper method to find element based on an string attribute. static internal ConfigurationElement FindElement(ConfigurationElementCollection collection, string attributeName, string value) { foreach (ConfigurationElement element in collection) { if (String.Equals((string)element[attributeName], value, StringComparison.OrdinalIgnoreCase)) { return element; } } return null; } static internal ConfigurationSection WebConfigGetSection(string siteName, string virtualPath, string sectionName) { return (ConfigurationSection)GetSectionMethod.Invoke(null, new object[] { siteName, virtualPath, sectionName }); } static internal object GetValue(ConfigurationSection section, string name) { return section[name]; } static internal IDictionary > GetProtocolBindingTable(ConfigurationElement site) { IDictionary > bindingList = new Dictionary >(); foreach (ConfigurationElement binding in site.GetCollection(MetabaseSettingsIis7Constants.BindingsElementName)) { string protocol = ((string)binding[MetabaseSettingsIis7Constants.ProtocolAttributeName]).ToLowerInvariant(); string bindingInformation = (string)binding[MetabaseSettingsIis7Constants.BindingInfoAttributeName]; Debug.Print("MetabaseSettingsIis7V2.ctor() adding Protocol: " + protocol + " BindingInformation: " + bindingInformation); if (!bindingList.ContainsKey(protocol)) { bindingList.Add(protocol, new List ()); } bindingList[protocol].Add(bindingInformation); } return bindingList; } static internal string GetEnabledProtocols(ConfigurationElement site) { ConfigurationElement application = FindElement( site.GetCollection(), MetabaseSettingsIis7Constants.PathAttributeName, HostingEnvironment.ApplicationVirtualPath ); DiagnosticUtility.DebugAssert(application != null, "Unable to find application."); return (string)application[MetabaseSettingsIis7Constants.EnabledProtocolsAttributeName]; } static internal List GetProviderList(ConfigurationElement section) { List providerList = new List (); foreach (ConfigurationElement element in section.GetCollection(MetabaseSettingsIis7Constants.ProviderElementName)) { providerList.Add((string)element[MetabaseSettingsIis7Constants.ValueAttributeName]); } return providerList; } } } // Note: There is a dependency on this class name and CreateMetabaseSettings // method name from System.ServiceModel.dll internal class MetabaseSettingsIis7Factory { internal static MetabaseSettings CreateMetabaseSettings() { MethodInfo method = MetabaseSettingsIis7V2.GetSectionMethod; if (method != null) { return new MetabaseSettingsIis7V2(); } return new MetabaseSettingsIis7(); } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- XmlSchemaAll.cs
- TextMetrics.cs
- SqlCommandBuilder.cs
- RegexWriter.cs
- DrawListViewSubItemEventArgs.cs
- BuildDependencySet.cs
- TriState.cs
- ScriptControlDescriptor.cs
- DoubleUtil.cs
- DBCommand.cs
- Globals.cs
- MonthChangedEventArgs.cs
- querybuilder.cs
- DataGridViewButtonColumn.cs
- EntityConnectionStringBuilderItem.cs
- HtmlInputRadioButton.cs
- SmiEventSink_DeferedProcessing.cs
- StackBuilderSink.cs
- MsdtcWrapper.cs
- OleAutBinder.cs
- Internal.cs
- CryptographicAttribute.cs
- RIPEMD160Managed.cs
- PnrpPeerResolverBindingElement.cs
- ResourcePool.cs
- ComplexTypeEmitter.cs
- RuleCache.cs
- PlatformCulture.cs
- TriggerActionCollection.cs
- ConfigurationProperty.cs
- CodeDelegateInvokeExpression.cs
- VectorAnimation.cs
- VBIdentifierName.cs
- StrokeFIndices.cs
- TextCompositionEventArgs.cs
- HttpRequest.cs
- ImageConverter.cs
- WebPartExportVerb.cs
- EdmPropertyAttribute.cs
- XmlSchemaFacet.cs
- HasCopySemanticsAttribute.cs
- MemberPathMap.cs
- ReverseInheritProperty.cs
- UserMapPath.cs
- PrivateFontCollection.cs
- FixedSOMFixedBlock.cs
- XPathArrayIterator.cs
- LineInfo.cs
- PropertyMap.cs
- WebResourceAttribute.cs
- Configuration.cs
- TextBounds.cs
- PrintControllerWithStatusDialog.cs
- FamilyMapCollection.cs
- MSG.cs
- State.cs
- OdbcStatementHandle.cs
- EnvelopedPkcs7.cs
- ReadOnlyTernaryTree.cs
- ResourceReader.cs
- SiteMapNodeItemEventArgs.cs
- DiscardableAttribute.cs
- EditCommandColumn.cs
- ContentPlaceHolder.cs
- IdentityHolder.cs
- TextEvent.cs
- ConfigXmlCDataSection.cs
- BinaryObjectInfo.cs
- DataGridViewComboBoxCell.cs
- Keyboard.cs
- SqlAliasesReferenced.cs
- TextRangeBase.cs
- ObsoleteAttribute.cs
- Math.cs
- TypeConverterBase.cs
- TreeWalker.cs
- ObjectStateEntry.cs
- CheckPair.cs
- Margins.cs
- Section.cs
- HtmlControlPersistable.cs
- DataServiceQueryOfT.cs
- StylusPointCollection.cs
- securitycriticaldataClass.cs
- MsmqChannelFactory.cs
- Panel.cs
- DataServiceProviderMethods.cs
- AstNode.cs
- DesignerLoader.cs
- QilLiteral.cs
- DataExpression.cs
- WebInvokeAttribute.cs
- GlyphRunDrawing.cs
- FileIOPermission.cs
- ConditionalWeakTable.cs
- RenderDataDrawingContext.cs
- SelectionEditor.cs
- BasePropertyDescriptor.cs
- Figure.cs
- FastPropertyAccessor.cs