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
- XmlObjectSerializerWriteContext.cs
- LayoutTableCell.cs
- Vector3D.cs
- HttpModuleAction.cs
- WindowsListViewItemCheckBox.cs
- DetailsViewPageEventArgs.cs
- Style.cs
- OverrideMode.cs
- SR.cs
- DataFormat.cs
- Vector3DKeyFrameCollection.cs
- ISessionStateStore.cs
- DesignColumn.cs
- HttpHandlersSection.cs
- SspiWrapper.cs
- ContentPlaceHolder.cs
- RegexMatch.cs
- RoleManagerSection.cs
- storepermissionattribute.cs
- MasterPageCodeDomTreeGenerator.cs
- XmlSchemas.cs
- Merger.cs
- TailCallAnalyzer.cs
- HiddenField.cs
- GenericUI.cs
- MatrixTransform.cs
- ObjectItemCachedAssemblyLoader.cs
- InternalBufferOverflowException.cs
- HealthMonitoringSectionHelper.cs
- BitmapEffect.cs
- CqlLexer.cs
- AdPostCacheSubstitution.cs
- FusionWrap.cs
- XmlSchemaExternal.cs
- ZipIOEndOfCentralDirectoryBlock.cs
- TextProviderWrapper.cs
- RadioButton.cs
- ReadOnlyCollection.cs
- PreservationFileWriter.cs
- DataSourceViewSchemaConverter.cs
- SymmetricAlgorithm.cs
- ActivityContext.cs
- TTSEvent.cs
- XmlUtil.cs
- TdsEnums.cs
- ProfileGroupSettings.cs
- StubHelpers.cs
- GridViewCancelEditEventArgs.cs
- xmlformatgeneratorstatics.cs
- EngineSite.cs
- IISUnsafeMethods.cs
- Assert.cs
- ZipIOExtraFieldElement.cs
- Literal.cs
- ClientSettingsProvider.cs
- DbConnectionPoolOptions.cs
- CustomLineCap.cs
- PropertyCondition.cs
- FastEncoderWindow.cs
- AutomationPatternInfo.cs
- ErrorFormatter.cs
- RegularExpressionValidator.cs
- SiteMapSection.cs
- CodeArgumentReferenceExpression.cs
- DbModificationClause.cs
- ServiceMetadataBehavior.cs
- InvokePatternIdentifiers.cs
- SafeNativeMethodsCLR.cs
- SafeFileMapViewHandle.cs
- SHA256.cs
- _RegBlobWebProxyDataBuilder.cs
- ClusterSafeNativeMethods.cs
- ParseChildrenAsPropertiesAttribute.cs
- DataGridViewButtonColumn.cs
- ComponentResourceKeyConverter.cs
- ResourceManagerWrapper.cs
- ClientApiGenerator.cs
- NameTable.cs
- ToolboxDataAttribute.cs
- SocketElement.cs
- VisualCollection.cs
- AtomicFile.cs
- DataExpression.cs
- ReadOnlyTernaryTree.cs
- NullRuntimeConfig.cs
- OneToOneMappingSerializer.cs
- MobileControlPersister.cs
- DataGridCell.cs
- CuspData.cs
- WCFServiceClientProxyGenerator.cs
- SectionRecord.cs
- ViewKeyConstraint.cs
- SharedPerformanceCounter.cs
- _SingleItemRequestCache.cs
- StyleSelector.cs
- ListControlDesigner.cs
- CriticalHandle.cs
- TranslateTransform3D.cs
- Underline.cs
- TargetInvocationException.cs