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
- ChannelAcceptor.cs
- Optimizer.cs
- ToolStripItem.cs
- Utils.cs
- ExtensionWindowHeader.cs
- LineMetrics.cs
- ControlBuilderAttribute.cs
- RadioButtonFlatAdapter.cs
- TimeZone.cs
- WSSecurityPolicy12.cs
- XmlSiteMapProvider.cs
- FlowDocumentPage.cs
- XPathException.cs
- CompilerWrapper.cs
- AndCondition.cs
- DataGridViewElement.cs
- BinaryFormatter.cs
- Cell.cs
- FormViewInsertEventArgs.cs
- ConfigurationSectionCollection.cs
- ReservationNotFoundException.cs
- ParentUndoUnit.cs
- ApplicationSecurityInfo.cs
- CompiledQueryCacheEntry.cs
- StorageAssociationSetMapping.cs
- FactoryMaker.cs
- XmlNotation.cs
- SystemUdpStatistics.cs
- SqlInfoMessageEvent.cs
- MessagePropertyVariants.cs
- ToolStripItem.cs
- StorageRoot.cs
- Point3DConverter.cs
- ManagementObjectCollection.cs
- WorkflowControlClient.cs
- DATA_BLOB.cs
- Control.cs
- DataGridTextColumn.cs
- VarRefManager.cs
- QuaternionAnimation.cs
- TextServicesPropertyRanges.cs
- ResourceAttributes.cs
- ResourceKey.cs
- WebPartTransformerCollection.cs
- LayoutSettings.cs
- CheckBoxField.cs
- ToolStripContentPanel.cs
- OleDbConnection.cs
- SeekStoryboard.cs
- MessageDecoder.cs
- Utils.cs
- ZoneLinkButton.cs
- ChannelBinding.cs
- OracleParameter.cs
- TextStore.cs
- MouseButton.cs
- OSFeature.cs
- HwndAppCommandInputProvider.cs
- DecoderNLS.cs
- DriveNotFoundException.cs
- StrongNamePublicKeyBlob.cs
- SecurityAccessDeniedException.cs
- _SslSessionsCache.cs
- QueryResponse.cs
- DataMisalignedException.cs
- BooleanAnimationUsingKeyFrames.cs
- ClientRequest.cs
- mediaeventshelper.cs
- CompilerResults.cs
- graph.cs
- UntypedNullExpression.cs
- AppDomainUnloadedException.cs
- NumericUpDownAcceleration.cs
- XamlVector3DCollectionSerializer.cs
- DiscoveryEndpointElement.cs
- WaitHandleCannotBeOpenedException.cs
- regiisutil.cs
- DirectoryNotFoundException.cs
- JournalEntryListConverter.cs
- WsdlHelpGeneratorElement.cs
- WorkflowServiceNamespace.cs
- CompoundFileIOPermission.cs
- TypePropertyEditor.cs
- ProcessHostMapPath.cs
- ApplicationActivator.cs
- NavigationProperty.cs
- RuleSetCollection.cs
- TraceInternal.cs
- SourceLocation.cs
- FormsAuthenticationTicket.cs
- Int32KeyFrameCollection.cs
- TdsParameterSetter.cs
- DataGridViewSelectedRowCollection.cs
- _HeaderInfoTable.cs
- CompoundFileIOPermission.cs
- TaskFileService.cs
- XmlMtomReader.cs
- ListViewContainer.cs
- CustomTypeDescriptor.cs
- CreateParams.cs