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
- PresentationUIStyleResources.cs
- AttributeAction.cs
- RowParagraph.cs
- mongolianshape.cs
- ContainerParagraph.cs
- CustomSignedXml.cs
- MemoryFailPoint.cs
- SynchronizedPool.cs
- EmptyEnumerable.cs
- GridViewSelectEventArgs.cs
- OracleBoolean.cs
- EdmRelationshipNavigationPropertyAttribute.cs
- CalculatedColumn.cs
- WindowPattern.cs
- ContextMenuStrip.cs
- DataGridDetailsPresenterAutomationPeer.cs
- WebReferenceOptions.cs
- FieldNameLookup.cs
- MtomMessageEncodingBindingElement.cs
- DrawingBrush.cs
- DataReaderContainer.cs
- PreservationFileWriter.cs
- SystemWebCachingSectionGroup.cs
- UICuesEvent.cs
- PolyBezierSegmentFigureLogic.cs
- CellConstant.cs
- TypeCacheManager.cs
- EntityContainerEmitter.cs
- ObjectQuery.cs
- Viewport3DVisual.cs
- MenuItem.cs
- PlanCompilerUtil.cs
- RequestResizeEvent.cs
- GridViewColumn.cs
- ContentValidator.cs
- WebPartDisplayModeEventArgs.cs
- GeometryDrawing.cs
- Int16KeyFrameCollection.cs
- ColorTranslator.cs
- BitmapCodecInfoInternal.cs
- PackUriHelper.cs
- SqlErrorCollection.cs
- WebPartManager.cs
- SqlStatistics.cs
- RadialGradientBrush.cs
- WindowsListBox.cs
- TextReturnReader.cs
- DispatcherExceptionFilterEventArgs.cs
- DirectionalLight.cs
- RNGCryptoServiceProvider.cs
- DatePickerDateValidationErrorEventArgs.cs
- ExpressionEditorAttribute.cs
- ManipulationStartingEventArgs.cs
- DbProviderFactories.cs
- SizeLimitedCache.cs
- BitmapVisualManager.cs
- XmlException.cs
- SmtpReplyReader.cs
- BitmapPalettes.cs
- TypePresenter.xaml.cs
- BuildProvidersCompiler.cs
- AuthenticationService.cs
- PropertyCollection.cs
- ExpanderAutomationPeer.cs
- MessageQueuePermissionEntry.cs
- MdiWindowListItemConverter.cs
- COM2PropertyPageUITypeConverter.cs
- VisualStyleElement.cs
- KeyValueInternalCollection.cs
- BreadCrumbTextConverter.cs
- SqlDataAdapter.cs
- GridErrorDlg.cs
- PropertyExpression.cs
- VisualTarget.cs
- Itemizer.cs
- loginstatus.cs
- BuildProvider.cs
- BooleanToVisibilityConverter.cs
- BackStopAuthenticationModule.cs
- IPAddressCollection.cs
- DateTimeOffset.cs
- ThreadStaticAttribute.cs
- Number.cs
- VerificationException.cs
- cookiecollection.cs
- DefaultShape.cs
- FtpRequestCacheValidator.cs
- HandleRef.cs
- ProfileProvider.cs
- CreateUserWizard.cs
- URLMembershipCondition.cs
- ApplicationProxyInternal.cs
- SystemException.cs
- XmlEntity.cs
- WorkflowApplicationAbortedEventArgs.cs
- ClrPerspective.cs
- TemplateXamlParser.cs
- OpacityConverter.cs
- SocketInformation.cs
- DependencyProperty.cs