Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / Orcas / QFE / wpf / src / Framework / System / Windows / Documents / Serialization / SerializerProvider.cs / 1 / SerializerProvider.cs
//---------------------------------------------------------------------------- // //// Copyright (C) Microsoft Corporation. All rights reserved. // // // // Description: Manages plug-in document serializers // // See spec at// // History: // 07/16/2005 : oliverfo - Created // //--------------------------------------------------------------------------- using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.IO; using System.Reflection; using System.Security; using System.Security.Permissions; using System.Windows.Xps.Serialization; using System.Diagnostics.CodeAnalysis; using Microsoft.Win32; using MS.Internal.PresentationFramework; #pragma warning disable 1634, 1691 // suppressing PreSharp warnings namespace System.Windows.Documents.Serialization { /// /// SerializerProvider enumerates plug-in serializers /// public sealed class SerializerProvider { #region Constructors ////// creates a SerializerProvider /// The constructor accesses the registry to find all installed plug-ins /// ////// Create a SerializerProvider listing all installed serializers (from the registry) /// /// This method currently requires full trust to run. /// ////// The DemandPlugInSerializerPermissions() ensures that this method only works in full trust. /// Full trust is required, so that partial trust applications do not load or use potentially /// unsafe serializer plug ins /// public SerializerProvider() { SecurityHelper.DemandPlugInSerializerPermissions(); SerializerDescriptor sd = null; ListinstalledSerializers = new List (); sd = CreateSystemSerializerDescriptor(); if (sd != null) { installedSerializers.Add(sd); } RegistryKey plugIns = _rootKey.CreateSubKey(_registryPath); if ( plugIns != null ) { foreach ( string keyName in plugIns.GetSubKeyNames()) { sd = SerializerDescriptor.CreateFromRegistry(plugIns, keyName); if (sd != null) { installedSerializers.Add(sd); } } plugIns.Close(); } _installedSerializers = installedSerializers.AsReadOnly(); } #endregion #region Public Methods /// /// Registers the serializer plug-in identified by serializerDescriptor in the registry /// ////// The DemandPlugInSerializerPermissions() ensures that this method only works in full trust. /// Full trust is required, so that partial trust applications install /// potentially unsafe serializer plug ins /// public static void RegisterSerializer(SerializerDescriptor serializerDescriptor, bool overwrite) { SecurityHelper.DemandPlugInSerializerPermissions(); if (serializerDescriptor == null) { throw new ArgumentNullException("serializerDescriptor"); } RegistryKey plugIns = _rootKey.CreateSubKey(_registryPath); string serializerKey = serializerDescriptor.DisplayName + "/" + serializerDescriptor.AssemblyName + "/" + serializerDescriptor.AssemblyVersion + "/" + serializerDescriptor.WinFXVersion; if (!overwrite && plugIns.OpenSubKey(serializerKey) != null) { throw new ArgumentException(SR.Get(SRID.SerializerProviderAlreadyRegistered), serializerKey); } RegistryKey newPlugIn = plugIns.CreateSubKey(serializerKey); serializerDescriptor.WriteToRegistryKey(newPlugIn); newPlugIn.Close(); } ////// Un-Registers the serializer plug-in identified by serializerDescriptor in the registry /// ////// Removes a previously installed plug-n serialiazer from the registry /// /// This method currently requires full trust to run. /// ////// The DemandPlugInSerializerPermissions() ensures that this method only works in full trust. /// Full trust is required, so that partial trust applications do not uninstall /// serializer plug ins /// public static void UnregisterSerializer(SerializerDescriptor serializerDescriptor) { SecurityHelper.DemandPlugInSerializerPermissions(); if (serializerDescriptor == null) { throw new ArgumentNullException("serializerDescriptor"); } RegistryKey plugIns = _rootKey.CreateSubKey(_registryPath); string serializerKey = serializerDescriptor.DisplayName + "/" + serializerDescriptor.AssemblyName + "/" + serializerDescriptor.AssemblyVersion + "/" + serializerDescriptor.WinFXVersion; if (plugIns.OpenSubKey(serializerKey) == null) { throw new ArgumentException(SR.Get(SRID.SerializerProviderNotRegistered), serializerKey); } plugIns.DeleteSubKeyTree(serializerKey); } ////// Create a SerializerWriter identified by the passed in SerializerDescriptor on the passed in stream /// ////// With a SerializerProvider (which requires full trust to ctor) and a SerializerDescriptor (which requires /// full trust to obtain) create a SerializerWriter /// /// This method currently requires full trust to run. /// ////// The DemandPlugInSerializerPermissions() ensures that this method only works in full trust. /// Full trust is required, so that partial trust applications do not load or use potentially /// unsafe serializer plug ins /// public SerializerWriter CreateSerializerWriter(SerializerDescriptor serializerDescriptor, Stream stream) { SecurityHelper.DemandPlugInSerializerPermissions(); SerializerWriter serializerWriter = null; if (serializerDescriptor == null) { throw new ArgumentNullException("serializerDescriptor"); } string serializerKey = serializerDescriptor.DisplayName + "/" + serializerDescriptor.AssemblyName + "/" + serializerDescriptor.AssemblyVersion + "/" + serializerDescriptor.WinFXVersion; if (!serializerDescriptor.IsLoadable) { throw new ArgumentException(SR.Get(SRID.SerializerProviderWrongVersion), serializerKey); } if (stream == null) { throw new ArgumentNullException("stream"); } bool found = false; foreach (SerializerDescriptor sd in InstalledSerializers) { if (sd.Equals(serializerDescriptor)) { found = true; break; } } if (!found) { throw new ArgumentException(SR.Get(SRID.SerializerProviderUnknownSerializer), serializerKey); } try { ISerializerFactory factory = serializerDescriptor.CreateSerializerFactory(); serializerWriter = factory.CreateSerializerWriter(stream); } catch (FileNotFoundException) { throw new ArgumentException(SR.Get(SRID.SerializerProviderCannotLoad), serializerDescriptor.DisplayName); } catch (FileLoadException) { throw new ArgumentException(SR.Get(SRID.SerializerProviderCannotLoad), serializerDescriptor.DisplayName); } catch (BadImageFormatException) { throw new ArgumentException(SR.Get(SRID.SerializerProviderCannotLoad), serializerDescriptor.DisplayName); } catch (MissingMethodException) { throw new ArgumentException(SR.Get(SRID.SerializerProviderCannotLoad), serializerDescriptor.DisplayName); } return serializerWriter; } #endregion #region Private Methods ////// Uses reflection to create the XpsSerializer /// ////// Creates the Xps default serializer /// /// This method currently requires full trust to run. /// ////// Critical: XpsSerializerFactory..ctor is defined in a non-APTCA assembly. /// TreatAsSafe: demands appropriate permissions. /// The DemandPlugInSerializerPermissions() ensures that this method only works in full trust. /// Full trust is required, so that partial trust applications do not load the ReachFramework.dll /// which does not the Aptca attribute set /// ///SerializerDescriptor for new serializer [SuppressMessage("Microsoft.Security", "CA2116:AptcaMethodsShouldOnlyCallAptcaMethods")] [SecurityCritical, SecurityTreatAsSafe] private SerializerDescriptor CreateSystemSerializerDescriptor() { SecurityHelper.DemandPlugInSerializerPermissions(); SerializerDescriptor serializerDescriptor = null; // The XpsSerializer (our default document serializer) is defined in ReachFramework.dll // But callers can only get here if the above demand succeeds, so they are already fully trusted serializerDescriptor = SerializerDescriptor.CreateFromFactoryInstance( new XpsSerializerFactory() ); return serializerDescriptor; } #endregion #region Public Properties ////// Returns collection of installed serializers /// public ReadOnlyCollectionInstalledSerializers { get { return _installedSerializers; } } #endregion #region Data private const string _registryPath = @"SOFTWARE\Microsoft\WinFX Serializers"; private static readonly RegistryKey _rootKey = Registry.LocalMachine; private ReadOnlyCollection _installedSerializers; #endregion } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved. //---------------------------------------------------------------------------- // // // Copyright (C) Microsoft Corporation. All rights reserved. // // // // Description: Manages plug-in document serializers // // See spec at// // History: // 07/16/2005 : oliverfo - Created // //--------------------------------------------------------------------------- using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.IO; using System.Reflection; using System.Security; using System.Security.Permissions; using System.Windows.Xps.Serialization; using System.Diagnostics.CodeAnalysis; using Microsoft.Win32; using MS.Internal.PresentationFramework; #pragma warning disable 1634, 1691 // suppressing PreSharp warnings namespace System.Windows.Documents.Serialization { /// /// SerializerProvider enumerates plug-in serializers /// public sealed class SerializerProvider { #region Constructors ////// creates a SerializerProvider /// The constructor accesses the registry to find all installed plug-ins /// ////// Create a SerializerProvider listing all installed serializers (from the registry) /// /// This method currently requires full trust to run. /// ////// The DemandPlugInSerializerPermissions() ensures that this method only works in full trust. /// Full trust is required, so that partial trust applications do not load or use potentially /// unsafe serializer plug ins /// public SerializerProvider() { SecurityHelper.DemandPlugInSerializerPermissions(); SerializerDescriptor sd = null; ListinstalledSerializers = new List (); sd = CreateSystemSerializerDescriptor(); if (sd != null) { installedSerializers.Add(sd); } RegistryKey plugIns = _rootKey.CreateSubKey(_registryPath); if ( plugIns != null ) { foreach ( string keyName in plugIns.GetSubKeyNames()) { sd = SerializerDescriptor.CreateFromRegistry(plugIns, keyName); if (sd != null) { installedSerializers.Add(sd); } } plugIns.Close(); } _installedSerializers = installedSerializers.AsReadOnly(); } #endregion #region Public Methods /// /// Registers the serializer plug-in identified by serializerDescriptor in the registry /// ////// The DemandPlugInSerializerPermissions() ensures that this method only works in full trust. /// Full trust is required, so that partial trust applications install /// potentially unsafe serializer plug ins /// public static void RegisterSerializer(SerializerDescriptor serializerDescriptor, bool overwrite) { SecurityHelper.DemandPlugInSerializerPermissions(); if (serializerDescriptor == null) { throw new ArgumentNullException("serializerDescriptor"); } RegistryKey plugIns = _rootKey.CreateSubKey(_registryPath); string serializerKey = serializerDescriptor.DisplayName + "/" + serializerDescriptor.AssemblyName + "/" + serializerDescriptor.AssemblyVersion + "/" + serializerDescriptor.WinFXVersion; if (!overwrite && plugIns.OpenSubKey(serializerKey) != null) { throw new ArgumentException(SR.Get(SRID.SerializerProviderAlreadyRegistered), serializerKey); } RegistryKey newPlugIn = plugIns.CreateSubKey(serializerKey); serializerDescriptor.WriteToRegistryKey(newPlugIn); newPlugIn.Close(); } ////// Un-Registers the serializer plug-in identified by serializerDescriptor in the registry /// ////// Removes a previously installed plug-n serialiazer from the registry /// /// This method currently requires full trust to run. /// ////// The DemandPlugInSerializerPermissions() ensures that this method only works in full trust. /// Full trust is required, so that partial trust applications do not uninstall /// serializer plug ins /// public static void UnregisterSerializer(SerializerDescriptor serializerDescriptor) { SecurityHelper.DemandPlugInSerializerPermissions(); if (serializerDescriptor == null) { throw new ArgumentNullException("serializerDescriptor"); } RegistryKey plugIns = _rootKey.CreateSubKey(_registryPath); string serializerKey = serializerDescriptor.DisplayName + "/" + serializerDescriptor.AssemblyName + "/" + serializerDescriptor.AssemblyVersion + "/" + serializerDescriptor.WinFXVersion; if (plugIns.OpenSubKey(serializerKey) == null) { throw new ArgumentException(SR.Get(SRID.SerializerProviderNotRegistered), serializerKey); } plugIns.DeleteSubKeyTree(serializerKey); } ////// Create a SerializerWriter identified by the passed in SerializerDescriptor on the passed in stream /// ////// With a SerializerProvider (which requires full trust to ctor) and a SerializerDescriptor (which requires /// full trust to obtain) create a SerializerWriter /// /// This method currently requires full trust to run. /// ////// The DemandPlugInSerializerPermissions() ensures that this method only works in full trust. /// Full trust is required, so that partial trust applications do not load or use potentially /// unsafe serializer plug ins /// public SerializerWriter CreateSerializerWriter(SerializerDescriptor serializerDescriptor, Stream stream) { SecurityHelper.DemandPlugInSerializerPermissions(); SerializerWriter serializerWriter = null; if (serializerDescriptor == null) { throw new ArgumentNullException("serializerDescriptor"); } string serializerKey = serializerDescriptor.DisplayName + "/" + serializerDescriptor.AssemblyName + "/" + serializerDescriptor.AssemblyVersion + "/" + serializerDescriptor.WinFXVersion; if (!serializerDescriptor.IsLoadable) { throw new ArgumentException(SR.Get(SRID.SerializerProviderWrongVersion), serializerKey); } if (stream == null) { throw new ArgumentNullException("stream"); } bool found = false; foreach (SerializerDescriptor sd in InstalledSerializers) { if (sd.Equals(serializerDescriptor)) { found = true; break; } } if (!found) { throw new ArgumentException(SR.Get(SRID.SerializerProviderUnknownSerializer), serializerKey); } try { ISerializerFactory factory = serializerDescriptor.CreateSerializerFactory(); serializerWriter = factory.CreateSerializerWriter(stream); } catch (FileNotFoundException) { throw new ArgumentException(SR.Get(SRID.SerializerProviderCannotLoad), serializerDescriptor.DisplayName); } catch (FileLoadException) { throw new ArgumentException(SR.Get(SRID.SerializerProviderCannotLoad), serializerDescriptor.DisplayName); } catch (BadImageFormatException) { throw new ArgumentException(SR.Get(SRID.SerializerProviderCannotLoad), serializerDescriptor.DisplayName); } catch (MissingMethodException) { throw new ArgumentException(SR.Get(SRID.SerializerProviderCannotLoad), serializerDescriptor.DisplayName); } return serializerWriter; } #endregion #region Private Methods ////// Uses reflection to create the XpsSerializer /// ////// Creates the Xps default serializer /// /// This method currently requires full trust to run. /// ////// Critical: XpsSerializerFactory..ctor is defined in a non-APTCA assembly. /// TreatAsSafe: demands appropriate permissions. /// The DemandPlugInSerializerPermissions() ensures that this method only works in full trust. /// Full trust is required, so that partial trust applications do not load the ReachFramework.dll /// which does not the Aptca attribute set /// ///SerializerDescriptor for new serializer [SuppressMessage("Microsoft.Security", "CA2116:AptcaMethodsShouldOnlyCallAptcaMethods")] [SecurityCritical, SecurityTreatAsSafe] private SerializerDescriptor CreateSystemSerializerDescriptor() { SecurityHelper.DemandPlugInSerializerPermissions(); SerializerDescriptor serializerDescriptor = null; // The XpsSerializer (our default document serializer) is defined in ReachFramework.dll // But callers can only get here if the above demand succeeds, so they are already fully trusted serializerDescriptor = SerializerDescriptor.CreateFromFactoryInstance( new XpsSerializerFactory() ); return serializerDescriptor; } #endregion #region Public Properties ////// Returns collection of installed serializers /// public ReadOnlyCollectionInstalledSerializers { get { return _installedSerializers; } } #endregion #region Data private const string _registryPath = @"SOFTWARE\Microsoft\WinFX Serializers"; private static readonly RegistryKey _rootKey = Registry.LocalMachine; private ReadOnlyCollection _installedSerializers; #endregion } } // 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
- figurelength.cs
- PolicyChain.cs
- WebPartConnectionsEventArgs.cs
- FormsAuthenticationUser.cs
- FontDialog.cs
- Pen.cs
- EditorZone.cs
- DefaultProxySection.cs
- DesignerHelpers.cs
- CodeStatementCollection.cs
- SessionIDManager.cs
- ProjectionPath.cs
- OrderedEnumerableRowCollection.cs
- RowTypeElement.cs
- StrokeNodeData.cs
- EventLogPermissionEntryCollection.cs
- AssertValidation.cs
- CodeArgumentReferenceExpression.cs
- IResourceProvider.cs
- CommentAction.cs
- ExpressionBuilder.cs
- MetadataSource.cs
- CodeExpressionCollection.cs
- FragmentNavigationEventArgs.cs
- XmlBuffer.cs
- ComponentManagerBroker.cs
- Parser.cs
- WSMessageEncoding.cs
- FrameworkElement.cs
- DuplicateDetector.cs
- OperationAbortedException.cs
- XNodeValidator.cs
- RenderDataDrawingContext.cs
- TextEncodedRawTextWriter.cs
- ItemCheckEvent.cs
- ValueType.cs
- QueryOptionExpression.cs
- xamlnodes.cs
- ThumbButtonInfo.cs
- DataGridViewCellParsingEventArgs.cs
- ObjRef.cs
- HierarchicalDataSourceControl.cs
- HitTestDrawingContextWalker.cs
- CasesDictionary.cs
- odbcmetadatafactory.cs
- XPathMultyIterator.cs
- UdpContractFilterBehavior.cs
- DecimalStorage.cs
- ParameterModifier.cs
- UdpTransportSettingsElement.cs
- Parser.cs
- TransactionFlowProperty.cs
- WindowsImpersonationContext.cs
- ServicesExceptionNotHandledEventArgs.cs
- DataSource.cs
- GridViewDesigner.cs
- Int32Rect.cs
- FtpWebRequest.cs
- HostingEnvironment.cs
- KerberosSecurityTokenAuthenticator.cs
- DataGridViewRowHeightInfoNeededEventArgs.cs
- RetrieveVirtualItemEventArgs.cs
- InternalDispatchObject.cs
- CustomWebEventKey.cs
- Int64.cs
- LightweightCodeGenerator.cs
- ObjectDataSource.cs
- GraphicsState.cs
- DatePickerAutomationPeer.cs
- ChameleonKey.cs
- IndexerReference.cs
- DataServiceProviderMethods.cs
- WebPartChrome.cs
- TransformerConfigurationWizardBase.cs
- HeaderLabel.cs
- SetterBaseCollection.cs
- TextControlDesigner.cs
- TextEditorTyping.cs
- CryptoApi.cs
- PointAnimation.cs
- GifBitmapEncoder.cs
- PresentationTraceSources.cs
- BasicCellRelation.cs
- QilLoop.cs
- ListControl.cs
- FirstMatchCodeGroup.cs
- DistributedTransactionPermission.cs
- CategoryValueConverter.cs
- ItemCheckEvent.cs
- CryptoStream.cs
- RSAOAEPKeyExchangeDeformatter.cs
- RtfFormatStack.cs
- AdditionalEntityFunctions.cs
- FrameworkTemplate.cs
- DoubleLinkListEnumerator.cs
- Scene3D.cs
- XmlDesigner.cs
- StylusEventArgs.cs
- EnumValAlphaComparer.cs
- StandardToolWindows.cs