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
- Command.cs
- AlphabeticalEnumConverter.cs
- DetailsViewUpdatedEventArgs.cs
- IncrementalHitTester.cs
- QueryInterceptorAttribute.cs
- CustomPopupPlacement.cs
- DefaultBindingPropertyAttribute.cs
- SqlServer2KCompatibilityAnnotation.cs
- DispatcherBuilder.cs
- ProfileInfo.cs
- TogglePattern.cs
- DataListCommandEventArgs.cs
- TraceSection.cs
- SingleAnimationUsingKeyFrames.cs
- DataIdProcessor.cs
- WebPartCloseVerb.cs
- ControlDesignerState.cs
- ValueHandle.cs
- VerticalConnector.xaml.cs
- MediaEntryAttribute.cs
- VisualBrush.cs
- InstanceNameConverter.cs
- ResourceKey.cs
- SqlInfoMessageEvent.cs
- IxmlLineInfo.cs
- DocumentSequenceHighlightLayer.cs
- ScrollProperties.cs
- DataGridViewCellMouseEventArgs.cs
- ModulesEntry.cs
- XslAstAnalyzer.cs
- TextProviderWrapper.cs
- MaskedTextBox.cs
- QueryCacheKey.cs
- DayRenderEvent.cs
- Transactions.cs
- PaperSource.cs
- Queue.cs
- TemplateNodeContextMenu.cs
- SqlInternalConnectionTds.cs
- oledbmetadatacollectionnames.cs
- HttpRequestBase.cs
- PiiTraceSource.cs
- RsaKeyIdentifierClause.cs
- WorkflowDesignerMessageFilter.cs
- EmptyReadOnlyDictionaryInternal.cs
- FileInfo.cs
- WindowsTreeView.cs
- FillBehavior.cs
- Win32KeyboardDevice.cs
- LogLogRecord.cs
- TimeSpan.cs
- ImageUrlEditor.cs
- DbProviderManifest.cs
- BulletChrome.cs
- unitconverter.cs
- _DisconnectOverlappedAsyncResult.cs
- CompareValidator.cs
- WpfKnownType.cs
- DesignerView.Commands.cs
- XmlLoader.cs
- ImageClickEventArgs.cs
- VectorAnimation.cs
- FileNotFoundException.cs
- AssertHelper.cs
- DodSequenceMerge.cs
- Crc32.cs
- CommonObjectSecurity.cs
- Column.cs
- PartitionResolver.cs
- BitmapFrameEncode.cs
- RtfToken.cs
- SpotLight.cs
- ProcessRequestArgs.cs
- VisualStyleInformation.cs
- oledbconnectionstring.cs
- CodeCompiler.cs
- ActivationArguments.cs
- DecoderNLS.cs
- PropertyBuilder.cs
- XmlnsDictionary.cs
- OpenFileDialog.cs
- EntityKey.cs
- DataBoundControl.cs
- ToolStripContainerDesigner.cs
- GridSplitterAutomationPeer.cs
- ActivityTypeCodeDomSerializer.cs
- PresentationTraceSources.cs
- MonthChangedEventArgs.cs
- CheckedPointers.cs
- ResizeGrip.cs
- ConfigurationValidatorBase.cs
- QueryableDataSourceEditData.cs
- ClientProxyGenerator.cs
- QilVisitor.cs
- DPCustomTypeDescriptor.cs
- CodeSubDirectoriesCollection.cs
- ManipulationLogic.cs
- DictionaryManager.cs
- QualificationDataAttribute.cs
- ClientProxyGenerator.cs