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
- x509store.cs
- HtmlTernaryTree.cs
- WebBaseEventKeyComparer.cs
- ObjectViewListener.cs
- BaseTreeIterator.cs
- HandlerFactoryCache.cs
- XmlStreamStore.cs
- UriSection.cs
- InternalSendMessage.cs
- QueryAccessibilityHelpEvent.cs
- Journal.cs
- CalendarButton.cs
- ObjectNavigationPropertyMapping.cs
- TextElementEditingBehaviorAttribute.cs
- GenericWebPart.cs
- RawStylusInputCustomData.cs
- SequentialActivityDesigner.cs
- MonthChangedEventArgs.cs
- DataFormats.cs
- TemplateControlParser.cs
- Rect.cs
- BamlRecordWriter.cs
- OdbcConnectionString.cs
- ControlCommandSet.cs
- ChtmlTextWriter.cs
- DataColumnPropertyDescriptor.cs
- DesignerRegion.cs
- EdmFunction.cs
- ToolboxItemLoader.cs
- GrammarBuilderRuleRef.cs
- ValidationHelpers.cs
- ModuleConfigurationInfo.cs
- WindowsListViewItem.cs
- AnnotationComponentChooser.cs
- XmlSerializerVersionAttribute.cs
- ToolboxDataAttribute.cs
- DataGridSortCommandEventArgs.cs
- EnumUnknown.cs
- BindUriHelper.cs
- MissingManifestResourceException.cs
- ImportContext.cs
- IpcClientManager.cs
- adornercollection.cs
- SqlBulkCopyColumnMapping.cs
- XmlDocumentSurrogate.cs
- MembershipValidatePasswordEventArgs.cs
- ValueExpressions.cs
- XmlAttributeCache.cs
- TypeConverterAttribute.cs
- WebUtil.cs
- Convert.cs
- SqlDelegatedTransaction.cs
- Thumb.cs
- SqlUserDefinedTypeAttribute.cs
- Point3D.cs
- InkCanvas.cs
- RemotingException.cs
- TextParagraphCache.cs
- DelegatingTypeDescriptionProvider.cs
- Relationship.cs
- WsatConfiguration.cs
- DecoderFallback.cs
- PrtCap_Base.cs
- SqlDelegatedTransaction.cs
- ApplicationHost.cs
- CatalogZoneBase.cs
- Camera.cs
- AuthenticationException.cs
- ChildTable.cs
- AddingNewEventArgs.cs
- TemplateModeChangedEventArgs.cs
- ApplicationSecurityInfo.cs
- DynamicExpression.cs
- StreamProxy.cs
- SegmentInfo.cs
- BitVector32.cs
- LingerOption.cs
- IndentedWriter.cs
- ExpanderAutomationPeer.cs
- CollectionAdapters.cs
- IntAverageAggregationOperator.cs
- BitmapEffectState.cs
- WindowVisualStateTracker.cs
- RegexFCD.cs
- SerializationObjectManager.cs
- WebPermission.cs
- XamlToRtfParser.cs
- DeferrableContent.cs
- EndCreateSecurityTokenRequest.cs
- ReferencedType.cs
- PlainXmlWriter.cs
- ErrorTableItemStyle.cs
- SqlCommand.cs
- IdentityModelStringsVersion1.cs
- SessionState.cs
- DocComment.cs
- WebPartCancelEventArgs.cs
- VirtualizedItemPattern.cs
- StrokeCollection2.cs
- SqlNotificationRequest.cs