Code:
/ FXUpdate3074 / FXUpdate3074 / 1.1 / untmp / whidbey / QFE / ndp / clr / src / BCL / System / Security / Cryptography / SafeCryptoHandles.cs / 1 / SafeCryptoHandles.cs
// ==++== // // Copyright (c) Microsoft Corporation. All rights reserved. // // ==--== // // SafeCryptoHandles.cs // namespace System.Security.Cryptography { using System.Runtime.InteropServices; using System.Runtime.CompilerServices; using System.Runtime.ConstrainedExecution; using Microsoft.Win32.SafeHandles; // Since we need sometimes to delete the key container created in the // context of the CSP, the handle used in this class is actually a pointer // to a CRYPT_PROV_CTX unmanaged structure defined in COMCryptography.h internal sealed class SafeProvHandle : SafeHandleZeroOrMinusOneIsInvalid { // 0 is an Invalid Handle private SafeProvHandle(IntPtr handle) : base (true) { SetHandle(handle); } internal static SafeProvHandle InvalidHandle { get { return new SafeProvHandle(IntPtr.Zero); } } // This method handles the case where pProvCtx == NULL [MethodImplAttribute(MethodImplOptions.InternalCall)] [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)] // The handle here is actually a pointer to a CRYPT_PROV_CTX unmanaged structure private static extern void _FreeCSP(IntPtr pProvCtx); override protected bool ReleaseHandle() { _FreeCSP(handle); return true; } } // Since we need to delete the key handle before the provider is released // we need to actually hold a pointer to a CRYPT_KEY_CTX unmanaged structure // whose destructor decrements a refCount. Only when the provider refCount is 0 // it is deleted. This way, we loose a race in the internal sealed class SafeKeyHandle : SafeHandleZeroOrMinusOneIsInvalid { // 0 is an Invalid Handle private SafeKeyHandle(IntPtr handle) : base (true) { SetHandle(handle); } internal static SafeKeyHandle InvalidHandle { get { return new SafeKeyHandle(IntPtr.Zero); } } [MethodImplAttribute(MethodImplOptions.InternalCall)] [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)] // The handle here is actually a pointer to a CRYPT_KEY_CTX unmanaged structure private static extern void _FreeHKey(IntPtr pKeyCtx); override protected bool ReleaseHandle() { _FreeHKey(handle); return true; } } internal sealed class SafeHashHandle : SafeHandleZeroOrMinusOneIsInvalid { // 0 is an Invalid Handle private SafeHashHandle(IntPtr handle) : base (true) { SetHandle(handle); } internal static SafeHashHandle InvalidHandle { get { return new SafeHashHandle(IntPtr.Zero); } } [MethodImplAttribute(MethodImplOptions.InternalCall)] [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)] // The handle here is actually a pointer to a CRYPT_HASH_CTX unmanaged structure private static extern void _FreeHash(IntPtr pHashCtx); override protected bool ReleaseHandle() { _FreeHash(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
- Vector3D.cs
- DbSetClause.cs
- ServiceInfo.cs
- EDesignUtil.cs
- LOSFormatter.cs
- FtpCachePolicyElement.cs
- SqlLiftIndependentRowExpressions.cs
- ScrollData.cs
- Effect.cs
- Inflater.cs
- Imaging.cs
- ObjectDataSourceEventArgs.cs
- StatusStrip.cs
- EventSourceCreationData.cs
- SamlAuthenticationStatement.cs
- MouseDevice.cs
- ExpressionPrefixAttribute.cs
- XmlConvert.cs
- OleDbInfoMessageEvent.cs
- SQLDecimalStorage.cs
- NativeMethods.cs
- StringSource.cs
- TypeLibConverter.cs
- Invariant.cs
- XmlRawWriter.cs
- Opcode.cs
- SettingsProviderCollection.cs
- IDReferencePropertyAttribute.cs
- TypeElementCollection.cs
- AsynchronousChannel.cs
- DetailsView.cs
- SecurityMessageProperty.cs
- ReadOnlyDataSourceView.cs
- UrlMappingsModule.cs
- ToolStripDropDownDesigner.cs
- Quad.cs
- CryptoStream.cs
- SecurityTokenProviderContainer.cs
- SurrogateDataContract.cs
- XsdValidatingReader.cs
- ExpressionVisitor.cs
- TraceRecord.cs
- CommandConverter.cs
- DesignTimeVisibleAttribute.cs
- EntitySetRetriever.cs
- BasicExpressionVisitor.cs
- SystemEvents.cs
- TemplateManager.cs
- UniqueEventHelper.cs
- UriTemplateVariablePathSegment.cs
- SynchronizationLockException.cs
- VerticalConnector.xaml.cs
- CodeAttributeArgument.cs
- RequestCacheManager.cs
- SqlUDTStorage.cs
- BamlRecords.cs
- Message.cs
- IDReferencePropertyAttribute.cs
- SemaphoreFullException.cs
- StretchValidation.cs
- BuilderPropertyEntry.cs
- XmlAttributes.cs
- XmlIterators.cs
- UnSafeCharBuffer.cs
- ExtensibleClassFactory.cs
- QueryContext.cs
- FigureParaClient.cs
- EntityDescriptor.cs
- COAUTHIDENTITY.cs
- WebSysDefaultValueAttribute.cs
- HttpListener.cs
- DataRowView.cs
- DataGridViewTextBoxCell.cs
- RotateTransform.cs
- FocusTracker.cs
- TimeSpanSecondsOrInfiniteConverter.cs
- ToolStripRenderer.cs
- WebReferencesBuildProvider.cs
- RC2CryptoServiceProvider.cs
- Types.cs
- ColumnCollection.cs
- SafeRightsManagementSessionHandle.cs
- BinaryObjectInfo.cs
- SamlConditions.cs
- XamlStream.cs
- Int64AnimationUsingKeyFrames.cs
- OleDbRowUpdatingEvent.cs
- PersonalizationStateInfoCollection.cs
- ConnectionManagementElement.cs
- DataComponentNameHandler.cs
- FrameworkContextData.cs
- TableItemStyle.cs
- TableLayoutRowStyleCollection.cs
- OrderingQueryOperator.cs
- EventMappingSettingsCollection.cs
- PersonalizationProviderCollection.cs
- MetaType.cs
- Helper.cs
- XmlSchemaAnnotated.cs
- TextDecorations.cs