Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / wpf / src / Core / CSharp / System / Windows / Media / SafeMILHandle.cs / 1305600 / SafeMILHandle.cs
//---------------------------------------------------------------------------- // //// Copyright (C) Microsoft Corporation. All rights reserved. // // // // Description: // A safe way to deal with unmanaged MIL interface pointers. //--------------------------------------------------------------------------- using System; using System.Security; using Microsoft.Win32.SafeHandles; using UnsafeNativeMethods = MS.Win32.PresentationCore.UnsafeNativeMethods; namespace System.Windows.Media { internal class SafeMILHandle : SafeHandleZeroOrMinusOneIsInvalid { ////// Use this constructor if the handle isn't ready yet and later /// set the handle with SetHandle. SafeMILHandle owns the release /// of the handle. /// ////// Critical: This derives from a class that has a link demand and inheritance demand /// TreatAsSafe: Ok to call constructor /// [SecurityCritical,SecurityTreatAsSafe] internal SafeMILHandle() : base(true) { } ////// Use this constructor if the handle exists at construction time. /// SafeMILHandle owns the release of the parameter. /// ////// Critical: This derives from a class that has a link demand and inheritance demand /// [SecurityCritical] internal SafeMILHandle(IntPtr handle) : base(true) { SetHandle(handle); } ////// Change our size to the new size specified /// ////// Critical: This code calls into AddMemoryPressure and RemoveMemoryPressure /// both of which have link demands. It is used to keep memory around /// [SecurityCritical] internal void UpdateEstimatedSize(long estimatedSize) { if (_gcPressure != null) { _gcPressure.Release(); } // // estimatedSize may be 0 for small images with fewer than 8 bits per pixel, // attempting to call GC.AddMemoryPressure with a pressure of 0 will cause it to // throw, so don't add memory pressure if estimatedSize is 0. // if (estimatedSize > 0) { _gcPressure = new SafeMILHandleMemoryPressure(estimatedSize); _gcPressure.AddRef(); } } internal void CopyMemoryPressure(SafeMILHandle original) { _gcPressure = original._gcPressure; if (_gcPressure != null) { _gcPressure.AddRef(); } } ////// Critical - calls unmanaged code, not treat as safe because you must /// validate that handle is a valid COM object. /// [SecurityCritical] protected override bool ReleaseHandle() { UnsafeNativeMethods.MILUnknown.ReleaseInterface(ref handle); if (_gcPressure != null) { _gcPressure.Release(); _gcPressure = null; } return true; } // Estimated size of the unmanaged memory private SafeMILHandleMemoryPressure _gcPressure; } } // 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
- ProvidePropertyAttribute.cs
- MetaModel.cs
- CodeAttachEventStatement.cs
- ValueProviderWrapper.cs
- MessageBox.cs
- Int16KeyFrameCollection.cs
- glyphs.cs
- ReturnValue.cs
- CompoundFileReference.cs
- ConstraintEnumerator.cs
- SynchronizationLockException.cs
- XsltArgumentList.cs
- DataGridViewCellEventArgs.cs
- OperationCanceledException.cs
- DrawingContextDrawingContextWalker.cs
- WebDisplayNameAttribute.cs
- _WinHttpWebProxyDataBuilder.cs
- GridProviderWrapper.cs
- DateTimeOffsetStorage.cs
- UnsafeNativeMethods.cs
- DataGridViewRowStateChangedEventArgs.cs
- PropertyGeneratedEventArgs.cs
- OracleCommandSet.cs
- DataTable.cs
- SafeCryptoHandles.cs
- XmlEncoding.cs
- CellTreeNodeVisitors.cs
- SeverityFilter.cs
- ClientCultureInfo.cs
- EntityClassGenerator.cs
- DataMemberFieldConverter.cs
- CanExecuteRoutedEventArgs.cs
- Debug.cs
- ToolStripStatusLabel.cs
- TableLayoutColumnStyleCollection.cs
- SoapMessage.cs
- BindingMAnagerBase.cs
- FixedTextBuilder.cs
- HwndProxyElementProvider.cs
- ResourceBinder.cs
- _IPv4Address.cs
- WebPartActionVerb.cs
- HtmlTableCell.cs
- Query.cs
- SoapSchemaExporter.cs
- DecimalConstantAttribute.cs
- pingexception.cs
- ViewStateModeByIdAttribute.cs
- ResolvedKeyFrameEntry.cs
- Window.cs
- RowBinding.cs
- ControlAdapter.cs
- ArglessEventHandlerProxy.cs
- ListManagerBindingsCollection.cs
- ServiceNotStartedException.cs
- Normalization.cs
- StaticResourceExtension.cs
- BaseDataBoundControl.cs
- SamlSerializer.cs
- HttpModulesSection.cs
- SqlParameterCollection.cs
- SafeNativeMethods.cs
- NumberAction.cs
- SelfIssuedAuthRSAPKCS1SignatureDeformatter.cs
- ItemCollectionEditor.cs
- SqlBulkCopy.cs
- Int64Converter.cs
- RuleInfoComparer.cs
- ImportContext.cs
- TranslateTransform.cs
- WpfKnownMember.cs
- WebBrowserProgressChangedEventHandler.cs
- Domain.cs
- RegexFCD.cs
- PolyLineSegmentFigureLogic.cs
- EntityViewGenerationConstants.cs
- MetadataReference.cs
- HttpContextServiceHost.cs
- ColorConvertedBitmapExtension.cs
- DecoderNLS.cs
- MetadataUtilsSmi.cs
- ExpandSegment.cs
- x509store.cs
- WindowsListViewScroll.cs
- TriggerAction.cs
- RtfToXamlReader.cs
- PageClientProxyGenerator.cs
- ObjectStateEntry.cs
- DataGridViewToolTip.cs
- IdentityReference.cs
- ConfigurationStrings.cs
- ToolStripItemCollection.cs
- SqlConnection.cs
- UniqueConstraint.cs
- ExpressionBindings.cs
- EnumType.cs
- SqlDuplicator.cs
- BufferAllocator.cs
- Win32.cs
- ReadOnlyDictionary.cs