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
- _Connection.cs
- PanelDesigner.cs
- MonthCalendar.cs
- Perspective.cs
- _AutoWebProxyScriptWrapper.cs
- ComPersistableTypeElement.cs
- WorkflowServiceHostFactory.cs
- BlockUIContainer.cs
- TimeSpanSecondsConverter.cs
- ListViewItem.cs
- XmlSchemaValidator.cs
- ServiceDescriptionSerializer.cs
- ResXResourceWriter.cs
- TagNameToTypeMapper.cs
- Select.cs
- SelectManyQueryOperator.cs
- ChildDocumentBlock.cs
- VoiceInfo.cs
- BlobPersonalizationState.cs
- OperationAbortedException.cs
- DataGridCommandEventArgs.cs
- DockingAttribute.cs
- GenericEnumerator.cs
- MenuEventArgs.cs
- DesignerSerializationVisibilityAttribute.cs
- DictionaryItemsCollection.cs
- CustomTypeDescriptor.cs
- FactoryGenerator.cs
- XmlFormatExtensionPointAttribute.cs
- PenThreadWorker.cs
- WSHttpBindingElement.cs
- CheckBoxBaseAdapter.cs
- EpmSourceTree.cs
- ProvideValueServiceProvider.cs
- IconBitmapDecoder.cs
- HyperLink.cs
- EntityDesignerDataSourceView.cs
- BinaryObjectWriter.cs
- CustomErrorsSection.cs
- UndirectedGraph.cs
- ipaddressinformationcollection.cs
- DataTable.cs
- AdornerHitTestResult.cs
- SourceFileInfo.cs
- NullableDoubleAverageAggregationOperator.cs
- XpsLiterals.cs
- ExecutionTracker.cs
- WebDisplayNameAttribute.cs
- ProcessStartInfo.cs
- mansign.cs
- WebUtil.cs
- ExceptionUtil.cs
- PropertyChangedEventManager.cs
- CategoryValueConverter.cs
- CellConstantDomain.cs
- LinqDataSourceInsertEventArgs.cs
- RotateTransform3D.cs
- XmlEncodedRawTextWriter.cs
- Accessible.cs
- HyperLink.cs
- Bitmap.cs
- XsdDataContractExporter.cs
- RangeValuePatternIdentifiers.cs
- DllNotFoundException.cs
- ControlPaint.cs
- HostedTransportConfigurationBase.cs
- TcpConnectionPool.cs
- BitmapEffectDrawingContent.cs
- SqlMetaData.cs
- GuidelineCollection.cs
- WebPartPersonalization.cs
- AttributeAction.cs
- ToolTipService.cs
- SoapFormatExtensions.cs
- IODescriptionAttribute.cs
- FormViewModeEventArgs.cs
- KeyEvent.cs
- LocalValueEnumerator.cs
- StringCollectionEditor.cs
- DataGridItem.cs
- FileRecordSequence.cs
- XsltLoader.cs
- TagPrefixCollection.cs
- Panel.cs
- AnonymousIdentificationModule.cs
- EventMappingSettingsCollection.cs
- MenuItemCollection.cs
- DocumentReferenceCollection.cs
- ProtocolsConfiguration.cs
- PostBackOptions.cs
- TypeBuilder.cs
- TextEditorSelection.cs
- FileRecordSequence.cs
- AssociativeAggregationOperator.cs
- IncrementalReadDecoders.cs
- GPPOINTF.cs
- HttpTransportSecurity.cs
- QilStrConcat.cs
- CriticalExceptions.cs
- CodeCommentStatement.cs