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
- HMACSHA384.cs
- Unit.cs
- SqlAliasesReferenced.cs
- DesignerTransactionCloseEvent.cs
- LinearGradientBrush.cs
- StringArrayConverter.cs
- TemplateColumn.cs
- WaitForChangedResult.cs
- EditorZone.cs
- EnumMemberAttribute.cs
- IdentityReference.cs
- _FixedSizeReader.cs
- ReverseInheritProperty.cs
- CharacterBuffer.cs
- StylusDevice.cs
- SerialReceived.cs
- CodeDomLocalizationProvider.cs
- FileSecurity.cs
- PackageFilter.cs
- GregorianCalendar.cs
- EntityDataSourceChangingEventArgs.cs
- ProcessHostFactoryHelper.cs
- WebConfigurationHostFileChange.cs
- FixedSOMTableCell.cs
- QuadraticBezierSegment.cs
- IndexExpression.cs
- ThrowHelper.cs
- PropertyDescriptorCollection.cs
- SingleSelectRootGridEntry.cs
- HttpCookie.cs
- InvariantComparer.cs
- LinqDataSourceHelper.cs
- Automation.cs
- MediaElementAutomationPeer.cs
- InfoCardSymmetricAlgorithm.cs
- EventLogPermissionEntry.cs
- UInt16Converter.cs
- FileDetails.cs
- DataGridViewCellErrorTextNeededEventArgs.cs
- KeyValueInternalCollection.cs
- peernodeimplementation.cs
- SmtpException.cs
- Span.cs
- ValidationRuleCollection.cs
- InternalResources.cs
- ComponentEditorForm.cs
- UnmanagedMemoryStream.cs
- FixedHyperLink.cs
- MediaElement.cs
- SByteConverter.cs
- CombinedHttpChannel.cs
- XmlWriterSettings.cs
- FlowDocumentReader.cs
- UpdateRecord.cs
- XmlArrayAttribute.cs
- HandledEventArgs.cs
- XmlObjectSerializerWriteContextComplex.cs
- ProcessThreadCollection.cs
- FontEditor.cs
- FigureHelper.cs
- AnnotationAuthorChangedEventArgs.cs
- StrongNameIdentityPermission.cs
- SplineKeyFrames.cs
- XmlRawWriter.cs
- DragCompletedEventArgs.cs
- WinEventHandler.cs
- SupportingTokenDuplexChannel.cs
- EmptyStringExpandableObjectConverter.cs
- TableSectionStyle.cs
- ResourceProperty.cs
- ClusterRegistryConfigurationProvider.cs
- StoreItemCollection.cs
- BStrWrapper.cs
- WorkflowApplicationCompletedException.cs
- RadioButton.cs
- SizeAnimationClockResource.cs
- SortExpressionBuilder.cs
- EventsTab.cs
- LinkConverter.cs
- TemplateNameScope.cs
- RecognizedWordUnit.cs
- PathStreamGeometryContext.cs
- LinqDataView.cs
- TextTrailingWordEllipsis.cs
- FrameworkElementFactoryMarkupObject.cs
- ConditionBrowserDialog.cs
- DiagnosticEventProvider.cs
- MessageHeaders.cs
- UnitySerializationHolder.cs
- ArraySet.cs
- WindowsToolbarAsMenu.cs
- SkewTransform.cs
- QilInvokeEarlyBound.cs
- WorkflowInstanceExtensionCollection.cs
- Claim.cs
- ModifierKeysValueSerializer.cs
- SectionRecord.cs
- EditingContext.cs
- TemplateControlBuildProvider.cs
- ConfigXmlAttribute.cs