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
- SelectiveScrollingGrid.cs
- ObjectListDataBindEventArgs.cs
- WeakRefEnumerator.cs
- ReadWriteObjectLock.cs
- ConstNode.cs
- Msec.cs
- Style.cs
- EntityDataSourceWizardForm.cs
- Rotation3DAnimationUsingKeyFrames.cs
- WindowInteractionStateTracker.cs
- FileSystemEnumerable.cs
- TimersDescriptionAttribute.cs
- MenuTracker.cs
- SplashScreenNativeMethods.cs
- ReferentialConstraintRoleElement.cs
- StateMachineDesignerPaint.cs
- HighlightVisual.cs
- TagMapCollection.cs
- NameObjectCollectionBase.cs
- DiagnosticTraceRecords.cs
- DataGridViewRowHeightInfoNeededEventArgs.cs
- TextEditorMouse.cs
- PageOutputColor.cs
- LogExtent.cs
- PrePrepareMethodAttribute.cs
- Connector.cs
- RelationshipFixer.cs
- XmlSerializableReader.cs
- ConfigurationPropertyCollection.cs
- CachedPathData.cs
- SamlAuthenticationClaimResource.cs
- DrawingGroup.cs
- panel.cs
- ConstrainedDataObject.cs
- Vector3D.cs
- ArrayConverter.cs
- QuerySafeNavigator.cs
- MailHeaderInfo.cs
- SecUtil.cs
- _SSPIWrapper.cs
- TokenBasedSetEnumerator.cs
- Cursors.cs
- UiaCoreApi.cs
- ToolStripDropDownClosingEventArgs.cs
- WindowsGraphics.cs
- EntityDataSourceMemberPath.cs
- EventMappingSettings.cs
- HttpClientCertificate.cs
- ScaleTransform3D.cs
- SelectionItemProviderWrapper.cs
- ExpressionBindings.cs
- WebRequest.cs
- TdsEnums.cs
- Axis.cs
- OutputCacheSettings.cs
- ServerValidateEventArgs.cs
- _NegotiateClient.cs
- SpecialFolderEnumConverter.cs
- AvTraceDetails.cs
- ImageSourceValueSerializer.cs
- RequiredFieldValidator.cs
- Version.cs
- TextElementEnumerator.cs
- ValidationResults.cs
- XmlnsDictionary.cs
- ControlValuePropertyAttribute.cs
- StateFinalizationDesigner.cs
- Empty.cs
- XmlILModule.cs
- SiteMapPath.cs
- LockingPersistenceProvider.cs
- ConfigPathUtility.cs
- ProtocolsConfiguration.cs
- Grant.cs
- MaskedTextBoxDesignerActionList.cs
- DetailsViewModeEventArgs.cs
- CapabilitiesPattern.cs
- KeyedHashAlgorithm.cs
- DynamicDiscoveryDocument.cs
- InputReferenceExpression.cs
- URLMembershipCondition.cs
- TreeView.cs
- SchemaNotation.cs
- DependentTransaction.cs
- SimpleExpression.cs
- ServicesUtilities.cs
- SizeChangedEventArgs.cs
- PointCollection.cs
- Visitors.cs
- ColumnPropertiesGroup.cs
- WindowsAltTab.cs
- HttpListenerException.cs
- Utils.cs
- PeerCollaborationPermission.cs
- IxmlLineInfo.cs
- ToolZone.cs
- PathFigureCollection.cs
- ObjectAnimationBase.cs
- Bitmap.cs
- XmlWriterTraceListener.cs