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
- HierarchicalDataBoundControl.cs
- CompilerParameters.cs
- PageBuildProvider.cs
- TextEndOfSegment.cs
- ElementFactory.cs
- PageSettings.cs
- PageFunction.cs
- CreateInstanceBinder.cs
- BitFlagsGenerator.cs
- BulletDecorator.cs
- EntityDataSourceQueryBuilder.cs
- TypefaceMetricsCache.cs
- CommonDialog.cs
- StorageFunctionMapping.cs
- MethodCallExpression.cs
- XmlCompatibilityReader.cs
- NameNode.cs
- CommandConverter.cs
- XmlDeclaration.cs
- SoapExtensionTypeElement.cs
- UDPClient.cs
- EntityDataSourceValidationException.cs
- TreeWalker.cs
- StylusPointProperty.cs
- InvariantComparer.cs
- ControlValuePropertyAttribute.cs
- AsyncStreamReader.cs
- IgnoreFlushAndCloseStream.cs
- GlobalAllocSafeHandle.cs
- VisualTarget.cs
- HttpConfigurationContext.cs
- InteropDesigner.xaml.cs
- GridViewItemAutomationPeer.cs
- METAHEADER.cs
- DeclarativeCatalogPartDesigner.cs
- _ListenerResponseStream.cs
- SemanticAnalyzer.cs
- XmlExtensionFunction.cs
- ListViewTableCell.cs
- ListCollectionView.cs
- MemberAssignment.cs
- MemberAccessException.cs
- PropertyFilterAttribute.cs
- PropertyMapper.cs
- DataSourceSelectArguments.cs
- ToolZone.cs
- DataGridViewColumnEventArgs.cs
- BamlResourceDeserializer.cs
- Descriptor.cs
- CommandField.cs
- CalendarDayButton.cs
- XmlAttributeAttribute.cs
- URI.cs
- DetailsViewPageEventArgs.cs
- Cursor.cs
- TextDecorations.cs
- CodePageEncoding.cs
- sqlcontext.cs
- ComponentRenameEvent.cs
- HtmlInputHidden.cs
- EntityDataSourceEntityTypeFilterItem.cs
- XmlText.cs
- DesignerTransactionCloseEvent.cs
- HiddenField.cs
- RoutedEventArgs.cs
- DynamicPhysicalDiscoSearcher.cs
- TableSectionStyle.cs
- ArraySegment.cs
- ExternalException.cs
- ExpressionBuilder.cs
- WSHttpBindingElement.cs
- X509SubjectKeyIdentifierClause.cs
- XmlSchemaSimpleTypeUnion.cs
- CompilerGeneratedAttribute.cs
- InstanceValue.cs
- DbConnectionFactory.cs
- PointHitTestParameters.cs
- RegexGroup.cs
- Image.cs
- Literal.cs
- HttpDigestClientElement.cs
- DataSourceBooleanViewSchemaConverter.cs
- TraceListeners.cs
- Evidence.cs
- PartitionResolver.cs
- SmtpNegotiateAuthenticationModule.cs
- PropertyEmitter.cs
- Label.cs
- DataGridViewButtonCell.cs
- CodeIdentifier.cs
- CubicEase.cs
- ping.cs
- WebHostScriptMappingsInstallComponent.cs
- BrowserTree.cs
- LinqDataSourceDisposeEventArgs.cs
- SmiConnection.cs
- SingleConverter.cs
- SqlComparer.cs
- Boolean.cs
- UrlAuthFailureHandler.cs