Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / wpf / src / Core / CSharp / System / Windows / Media / Imaging / UnknownBitmapDecoder.cs / 1305600 / UnknownBitmapDecoder.cs
//------------------------------------------------------------------------------ // Microsoft Avalon // Copyright (c) Microsoft Corporation, All Rights Reserved // // File: UnknownBitmapDecoder.cs // //----------------------------------------------------------------------------- using System; using System.IO; using System.Collections; using System.Security; using System.Security.Permissions; using System.ComponentModel; using System.ComponentModel.Design.Serialization; using System.Reflection; using Microsoft.Win32.SafeHandles; using MS.Internal; using System.Diagnostics; using System.Windows.Media; using System.Globalization; using System.Runtime.InteropServices; namespace System.Windows.Media.Imaging { #region UnknownBitmapDecoder ////// The built-in Microsoft Unknown (Bitmap) Decoder. /// internal sealed class UnknownBitmapDecoder : BitmapDecoder { ////// This class is to allow us to call CoInitialize when the UnknownBitmapDecoder /// is created, so that the unmanaged dll does not get unload until we are. /// private class CoInitSafeHandle : SafeMILHandle { ////// Critical - accesses critical code. /// TreatAsSafe - No inputs, does not touch any critical data with external input. /// [SecurityCritical, SecurityTreatAsSafe] public CoInitSafeHandle() { MS.Win32.PresentationCore.UnsafeNativeMethods.WICCodec.CoInitialize(IntPtr.Zero); } ////// Critical - accesses critical code. /// TreatAsSafe - No inputs, does not touch any critical data with external input. /// [SecurityCritical, SecurityTreatAsSafe] protected override bool ReleaseHandle() { MS.Win32.PresentationCore.UnsafeNativeMethods.WICCodec.CoUninitialize(); return true; } } ////// Don't allow construction of a decoder with no params /// private UnknownBitmapDecoder() { } ////// Internal Constructor /// ////// Critical: Uses a SafeFileHandle, which is a SecurityCritical type (in v4). /// Calls SecurityCritical base class constructor. /// [SecurityCritical] internal UnknownBitmapDecoder( SafeMILHandle decoderHandle, BitmapDecoder decoder, Uri baseUri, Uri uri, Stream stream, BitmapCreateOptions createOptions, BitmapCacheOption cacheOption, bool insertInDecoderCache, bool originalWritable, Stream uriStream, UnmanagedMemoryStream unmanagedMemoryStream, SafeFileHandle safeFilehandle ) : base(decoderHandle, decoder, baseUri, uri, stream, createOptions, cacheOption, insertInDecoderCache, originalWritable, uriStream, unmanagedMemoryStream, safeFilehandle) { } #region Internal Abstract /// Need to implement this to derive from the "sealed" object internal override void SealObject() { throw new NotImplementedException(); } #endregion ////// Store a safe handle to take care of calling CoInitialize /// and CoUninitialize for us when the object is created/disposed. /// private CoInitSafeHandle _safeHandle = new CoInitSafeHandle(); } #endregion } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved. //------------------------------------------------------------------------------ // Microsoft Avalon // Copyright (c) Microsoft Corporation, All Rights Reserved // // File: UnknownBitmapDecoder.cs // //----------------------------------------------------------------------------- using System; using System.IO; using System.Collections; using System.Security; using System.Security.Permissions; using System.ComponentModel; using System.ComponentModel.Design.Serialization; using System.Reflection; using Microsoft.Win32.SafeHandles; using MS.Internal; using System.Diagnostics; using System.Windows.Media; using System.Globalization; using System.Runtime.InteropServices; namespace System.Windows.Media.Imaging { #region UnknownBitmapDecoder ////// The built-in Microsoft Unknown (Bitmap) Decoder. /// internal sealed class UnknownBitmapDecoder : BitmapDecoder { ////// This class is to allow us to call CoInitialize when the UnknownBitmapDecoder /// is created, so that the unmanaged dll does not get unload until we are. /// private class CoInitSafeHandle : SafeMILHandle { ////// Critical - accesses critical code. /// TreatAsSafe - No inputs, does not touch any critical data with external input. /// [SecurityCritical, SecurityTreatAsSafe] public CoInitSafeHandle() { MS.Win32.PresentationCore.UnsafeNativeMethods.WICCodec.CoInitialize(IntPtr.Zero); } ////// Critical - accesses critical code. /// TreatAsSafe - No inputs, does not touch any critical data with external input. /// [SecurityCritical, SecurityTreatAsSafe] protected override bool ReleaseHandle() { MS.Win32.PresentationCore.UnsafeNativeMethods.WICCodec.CoUninitialize(); return true; } } ////// Don't allow construction of a decoder with no params /// private UnknownBitmapDecoder() { } ////// Internal Constructor /// ////// Critical: Uses a SafeFileHandle, which is a SecurityCritical type (in v4). /// Calls SecurityCritical base class constructor. /// [SecurityCritical] internal UnknownBitmapDecoder( SafeMILHandle decoderHandle, BitmapDecoder decoder, Uri baseUri, Uri uri, Stream stream, BitmapCreateOptions createOptions, BitmapCacheOption cacheOption, bool insertInDecoderCache, bool originalWritable, Stream uriStream, UnmanagedMemoryStream unmanagedMemoryStream, SafeFileHandle safeFilehandle ) : base(decoderHandle, decoder, baseUri, uri, stream, createOptions, cacheOption, insertInDecoderCache, originalWritable, uriStream, unmanagedMemoryStream, safeFilehandle) { } #region Internal Abstract /// Need to implement this to derive from the "sealed" object internal override void SealObject() { throw new NotImplementedException(); } #endregion ////// Store a safe handle to take care of calling CoInitialize /// and CoUninitialize for us when the object is created/disposed. /// private CoInitSafeHandle _safeHandle = new CoInitSafeHandle(); } #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
- SettingsPropertyValueCollection.cs
- SecurityRuntime.cs
- SchemaImporterExtensionElementCollection.cs
- HierarchicalDataTemplate.cs
- GenericRootAutomationPeer.cs
- ObjectListComponentEditor.cs
- FileLogRecordHeader.cs
- UiaCoreTypesApi.cs
- DPCustomTypeDescriptor.cs
- XPathSingletonIterator.cs
- TextBoxBase.cs
- LayoutEvent.cs
- IERequestCache.cs
- AutomationAttributeInfo.cs
- ReaderWriterLockWrapper.cs
- TextFormatter.cs
- AliasedSlot.cs
- ContentPlaceHolder.cs
- ConfigurationValidatorAttribute.cs
- TextElementCollectionHelper.cs
- UpdateTracker.cs
- DesignerForm.cs
- ReadWriteObjectLock.cs
- XmlDeclaration.cs
- Composition.cs
- OdbcParameter.cs
- SqlFileStream.cs
- SettingsSavedEventArgs.cs
- TreeViewItemAutomationPeer.cs
- HtmlElementEventArgs.cs
- TextPointerBase.cs
- PointConverter.cs
- ConfigXmlElement.cs
- PriorityItem.cs
- LocationSectionRecord.cs
- WebEventCodes.cs
- ListManagerBindingsCollection.cs
- ProxyElement.cs
- x509utils.cs
- LinearGradientBrush.cs
- IOException.cs
- MdImport.cs
- DataServiceQuery.cs
- x509utils.cs
- TableItemPattern.cs
- AppDomainProtocolHandler.cs
- MetafileHeaderWmf.cs
- KeyPressEvent.cs
- Partitioner.cs
- Mapping.cs
- TextTabProperties.cs
- DataSourceDescriptorCollection.cs
- UnaryNode.cs
- ToolStripContainerActionList.cs
- objectquery_tresulttype.cs
- TableLayoutCellPaintEventArgs.cs
- ComponentChangedEvent.cs
- GridViewRowEventArgs.cs
- RequestBringIntoViewEventArgs.cs
- FacetEnabledSchemaElement.cs
- securestring.cs
- ConnectionsZone.cs
- EncoderReplacementFallback.cs
- DataControlLinkButton.cs
- UInt64.cs
- DirtyTextRange.cs
- DateTimeValueSerializerContext.cs
- RoutedUICommand.cs
- Ray3DHitTestResult.cs
- TaiwanCalendar.cs
- CollectionType.cs
- ClientFactory.cs
- NativeMethods.cs
- SaveLedgerEntryRequest.cs
- Frame.cs
- HandlerFactoryWrapper.cs
- PriorityChain.cs
- OutOfMemoryException.cs
- IdentityModelDictionary.cs
- ISAPIWorkerRequest.cs
- DbException.cs
- SqlDataRecord.cs
- HttpBufferlessInputStream.cs
- DesignerCommandSet.cs
- WCFModelStrings.Designer.cs
- NestedContainer.cs
- ObjectRef.cs
- RawAppCommandInputReport.cs
- BasicHttpBinding.cs
- SqlRetyper.cs
- DropSource.cs
- SoapFault.cs
- AssociationType.cs
- AnnotationComponentChooser.cs
- HeaderedContentControl.cs
- TableAutomationPeer.cs
- SmtpDateTime.cs
- Win32PrintDialog.cs
- BinaryMessageFormatter.cs
- SystemFonts.cs