Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / whidbey / NetFxQFE / 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
- embossbitmapeffect.cs
- TempFiles.cs
- ResourcesGenerator.cs
- ThreadNeutralSemaphore.cs
- DataFormats.cs
- precedingsibling.cs
- KeyValueConfigurationElement.cs
- HasCopySemanticsAttribute.cs
- HostingPreferredMapPath.cs
- SinglePhaseEnlistment.cs
- DBSqlParserTable.cs
- XmlnsDefinitionAttribute.cs
- MeshGeometry3D.cs
- TreeViewCancelEvent.cs
- AbsoluteQuery.cs
- NameTable.cs
- DataRowChangeEvent.cs
- QuaternionAnimationUsingKeyFrames.cs
- SpellCheck.cs
- AppManager.cs
- ActiveXHelper.cs
- EmptyStringExpandableObjectConverter.cs
- WebPartsPersonalizationAuthorization.cs
- ExpressionHelper.cs
- SubstitutionDesigner.cs
- ResourcePart.cs
- coordinatorscratchpad.cs
- NetworkStream.cs
- SpinLock.cs
- ForEachAction.cs
- XsltQilFactory.cs
- SqlConnectionManager.cs
- TaiwanLunisolarCalendar.cs
- ContainerCodeDomSerializer.cs
- DataProviderNameConverter.cs
- NavigationHelper.cs
- CategoryNameCollection.cs
- Queue.cs
- SqlDeflator.cs
- ExclusiveHandle.cs
- SafeSecurityHelper.cs
- CapabilitiesSection.cs
- ResourceProviderFactory.cs
- KoreanLunisolarCalendar.cs
- AutomationPatternInfo.cs
- PanelStyle.cs
- ProviderException.cs
- EntityProviderFactory.cs
- DataGridCell.cs
- WindowsListViewSubItem.cs
- XPathNavigatorReader.cs
- HtmlLiteralTextAdapter.cs
- Trace.cs
- DocumentOrderQuery.cs
- DatePickerDateValidationErrorEventArgs.cs
- QuaternionConverter.cs
- MethodBuilder.cs
- ScriptResourceHandler.cs
- StatusBarPanel.cs
- Empty.cs
- RayMeshGeometry3DHitTestResult.cs
- ExpressionTable.cs
- WebBrowsableAttribute.cs
- SafeLibraryHandle.cs
- ActionFrame.cs
- CodeNamespace.cs
- TextCompositionManager.cs
- ParameterModifier.cs
- HebrewCalendar.cs
- Size.cs
- GeneralTransformGroup.cs
- SpecularMaterial.cs
- Utils.cs
- DefaultProxySection.cs
- ArcSegment.cs
- TextTreeObjectNode.cs
- KnownTypeAttribute.cs
- Fonts.cs
- ToolboxItem.cs
- ToolStripTemplateNode.cs
- IPAddressCollection.cs
- DrawListViewColumnHeaderEventArgs.cs
- ColorConverter.cs
- Maps.cs
- dataobject.cs
- Normalization.cs
- FixedBufferAttribute.cs
- ConstraintConverter.cs
- _NestedMultipleAsyncResult.cs
- CmsUtils.cs
- ModifierKeysValueSerializer.cs
- TablePattern.cs
- ItemCheckEvent.cs
- ActivityPreviewDesigner.cs
- PeerResolverSettings.cs
- SqlBuffer.cs
- SerializationFieldInfo.cs
- XmlILOptimizerVisitor.cs
- ComponentResourceKey.cs
- FrameAutomationPeer.cs