Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / CompMod / System / ComponentModel / Design / DesigntimeLicenseContext.cs / 1305376 / DesigntimeLicenseContext.cs
//------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- namespace System.ComponentModel.Design { using System.Runtime.Remoting; using System.Diagnostics; using System; using Microsoft.Win32; using System.Net; using System.IO; using System.Reflection; using System.Reflection.Emit; using System.Collections; using System.ComponentModel; using System.Globalization; using System.Security; using System.Security.Permissions; ////// [HostProtection(SharedState = true)] [System.Security.Permissions.PermissionSetAttribute(System.Security.Permissions.SecurityAction.InheritanceDemand, Name = "FullTrust")] [System.Security.Permissions.PermissionSetAttribute(System.Security.Permissions.SecurityAction.LinkDemand, Name="FullTrust")] public class DesigntimeLicenseContext : LicenseContext { internal Hashtable savedLicenseKeys = new Hashtable(); ////// Provides design-time support for licensing. /// ////// public override LicenseUsageMode UsageMode { get { return LicenseUsageMode.Designtime; } } ////// Gets or sets the license usage mode. /// ////// public override string GetSavedLicenseKey(Type type, Assembly resourceAssembly) { return null; } ////// Gets a saved license key. /// ////// public override void SetSavedLicenseKey(Type type, string key) { savedLicenseKeys[type.AssemblyQualifiedName] = key; } } [HostProtection(SharedState = true)] internal class RuntimeLicenseContext : LicenseContext { private static TraceSwitch RuntimeLicenseContextSwitch = new TraceSwitch("RuntimeLicenseContextTrace", "RuntimeLicenseContext tracing"); const int ReadBlock = 400; internal Hashtable savedLicenseKeys; ////// Sets a saved license key. /// ////// This method takes a file URL and converts it to a local path. The trick here is that /// if there is a '#' in the path, everything after this is treated as a fragment. So /// we need to append the fragment to the end of the path. /// private string GetLocalPath(string fileName) { System.Diagnostics.Debug.Assert(fileName != null && fileName.Length > 0, "Cannot get local path, fileName is not valid"); Uri uri = new Uri(fileName); return uri.LocalPath + uri.Fragment; } public override string GetSavedLicenseKey(Type type, Assembly resourceAssembly) { if (savedLicenseKeys == null || savedLicenseKeys[type.AssemblyQualifiedName]==null) { Debug.WriteLineIf(RuntimeLicenseContextSwitch.TraceVerbose, "savedLicenseKey is null or doesnt contain our type"); if (savedLicenseKeys == null) { savedLicenseKeys = new Hashtable(); } Uri licenseFile = null; if (resourceAssembly == null) { Debug.WriteLineIf(RuntimeLicenseContextSwitch.TraceVerbose,"resourceAssembly is null"); string rawFile = (string)AppDomain.CurrentDomain.SetupInformation.LicenseFile; Debug.WriteLineIf(RuntimeLicenseContextSwitch.TraceVerbose,"rawfile: " + rawFile); string codeBase; // FileIOPermission is required for ApplicationBase in URL-hosted domains FileIOPermission perm = new FileIOPermission(PermissionState.Unrestricted); perm.Assert(); try { codeBase = AppDomain.CurrentDomain.SetupInformation.ApplicationBase; } finally { CodeAccessPermission.RevertAssert(); } if (rawFile != null && codeBase != null) { licenseFile = new Uri(new Uri(codeBase), rawFile); } } if (licenseFile == null) { if(resourceAssembly == null) { resourceAssembly = Assembly.GetEntryAssembly(); } if (resourceAssembly == null) { Debug.WriteLineIf(RuntimeLicenseContextSwitch.TraceVerbose,"resourceAssembly is null"); // If Assembly.EntryAssembly returns null, then we will // try everything! // foreach (Assembly asm in AppDomain.CurrentDomain.GetAssemblies()) { // Though, I could not repro this, we seem to be hitting an AssemblyBuilder // when walking through all the assemblies in the current app domain. This throws an // exception on Assembly.CodeBase and we bail out. Catching exceptions here is not a // bad thing. if (asm.IsDynamic) continue; // file://fullpath/foo.exe // string fileName; FileIOPermission perm = new FileIOPermission(PermissionState.Unrestricted); perm.Assert(); try { fileName = GetLocalPath(asm.EscapedCodeBase); fileName = new FileInfo(fileName).Name; } finally { CodeAccessPermission.RevertAssert(); } Stream s = asm.GetManifestResourceStream(fileName + ".licenses"); if (s == null) { //Since the casing may be different depending on how the assembly was loaded, //we'll do a case insensitive lookup for this manifest resource stream... s = CaseInsensitiveManifestResourceStreamLookup(asm, fileName + ".licenses"); } if (s != null) { DesigntimeLicenseContextSerializer.Deserialize(s, fileName.ToUpper(CultureInfo.InvariantCulture), this); break; } } } else if(!resourceAssembly.IsDynamic) { // EscapedCodeBase won't be supported by emitted assemblies anyway Debug.WriteLineIf(RuntimeLicenseContextSwitch.TraceVerbose,"resourceAssembly is not null"); string fileName; FileIOPermission perm = new FileIOPermission(PermissionState.Unrestricted); perm.Assert(); try { fileName = GetLocalPath(resourceAssembly.EscapedCodeBase); } finally { CodeAccessPermission.RevertAssert(); } fileName = Path.GetFileName(fileName); // we don't want to use FileInfo here... it requests FileIOPermission that we // might now have... see VSWhidbey 527758 string licResourceName = fileName + ".licenses"; // first try the filename Stream s = resourceAssembly.GetManifestResourceStream(licResourceName); if (s == null) { string resolvedName = null; CompareInfo comparer = CultureInfo.InvariantCulture.CompareInfo; string shortAssemblyName = resourceAssembly.GetName().Name; // if the assembly has been renamed, we try our best to find a good match in the available resources // by looking at the assembly name (which doesn't change even after a file rename) + ".exe.licenses" or + ".dll.licenses" foreach(String existingName in resourceAssembly.GetManifestResourceNames()) { if (comparer.Compare(existingName, licResourceName, CompareOptions.IgnoreCase) == 0 || comparer.Compare(existingName, shortAssemblyName + ".exe.licenses", CompareOptions.IgnoreCase) == 0 || comparer.Compare(existingName, shortAssemblyName + ".dll.licenses", CompareOptions.IgnoreCase) == 0) { resolvedName = existingName; break; } } if (resolvedName != null) { s = resourceAssembly.GetManifestResourceStream(resolvedName); } } if (s != null) { DesigntimeLicenseContextSerializer.Deserialize(s, fileName.ToUpper(CultureInfo.InvariantCulture), this); } } } if (licenseFile != null) { Debug.WriteLineIf(RuntimeLicenseContextSwitch.TraceVerbose,"licenseFile: " + licenseFile.ToString()); Debug.WriteLineIf(RuntimeLicenseContextSwitch.TraceVerbose,"opening licenses file over URI " + licenseFile.ToString()); Stream s = OpenRead(licenseFile); if (s != null) { string[] segments = licenseFile.Segments; string licFileName = segments[segments.Length - 1]; string key = licFileName.Substring(0, licFileName.LastIndexOf(".")); DesigntimeLicenseContextSerializer.Deserialize(s, key.ToUpper(CultureInfo.InvariantCulture), this); } } } Debug.WriteLineIf(RuntimeLicenseContextSwitch.TraceVerbose,"returning : " + (string)savedLicenseKeys[type.AssemblyQualifiedName]); return(string)savedLicenseKeys[type.AssemblyQualifiedName]; } /** * Looks up a .licenses file in the assembly manifest using * case-insensitive lookup rules. We do this because the name * we are attempting to locate could have different casing * depending on how the assembly was loaded. **/ private Stream CaseInsensitiveManifestResourceStreamLookup(Assembly satellite, string name) { CompareInfo comparer = CultureInfo.InvariantCulture.CompareInfo; //loop through the resource names in the assembly // we try to handle the case where the assembly file name has been renamed // by trying to guess the original file name based on the assembly name... string assemblyShortName = satellite.GetName().Name; foreach(string existingName in satellite.GetManifestResourceNames()) { if (comparer.Compare(existingName, name, CompareOptions.IgnoreCase) == 0 || comparer.Compare(existingName, assemblyShortName + ".exe.licenses") == 0 || comparer.Compare(existingName, assemblyShortName + ".dll.licenses") == 0) { name = existingName; break; } } //finally, attempt to return our stream based on the //case insensitive match we found // return satellite.GetManifestResourceStream(name); } static Stream OpenRead(Uri resourceUri) { Stream result = null; PermissionSet perms = new PermissionSet(PermissionState.Unrestricted); perms.Assert(); try { WebClient webClient = new WebClient(); webClient.Credentials = CredentialCache.DefaultCredentials; result = webClient.OpenRead(resourceUri.ToString()); } catch (Exception e) { Debug.Fail(e.ToString()); } finally { CodeAccessPermission.RevertAssert(); } return result; } } } // 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
- ping.cs
- DeviceFilterDictionary.cs
- RemotingException.cs
- XmlTextReader.cs
- HMACRIPEMD160.cs
- newitemfactory.cs
- ConstructorBuilder.cs
- ByteStreamMessageEncoderFactory.cs
- BuilderPropertyEntry.cs
- DtdParser.cs
- DateTimeConverter2.cs
- ConfigWriter.cs
- LinkLabel.cs
- Parameter.cs
- OdbcConnectionString.cs
- MachineSettingsSection.cs
- HMACSHA384.cs
- Query.cs
- DesignerMetadata.cs
- Variable.cs
- DBAsyncResult.cs
- AssertSection.cs
- brushes.cs
- ClientConvert.cs
- SoapElementAttribute.cs
- AliasedSlot.cs
- MexHttpBindingElement.cs
- DrawingCollection.cs
- HtmlTableRowCollection.cs
- MetaColumn.cs
- ForEachAction.cs
- SpellerHighlightLayer.cs
- DataGridViewCellErrorTextNeededEventArgs.cs
- IIS7WorkerRequest.cs
- SemanticBasicElement.cs
- GridItem.cs
- ZoneMembershipCondition.cs
- BamlWriter.cs
- XPathNodePointer.cs
- _SslState.cs
- DoubleAnimationUsingKeyFrames.cs
- MenuItemBindingCollection.cs
- Encoder.cs
- SqlMethodCallConverter.cs
- BinaryFormatterSinks.cs
- NonVisualControlAttribute.cs
- RotateTransform3D.cs
- MouseButton.cs
- SmtpDigestAuthenticationModule.cs
- GenericUriParser.cs
- ExpandCollapseProviderWrapper.cs
- CodeAttributeArgument.cs
- ActivityPreviewDesigner.cs
- BamlLocalizableResource.cs
- IOThreadTimer.cs
- UnsafeNativeMethods.cs
- ScrollItemPattern.cs
- Invariant.cs
- SecurityContext.cs
- LinkDescriptor.cs
- SystemResourceHost.cs
- UIElementParagraph.cs
- Rights.cs
- NTAccount.cs
- OutputCacheSettingsSection.cs
- ListViewHitTestInfo.cs
- NetworkStream.cs
- DesigntimeLicenseContext.cs
- DataObjectSettingDataEventArgs.cs
- BrowserTree.cs
- ZoomPercentageConverter.cs
- Attributes.cs
- SourceChangedEventArgs.cs
- OneOf.cs
- EditorPartDesigner.cs
- TimeSpanStorage.cs
- LinkLabel.cs
- DropTarget.cs
- Symbol.cs
- _KerberosClient.cs
- TimersDescriptionAttribute.cs
- DataTrigger.cs
- ConnectionManager.cs
- WindowsHyperlink.cs
- ToolBar.cs
- TextEndOfLine.cs
- SrgsDocumentParser.cs
- MdImport.cs
- precedingsibling.cs
- EntityDataSourceContainerNameItem.cs
- Int32Rect.cs
- IProvider.cs
- RunInstallerAttribute.cs
- ScriptReferenceEventArgs.cs
- ScriptControl.cs
- EtwTrace.cs
- MarkupCompilePass1.cs
- ProgressBarAutomationPeer.cs
- FacetDescription.cs
- StorageFunctionMapping.cs