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
- Queue.cs
- StreamingContext.cs
- DesignColumn.cs
- FreezableCollection.cs
- UnmanagedHandle.cs
- BitmapFrame.cs
- SqlDependencyListener.cs
- webeventbuffer.cs
- HtmlCalendarAdapter.cs
- WindowsScrollBar.cs
- InstanceNormalEvent.cs
- RegexCapture.cs
- UserInitiatedRoutedEventPermissionAttribute.cs
- ControlUtil.cs
- SqlCharStream.cs
- SHA384Managed.cs
- FlowNode.cs
- ProgressBar.cs
- MapPathBasedVirtualPathProvider.cs
- EndpointAddressMessageFilter.cs
- BindingSource.cs
- ToolBar.cs
- PanelStyle.cs
- WebControl.cs
- XmlAttributes.cs
- ProviderUtil.cs
- GroupItemAutomationPeer.cs
- CloseSequenceResponse.cs
- SplitContainerDesigner.cs
- WSHttpBindingElement.cs
- TypeNameConverter.cs
- DropDownButton.cs
- ClientEndpointLoader.cs
- CompareInfo.cs
- ConfigViewGenerator.cs
- LocalizationParserHooks.cs
- SizeChangedInfo.cs
- PropertyEntry.cs
- EndpointDiscoveryMetadata11.cs
- XmlWriterDelegator.cs
- ReaderOutput.cs
- X509UI.cs
- PageThemeCodeDomTreeGenerator.cs
- ReferenceEqualityComparer.cs
- SubpageParaClient.cs
- ResXResourceReader.cs
- SqlServices.cs
- StreamAsIStream.cs
- DataBinder.cs
- HttpContext.cs
- PeerApplication.cs
- PanelContainerDesigner.cs
- errorpatternmatcher.cs
- DetailsViewRowCollection.cs
- QueryConverter.cs
- PartialArray.cs
- IxmlLineInfo.cs
- ReadOnlyAttribute.cs
- DescendentsWalkerBase.cs
- BindUriHelper.cs
- EventLogPermission.cs
- ConfigurationPropertyCollection.cs
- DirectionalLight.cs
- OdbcInfoMessageEvent.cs
- CanonicalXml.cs
- XmlSchemaInfo.cs
- CqlQuery.cs
- BaseCollection.cs
- _SSPISessionCache.cs
- ToolStrip.cs
- DiscoveryClientDuplexChannel.cs
- DocumentViewer.cs
- PageHandlerFactory.cs
- XsdDuration.cs
- DesignRelation.cs
- FontCacheUtil.cs
- Wizard.cs
- ColorConverter.cs
- BulletedListEventArgs.cs
- CodePageUtils.cs
- ListViewItem.cs
- UxThemeWrapper.cs
- SecurityPermission.cs
- StyleXamlTreeBuilder.cs
- XmlWhitespace.cs
- DeadCharTextComposition.cs
- ListView.cs
- ReadOnlyKeyedCollection.cs
- TTSEvent.cs
- SimpleHandlerFactory.cs
- LineVisual.cs
- UInt64Storage.cs
- AudioFormatConverter.cs
- PtsContext.cs
- IssuanceLicense.cs
- Int16AnimationUsingKeyFrames.cs
- OdbcTransaction.cs
- GeometryHitTestParameters.cs
- RegisteredArrayDeclaration.cs
- SmiMetaData.cs