Code:
/ WCF / WCF / 3.5.30729.1 / untmp / Orcas / SP / ndp / cdf / src / WCF / infocard / common / managed / HGlobalSafeHandle.cs / 1 / HGlobalSafeHandle.cs
//------------------------------------------------------------------------------ // Copyright (c) Microsoft Corporation. All rights reserved. //----------------------------------------------------------------------------- namespace Microsoft.InfoCards { using System; using System.Runtime.InteropServices; using Microsoft.InfoCards.Diagnostics; using System.Runtime.CompilerServices; using System.Runtime.ConstrainedExecution; using System.Security; using IDT=Microsoft.InfoCards.Diagnostics.InfoCardTrace; // // Summary: // Provides a wrapper over HGlobal alloc'd memory guaranteeing that the // contents will be released in the presence of rude app domain and thread aborts. // internal class HGlobalSafeHandle : SafeHandle { public static HGlobalSafeHandle Construct() { return new HGlobalSafeHandle(); } public static HGlobalSafeHandle Construct( string managedString ) { IDT.DebugAssert( !String.IsNullOrEmpty( managedString) , "null string" ); int bytes = (managedString.Length + 1) * 2; return new HGlobalSafeHandle( Marshal.StringToHGlobalUni( managedString ), bytes ); } public static HGlobalSafeHandle Construct( int bytes ) { IDT.DebugAssert( bytes > 0, "attempt to allocate a handle with <= 0 bytes" ); return new HGlobalSafeHandle( Marshal.AllocHGlobal( bytes ), bytes ); } [SuppressUnmanagedCodeSecurity] [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)] [DllImport("Kernel32.dll", EntryPoint="RtlZeroMemory", SetLastError=false)] public static extern void ZeroMemory( IntPtr dest, Int32 size ); // // The number of bytes allocated. // private int m_bytes; [ReliabilityContract( Consistency.WillNotCorruptState, Cer.Success ) ] private HGlobalSafeHandle( IntPtr toManage, int length ) : base( IntPtr.Zero, true ) { m_bytes = length; SetHandle( toManage ); } private HGlobalSafeHandle() : base( IntPtr.Zero, true ) {} public override bool IsInvalid { get { return ( IntPtr.Zero == base.handle ); } } // // Summary: // Zero the string contents and release the handle // protected override bool ReleaseHandle() { IDT.DebugAssert( !IsInvalid, "handle is invalid in release handle" ); IDT.DebugAssert( 0 != m_bytes, "invalid size" ); ZeroMemory( base.handle, m_bytes ); Marshal.FreeHGlobal( base.handle ); return true; } } } // 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
- DataBindingCollectionConverter.cs
- SessionParameter.cs
- StringFunctions.cs
- WebPermission.cs
- GatewayDefinition.cs
- DataBinder.cs
- DataGridViewCellStyleConverter.cs
- StreamInfo.cs
- CellNormalizer.cs
- ProjectionPathSegment.cs
- HWStack.cs
- ResourceExpression.cs
- FileInfo.cs
- TableCell.cs
- DispatcherSynchronizationContext.cs
- ScaleTransform3D.cs
- TextViewBase.cs
- dataprotectionpermissionattribute.cs
- ToolBarButtonClickEvent.cs
- AssertFilter.cs
- DbExpressionBuilder.cs
- DefaultClaimSet.cs
- VectorAnimationUsingKeyFrames.cs
- COM2EnumConverter.cs
- WebColorConverter.cs
- AsyncPostBackTrigger.cs
- ModifierKeysConverter.cs
- RayMeshGeometry3DHitTestResult.cs
- ILGen.cs
- AlphabeticalEnumConverter.cs
- DropShadowBitmapEffect.cs
- DataObjectCopyingEventArgs.cs
- UrlMappingsSection.cs
- MouseOverProperty.cs
- MenuItemStyleCollection.cs
- SerialReceived.cs
- CheckPair.cs
- SafePointer.cs
- TaskForm.cs
- TypeUnloadedException.cs
- XmlSchemas.cs
- wgx_exports.cs
- PointAnimationBase.cs
- ConfigPathUtility.cs
- Utils.cs
- ServicePerformanceCounters.cs
- TextParentUndoUnit.cs
- PeerApplicationLaunchInfo.cs
- DocumentPage.cs
- DelegateTypeInfo.cs
- MorphHelper.cs
- InstanceOwnerQueryResult.cs
- PropertyContainer.cs
- Attributes.cs
- SyndicationSerializer.cs
- CodeBlockBuilder.cs
- ContainerParaClient.cs
- CurrencyManager.cs
- SemaphoreSecurity.cs
- DataGridViewRowHeightInfoPushedEventArgs.cs
- QuaternionAnimationBase.cs
- SizeFConverter.cs
- WebPartConnectionsConfigureVerb.cs
- XNameTypeConverter.cs
- ThicknessAnimationBase.cs
- GeneralTransform3DGroup.cs
- TextDocumentView.cs
- ManifestResourceInfo.cs
- ReadingWritingEntityEventArgs.cs
- Transform.cs
- PropertyIdentifier.cs
- GeometryDrawing.cs
- VersionedStreamOwner.cs
- WebPartManager.cs
- UTF7Encoding.cs
- InternalRelationshipCollection.cs
- TagPrefixAttribute.cs
- AddIn.cs
- Mouse.cs
- ToolStripDropTargetManager.cs
- PersonalizationEntry.cs
- CompilerErrorCollection.cs
- InternalDuplexBindingElement.cs
- ServiceInstallComponent.cs
- AutomationPropertyInfo.cs
- XsltArgumentList.cs
- Attributes.cs
- Queue.cs
- PinnedBufferMemoryStream.cs
- DbMetaDataCollectionNames.cs
- ConditionalAttribute.cs
- ipaddressinformationcollection.cs
- _ConnectOverlappedAsyncResult.cs
- MetabaseServerConfig.cs
- SpeechAudioFormatInfo.cs
- UrlMappingCollection.cs
- Accessible.cs
- XmlSchemaSubstitutionGroup.cs
- UniqueEventHelper.cs
- TemplateEditingVerb.cs