Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / whidbey / NetFXspW7 / 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 ---- in the critical finalization of the key // handle and provider handle. This also applies to hash handles, which point to a // CRYPT_HASH_CTX. Those strucutres are defined in COMCryptography.h 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. // // ==--== // // 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 ---- in the critical finalization of the key // handle and provider handle. This also applies to hash handles, which point to a // CRYPT_HASH_CTX. Those strucutres are defined in COMCryptography.h 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.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- TouchesOverProperty.cs
- HostingEnvironment.cs
- HttpRawResponse.cs
- CmsInterop.cs
- DataServiceRequestException.cs
- ProxyHelper.cs
- Formatter.cs
- CodeArgumentReferenceExpression.cs
- Int32Rect.cs
- ClientScriptItemCollection.cs
- ResourceProviderFactory.cs
- SqlCacheDependencyDatabaseCollection.cs
- Decimal.cs
- EpmContentSerializer.cs
- UrlParameterWriter.cs
- TimerEventSubscription.cs
- CompleteWizardStep.cs
- OpenTypeLayout.cs
- VirtualizingPanel.cs
- UserNamePasswordValidator.cs
- BindingUtils.cs
- CollectionsUtil.cs
- NetPeerTcpBindingCollectionElement.cs
- PageContent.cs
- SQLSingle.cs
- TextSearch.cs
- ParentUndoUnit.cs
- GrammarBuilderRuleRef.cs
- PartialToken.cs
- Ray3DHitTestResult.cs
- AsymmetricSecurityProtocol.cs
- XmlSequenceWriter.cs
- RoutedEventValueSerializer.cs
- MethodToken.cs
- XmlCharType.cs
- DataGridViewHeaderCell.cs
- ImageCollectionCodeDomSerializer.cs
- DynamicDataExtensions.cs
- ClientUrlResolverWrapper.cs
- ResponseStream.cs
- LinqDataSourceContextEventArgs.cs
- HtmlInputHidden.cs
- DataSourceHelper.cs
- LinkButton.cs
- PngBitmapDecoder.cs
- KeyValuePairs.cs
- GenericRootAutomationPeer.cs
- OracleException.cs
- TreeWalker.cs
- SamlConstants.cs
- KeyboardEventArgs.cs
- EnumValAlphaComparer.cs
- CompiledXpathExpr.cs
- UnsafePeerToPeerMethods.cs
- XmlSerializerAssemblyAttribute.cs
- XmlAttributeHolder.cs
- CurrencyManager.cs
- RealProxy.cs
- WmlPanelAdapter.cs
- ByteFacetDescriptionElement.cs
- SizeAnimationUsingKeyFrames.cs
- EdmComplexPropertyAttribute.cs
- CodeDomConfigurationHandler.cs
- XmlTextWriter.cs
- Comparer.cs
- SystemFonts.cs
- TraceFilter.cs
- TreeNodeBindingCollection.cs
- ButtonPopupAdapter.cs
- GridViewSelectEventArgs.cs
- SmiEventSink_Default.cs
- BufferedResponseStream.cs
- Vars.cs
- RayHitTestParameters.cs
- HttpApplication.cs
- WindowsAuthenticationEventArgs.cs
- GradientStopCollection.cs
- Line.cs
- WeakReferenceEnumerator.cs
- HttpCachePolicyBase.cs
- DataGridViewRowEventArgs.cs
- KeyConverter.cs
- TextTreeRootNode.cs
- ConstructorBuilder.cs
- ChangesetResponse.cs
- ButtonStandardAdapter.cs
- DrawingGroupDrawingContext.cs
- ConfigurationLocation.cs
- InlineCollection.cs
- Path.cs
- SecureUICommand.cs
- Crypto.cs
- IisNotInstalledException.cs
- Themes.cs
- DataKeyCollection.cs
- MonitoringDescriptionAttribute.cs
- RepeatInfo.cs
- DocumentViewerHelper.cs
- BaseTransportHeaders.cs
- TypeExtensionConverter.cs