Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / cdf / src / WCF / infocard / common / managed / GlobalAllocSafeHandle.cs / 1305376 / GlobalAllocSafeHandle.cs
//------------------------------------------------------------------------------ // Copyright (c) Microsoft Corporation. All rights reserved. //----------------------------------------------------------------------------- namespace Microsoft.InfoCards { using System; using System.Runtime.InteropServices; using System.Runtime.CompilerServices; using System.Runtime.ConstrainedExecution; using System.Security; using Microsoft.InfoCards.Diagnostics; using IDT=Microsoft.InfoCards.Diagnostics.InfoCardTrace; // // Summary: // Provides a wrapper over memory allocated by GlobalAlloc // guaranteeing that it will be freed during rude thread / appdomain unloads. // Remarks: // There is a small ---- in the usage of this class, as it is used to wrap return parameters // immediatley following the function return. // internal class GlobalAllocSafeHandle : SafeHandle { [SuppressUnmanagedCodeSecurity] [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)] [DllImport("Kernel32.dll", EntryPoint="RtlZeroMemory", SetLastError=false)] public static extern void ZeroMemory( IntPtr dest, Int32 size ); [SuppressUnmanagedCodeSecurity] [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)] [DllImport( "kernel32.dll", CallingConvention = CallingConvention.StdCall )] public static extern IntPtr GlobalFree( IntPtr hMem ); // // How many bytes we currently wrap. This can be zero, as our usage allows for a valid handle // backed by 0 bytes of allocated memory - specificially TransformBlock and TransformFinalBlock // can return this by design. // private int m_bytes; private GlobalAllocSafeHandle() : base( IntPtr.Zero, true ) { m_bytes = 0; } public int Length { set{ m_bytes = value; } get{ return m_bytes; } } public override bool IsInvalid { get { return ( IntPtr.Zero == base.handle ); } } // // Summary: // Clear the data held and release the memory. // protected override bool ReleaseHandle() { if( m_bytes > 0 ) { ZeroMemory( base.handle, m_bytes ); GlobalFree( base.handle ); m_bytes = 0; } return true; } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. //------------------------------------------------------------------------------ // Copyright (c) Microsoft Corporation. All rights reserved. //----------------------------------------------------------------------------- namespace Microsoft.InfoCards { using System; using System.Runtime.InteropServices; using System.Runtime.CompilerServices; using System.Runtime.ConstrainedExecution; using System.Security; using Microsoft.InfoCards.Diagnostics; using IDT=Microsoft.InfoCards.Diagnostics.InfoCardTrace; // // Summary: // Provides a wrapper over memory allocated by GlobalAlloc // guaranteeing that it will be freed during rude thread / appdomain unloads. // Remarks: // There is a small ---- in the usage of this class, as it is used to wrap return parameters // immediatley following the function return. // internal class GlobalAllocSafeHandle : SafeHandle { [SuppressUnmanagedCodeSecurity] [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)] [DllImport("Kernel32.dll", EntryPoint="RtlZeroMemory", SetLastError=false)] public static extern void ZeroMemory( IntPtr dest, Int32 size ); [SuppressUnmanagedCodeSecurity] [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)] [DllImport( "kernel32.dll", CallingConvention = CallingConvention.StdCall )] public static extern IntPtr GlobalFree( IntPtr hMem ); // // How many bytes we currently wrap. This can be zero, as our usage allows for a valid handle // backed by 0 bytes of allocated memory - specificially TransformBlock and TransformFinalBlock // can return this by design. // private int m_bytes; private GlobalAllocSafeHandle() : base( IntPtr.Zero, true ) { m_bytes = 0; } public int Length { set{ m_bytes = value; } get{ return m_bytes; } } public override bool IsInvalid { get { return ( IntPtr.Zero == base.handle ); } } // // Summary: // Clear the data held and release the memory. // protected override bool ReleaseHandle() { if( m_bytes > 0 ) { ZeroMemory( base.handle, m_bytes ); GlobalFree( base.handle ); m_bytes = 0; } return true; } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- View.cs
- XD.cs
- ReverseInheritProperty.cs
- SslSecurityTokenParameters.cs
- FormatterConverter.cs
- Byte.cs
- SqlCaseSimplifier.cs
- RectAnimationUsingKeyFrames.cs
- BitmapFrameEncode.cs
- QueryException.cs
- EdgeModeValidation.cs
- ProviderMetadataCachedInformation.cs
- InertiaTranslationBehavior.cs
- EventLogRecord.cs
- ExpandableObjectConverter.cs
- TraceContext.cs
- Pointer.cs
- Icon.cs
- SqlFlattener.cs
- IgnoreFlushAndCloseStream.cs
- SqlInfoMessageEvent.cs
- DialogResultConverter.cs
- SrgsGrammar.cs
- KoreanCalendar.cs
- AttributeCollection.cs
- WebConfigManager.cs
- Grid.cs
- GridErrorDlg.cs
- LinqDataSourceView.cs
- DrawingVisual.cs
- SqlBooleanizer.cs
- DataGridViewCellStyleContentChangedEventArgs.cs
- TemplateControlBuildProvider.cs
- XmlQueryStaticData.cs
- SecurityTokenTypes.cs
- MatrixValueSerializer.cs
- EntityDataReader.cs
- PolicyLevel.cs
- AlgoModule.cs
- ConstraintCollection.cs
- RuntimeConfigLKG.cs
- SoapElementAttribute.cs
- SqlDataSource.cs
- ToolStrip.cs
- MetabaseServerConfig.cs
- ServicePointManagerElement.cs
- XmlToDatasetMap.cs
- StoryFragments.cs
- TransactionChannelFaultConverter.cs
- InkCanvasSelectionAdorner.cs
- KeyInterop.cs
- MaskInputRejectedEventArgs.cs
- SiteMembershipCondition.cs
- SqlConnectionFactory.cs
- DropDownButton.cs
- CommonObjectSecurity.cs
- DocumentPaginator.cs
- FixedSOMPageConstructor.cs
- MarkupProperty.cs
- WindowsEditBoxRange.cs
- UserMapPath.cs
- SettingsPropertyCollection.cs
- ConnectionAcceptor.cs
- ThreadStaticAttribute.cs
- EntitySetBaseCollection.cs
- TextEditorSelection.cs
- EventLogPermissionEntryCollection.cs
- SafeCertificateContext.cs
- ConfigXmlReader.cs
- XXXOnTypeBuilderInstantiation.cs
- Attributes.cs
- HierarchicalDataBoundControl.cs
- DataException.cs
- _MultipleConnectAsync.cs
- sqlcontext.cs
- SourceSwitch.cs
- CollectionViewGroupInternal.cs
- Calendar.cs
- PixelFormats.cs
- SystemIcons.cs
- SByteConverter.cs
- ReliabilityContractAttribute.cs
- ContentDisposition.cs
- UnsignedPublishLicense.cs
- XmlConverter.cs
- CngAlgorithmGroup.cs
- MediaPlayerState.cs
- GridViewColumnHeaderAutomationPeer.cs
- ObjectReaderCompiler.cs
- FileUpload.cs
- SchemaManager.cs
- SessionPageStateSection.cs
- DoubleAnimationClockResource.cs
- XPathNavigatorReader.cs
- ADConnectionHelper.cs
- behaviorssection.cs
- BindingMAnagerBase.cs
- ObjectAssociationEndMapping.cs
- UpdateCompiler.cs
- XmlSchemaProviderAttribute.cs