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
- HttpProfileGroupBase.cs
- OdbcReferenceCollection.cs
- EntityDescriptor.cs
- XmlIlGenerator.cs
- ActivityExecutionFilter.cs
- SerializationObjectManager.cs
- ForeignConstraint.cs
- FixedSOMElement.cs
- AttributeCallbackBuilder.cs
- MethodExpr.cs
- LineGeometry.cs
- HandlerBase.cs
- ProjectionPathBuilder.cs
- TrackingAnnotationCollection.cs
- ClientRolePrincipal.cs
- login.cs
- ImageDrawing.cs
- EndpointDiscoveryMetadata.cs
- IdentityHolder.cs
- BypassElement.cs
- InvalidOperationException.cs
- ProviderConnectionPoint.cs
- DataFormats.cs
- SecurityDocument.cs
- JapaneseCalendar.cs
- ListItemConverter.cs
- RepeatBehaviorConverter.cs
- hebrewshape.cs
- ByteRangeDownloader.cs
- ImageCodecInfoPrivate.cs
- _NegotiateClient.cs
- ISSmlParser.cs
- RouteParametersHelper.cs
- CrossSiteScriptingValidation.cs
- DataBinding.cs
- MouseOverProperty.cs
- XhtmlTextWriter.cs
- MachineKey.cs
- ResourceCategoryAttribute.cs
- FrameworkElementFactory.cs
- DateTimeUtil.cs
- Control.cs
- CodeMethodInvokeExpression.cs
- MappingItemCollection.cs
- CacheDependency.cs
- PhysicalOps.cs
- VirtualPathUtility.cs
- RowToFieldTransformer.cs
- EntityClassGenerator.cs
- InputScope.cs
- TraceLog.cs
- AnimationClock.cs
- DisplayNameAttribute.cs
- SqlException.cs
- Pen.cs
- HtmlMeta.cs
- SoapInteropTypes.cs
- TypePresenter.xaml.cs
- SynchronizedInputProviderWrapper.cs
- ControlPropertyNameConverter.cs
- Constants.cs
- AttributeData.cs
- ListViewCommandEventArgs.cs
- GridViewUpdateEventArgs.cs
- ExistsInCollection.cs
- TextEditorMouse.cs
- XhtmlBasicFormAdapter.cs
- QuaternionValueSerializer.cs
- KeyEventArgs.cs
- GregorianCalendarHelper.cs
- ProcessInputEventArgs.cs
- ReferencedCollectionType.cs
- WebServiceClientProxyGenerator.cs
- ValueUtilsSmi.cs
- MultiBinding.cs
- ThreadStaticAttribute.cs
- ImageCodecInfo.cs
- nulltextnavigator.cs
- FormsAuthenticationUserCollection.cs
- _CacheStreams.cs
- PartialList.cs
- CodeIdentifier.cs
- SwitchCase.cs
- CompositeCollectionView.cs
- AsyncOperationContext.cs
- EncodingNLS.cs
- ControlEvent.cs
- SiteMapNodeItem.cs
- ProfessionalColorTable.cs
- AppSettings.cs
- TypeElement.cs
- CreateParams.cs
- ToolStripItemCollection.cs
- UrlMappingsSection.cs
- TextInfo.cs
- MetroSerializationManager.cs
- RootBrowserWindow.cs
- initElementDictionary.cs
- SudsParser.cs
- VectorConverter.cs