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
- PointUtil.cs
- AttributeCollection.cs
- MemberPath.cs
- QuarticEase.cs
- SqlResolver.cs
- MSAAEventDispatcher.cs
- ProvidersHelper.cs
- ExceptionUtil.cs
- CompressedStack.cs
- PriorityRange.cs
- HandledMouseEvent.cs
- XmlValueConverter.cs
- DataPointer.cs
- KeyboardEventArgs.cs
- XmlHelper.cs
- SafeSystemMetrics.cs
- SortQuery.cs
- SqlXml.cs
- WebPartEditVerb.cs
- GPPOINTF.cs
- Hyperlink.cs
- InkCanvasFeedbackAdorner.cs
- LayoutDump.cs
- Visual3DCollection.cs
- XsdBuilder.cs
- XmlAttributeHolder.cs
- MonitorWrapper.cs
- InheritanceContextHelper.cs
- CorrelationResolver.cs
- EditingCoordinator.cs
- ReadOnlyDictionary.cs
- Compiler.cs
- TransactionalPackage.cs
- WebSysDescriptionAttribute.cs
- Misc.cs
- ComEventsHelper.cs
- PrivateFontCollection.cs
- SqlServer2KCompatibilityCheck.cs
- DragEvent.cs
- PolyBezierSegment.cs
- SoapServerProtocol.cs
- GacUtil.cs
- SafeNativeMethods.cs
- WebWorkflowRole.cs
- WebPartsSection.cs
- DataGridViewHeaderCell.cs
- SmiEventStream.cs
- ByteStack.cs
- DataGrid.cs
- Point.cs
- AttachmentService.cs
- TypeCollectionPropertyEditor.cs
- _emptywebproxy.cs
- CreateUserWizardDesigner.cs
- DropShadowEffect.cs
- AttributedMetaModel.cs
- ListViewAutomationPeer.cs
- ProcessModule.cs
- XPathDocument.cs
- SelectionProcessor.cs
- OutputChannel.cs
- ColumnMap.cs
- ForceCopyBuildProvider.cs
- InkCanvasSelectionAdorner.cs
- DisplayInformation.cs
- DataObjectFieldAttribute.cs
- SchemaManager.cs
- DbConnectionPoolGroupProviderInfo.cs
- MonthCalendar.cs
- QilLoop.cs
- Label.cs
- Propagator.JoinPropagator.SubstitutingCloneVisitor.cs
- AuthenticationConfig.cs
- PriorityQueue.cs
- LinqDataSourceInsertEventArgs.cs
- VisualTreeHelper.cs
- ClientEventManager.cs
- WebBrowserSiteBase.cs
- MatrixKeyFrameCollection.cs
- CodeExporter.cs
- DataSourceView.cs
- TiffBitmapEncoder.cs
- Relationship.cs
- Sql8ConformanceChecker.cs
- NetworkInterface.cs
- StatusBarPanel.cs
- DynamicHyperLink.cs
- DbMetaDataColumnNames.cs
- DbSetClause.cs
- KnownBoxes.cs
- ScriptMethodAttribute.cs
- ResourceAssociationSet.cs
- TransformConverter.cs
- ScrollPattern.cs
- Int32RectConverter.cs
- MetadataResolver.cs
- HtmlInputButton.cs
- ToolStripDesignerAvailabilityAttribute.cs
- BufferedWebEventProvider.cs
- GenerateTemporaryTargetAssembly.cs