Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / whidbey / netfxsp / 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
- OracleConnectionString.cs
- HtmlTableRowCollection.cs
- ActivityDesignerAccessibleObject.cs
- CustomCredentialPolicy.cs
- CreateUserErrorEventArgs.cs
- FormViewRow.cs
- ExpressionDumper.cs
- IpcClientManager.cs
- Durable.cs
- NameValueSectionHandler.cs
- SyndicationElementExtension.cs
- BaseDataBoundControl.cs
- DiagnosticTrace.cs
- ObjectContext.cs
- ObjectListDesigner.cs
- MetadataWorkspace.cs
- SchemaInfo.cs
- DisposableCollectionWrapper.cs
- CacheOutputQuery.cs
- DataGridLinkButton.cs
- ExpandSegment.cs
- JpegBitmapDecoder.cs
- TreeNodeBindingCollection.cs
- CodeDOMProvider.cs
- AssemblyBuilderData.cs
- EnglishPluralizationService.cs
- PersistenceTypeAttribute.cs
- CaretElement.cs
- CreateUserWizardStep.cs
- ProjectionCamera.cs
- RawUIStateInputReport.cs
- RegisteredHiddenField.cs
- SafePEFileHandle.cs
- GlyphInfoList.cs
- QuotedPrintableStream.cs
- XmlLangPropertyAttribute.cs
- DesignerVerb.cs
- RuntimeCompatibilityAttribute.cs
- TableLayoutPanel.cs
- ViewStateException.cs
- indexingfiltermarshaler.cs
- ClientSettings.cs
- ComplusEndpointConfigContainer.cs
- ReferenceConverter.cs
- DynamicDocumentPaginator.cs
- SoapCommonClasses.cs
- PointValueSerializer.cs
- HttpCapabilitiesSectionHandler.cs
- Registry.cs
- HostingPreferredMapPath.cs
- TemplatePropertyEntry.cs
- DecimalMinMaxAggregationOperator.cs
- GreenMethods.cs
- ReceiveParametersContent.cs
- ArgIterator.cs
- XomlSerializationHelpers.cs
- RefreshPropertiesAttribute.cs
- XmlSchemaAny.cs
- DeviceContexts.cs
- CurrentChangedEventManager.cs
- InfiniteIntConverter.cs
- EventLogRecord.cs
- ConfigXmlWhitespace.cs
- RangeBase.cs
- BindingNavigator.cs
- DnsPermission.cs
- DialogWindow.cs
- InvalidFilterCriteriaException.cs
- CompositeFontFamily.cs
- Blend.cs
- EditorAttribute.cs
- AlignmentYValidation.cs
- Border.cs
- SignedInfo.cs
- SwitchElementsCollection.cs
- HttpApplicationFactory.cs
- Maps.cs
- XmlLoader.cs
- GlyphCollection.cs
- MasterPage.cs
- PersistenceProviderFactory.cs
- ConfigurationException.cs
- VerificationAttribute.cs
- DataGridViewRowHeightInfoNeededEventArgs.cs
- TemplateComponentConnector.cs
- HitTestParameters.cs
- DocumentViewerConstants.cs
- ErrorHandlingReceiver.cs
- PathSegmentCollection.cs
- Message.cs
- CommittableTransaction.cs
- MetadataItem_Static.cs
- SplashScreen.cs
- LongValidatorAttribute.cs
- SelectionEditingBehavior.cs
- AlternateViewCollection.cs
- ChangeProcessor.cs
- XamlTreeBuilder.cs
- ToolStripRenderEventArgs.cs
- BamlTreeUpdater.cs