Code:
/ DotNET / DotNET / 8.0 / untmp / whidbey / REDBITS / 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 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; } } }
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- XsltException.cs
- WindowPattern.cs
- CLSCompliantAttribute.cs
- RIPEMD160.cs
- TreeViewImageKeyConverter.cs
- DoubleLinkList.cs
- MethodSet.cs
- NullableConverter.cs
- ListDictionary.cs
- TaskCanceledException.cs
- ValueSerializer.cs
- DelayedRegex.cs
- ClientData.cs
- FixedNode.cs
- TypedTableBase.cs
- Attributes.cs
- SrgsElementFactory.cs
- DatatypeImplementation.cs
- EDesignUtil.cs
- ComboBoxItem.cs
- PersonalizationProvider.cs
- Thread.cs
- COM2FontConverter.cs
- HttpStreamFormatter.cs
- ObjectSecurityT.cs
- SiteMapDataSource.cs
- EntityDataSourceChangingEventArgs.cs
- XmlStringTable.cs
- ModelItemExtensions.cs
- MatrixConverter.cs
- Int32AnimationBase.cs
- LinkAreaEditor.cs
- ContainsRowNumberChecker.cs
- BitVector32.cs
- HttpCapabilitiesSectionHandler.cs
- SizeAnimation.cs
- PageAsyncTask.cs
- DataGridViewRowContextMenuStripNeededEventArgs.cs
- DataGridViewColumnEventArgs.cs
- WrappedIUnknown.cs
- PageParser.cs
- XmlNodeReader.cs
- InternalsVisibleToAttribute.cs
- ParserStreamGeometryContext.cs
- CryptoApi.cs
- OracleCommandSet.cs
- SiteMembershipCondition.cs
- IDispatchConstantAttribute.cs
- DataServiceOperationContext.cs
- UICuesEvent.cs
- ViewCellSlot.cs
- WsatServiceCertificate.cs
- WebPartUtil.cs
- DataGridViewColumnDividerDoubleClickEventArgs.cs
- PersonalizablePropertyEntry.cs
- OleDbReferenceCollection.cs
- ModulesEntry.cs
- ListViewItemEventArgs.cs
- StorageAssociationTypeMapping.cs
- DateTimeOffset.cs
- IntranetCredentialPolicy.cs
- NoResizeHandleGlyph.cs
- ListViewAutomationPeer.cs
- ImageSource.cs
- FilterElement.cs
- Highlights.cs
- Registry.cs
- EntityDesignerDataSourceView.cs
- ActivityPropertyReference.cs
- TreeNodeEventArgs.cs
- ThrowHelper.cs
- Set.cs
- ReflectionServiceProvider.cs
- XMLUtil.cs
- FontNamesConverter.cs
- X509RecipientCertificateServiceElement.cs
- controlskin.cs
- DefaultPrintController.cs
- ConfigurationSchemaErrors.cs
- FamilyMap.cs
- InternalTransaction.cs
- InternalRelationshipCollection.cs
- BufferBuilder.cs
- DrawingCollection.cs
- WizardPanelChangingEventArgs.cs
- Font.cs
- SystemIcmpV6Statistics.cs
- ObjectSerializerFactory.cs
- StickyNoteHelper.cs
- ActiveDocumentEvent.cs
- IFlowDocumentViewer.cs
- PropVariant.cs
- ZoneMembershipCondition.cs
- ControlCachePolicy.cs
- LayoutTable.cs
- SiteMapProvider.cs
- MimeFormatExtensions.cs
- MatrixAnimationUsingKeyFrames.cs
- BaseDataList.cs
- FileUpload.cs