Code:
/ FX-1434 / FX-1434 / 1.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
- Bitmap.cs
- BezierSegment.cs
- FileSecurity.cs
- ImageListUtils.cs
- TabPage.cs
- BasicAsyncResult.cs
- WebPartActionVerb.cs
- ApplicationContext.cs
- EntityStoreSchemaGenerator.cs
- DockPanel.cs
- NamespaceDecl.cs
- InputGestureCollection.cs
- ImageFormatConverter.cs
- PropertyTabAttribute.cs
- CheckBoxFlatAdapter.cs
- BlurEffect.cs
- UniqueConstraint.cs
- FlowNode.cs
- SqlMethodAttribute.cs
- WindowsFormsLinkLabel.cs
- DataObjectSettingDataEventArgs.cs
- CodeCastExpression.cs
- LinqDataSourceSelectEventArgs.cs
- XamlDesignerSerializationManager.cs
- ConnectionInterfaceCollection.cs
- PostBackOptions.cs
- ScrollBar.cs
- Canvas.cs
- ButtonBaseAutomationPeer.cs
- NumericPagerField.cs
- DocobjHost.cs
- HostnameComparisonMode.cs
- EmptyReadOnlyDictionaryInternal.cs
- _TLSstream.cs
- FormsAuthenticationUserCollection.cs
- SemanticResolver.cs
- DispatchWrapper.cs
- FileLoadException.cs
- PageStatePersister.cs
- ZipIOExtraFieldElement.cs
- Mouse.cs
- BufferModesCollection.cs
- ToolBarButton.cs
- PointUtil.cs
- ServiceDiscoveryElement.cs
- ComponentResourceManager.cs
- CollectionBuilder.cs
- UserNameSecurityToken.cs
- RightsManagementEncryptedStream.cs
- SignedXml.cs
- Enum.cs
- HtmlWindow.cs
- TriggerAction.cs
- WebBrowserNavigatedEventHandler.cs
- StorageBasedPackageProperties.cs
- UnauthorizedWebPart.cs
- IisTraceWebEventProvider.cs
- OrCondition.cs
- SqlTrackingQuery.cs
- FormattedText.cs
- HttpHandlerAction.cs
- BufferModesCollection.cs
- CellQuery.cs
- HtmlHead.cs
- SerialPort.cs
- SqlEnums.cs
- BindingMemberInfo.cs
- MenuItem.cs
- WebPartConnectionsDisconnectVerb.cs
- PropertyMetadata.cs
- CharEnumerator.cs
- VectorAnimationUsingKeyFrames.cs
- HttpListenerRequest.cs
- SafeNativeMethods.cs
- XmlTextReaderImpl.cs
- IgnoreFileBuildProvider.cs
- ColorBlend.cs
- HMACRIPEMD160.cs
- StrokeSerializer.cs
- MetadataCache.cs
- NavigationExpr.cs
- Attributes.cs
- PeerNode.cs
- _RequestCacheProtocol.cs
- TabletDevice.cs
- altserialization.cs
- CodeDOMUtility.cs
- ToolStripDropDownClosingEventArgs.cs
- InheritedPropertyDescriptor.cs
- RuleSettings.cs
- BitmapCacheBrush.cs
- RetrieveVirtualItemEventArgs.cs
- X509RawDataKeyIdentifierClause.cs
- SchemaCollectionPreprocessor.cs
- hebrewshape.cs
- WebBodyFormatMessageProperty.cs
- XmlAttributeAttribute.cs
- XmlAggregates.cs
- StrongBox.cs
- RecognizedAudio.cs