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
- SmtpLoginAuthenticationModule.cs
- TransportContext.cs
- NavigationCommands.cs
- DataGridViewRowEventArgs.cs
- StorageFunctionMapping.cs
- DataControlImageButton.cs
- MetadataCache.cs
- WindowsScrollBar.cs
- Compilation.cs
- AmbiguousMatchException.cs
- PathTooLongException.cs
- PageBreakRecord.cs
- LinkedResourceCollection.cs
- MobileControlPersister.cs
- _IPv6Address.cs
- FileDialogCustomPlacesCollection.cs
- VolatileResourceManager.cs
- DashStyle.cs
- ItemCollection.cs
- ProfileInfo.cs
- ScrollPattern.cs
- WindowsScrollBar.cs
- ScrollableControlDesigner.cs
- Point3DAnimationBase.cs
- TypeBrowser.xaml.cs
- MultiSelectRootGridEntry.cs
- SupportsPreviewControlAttribute.cs
- ThreadExceptionDialog.cs
- cryptoapiTransform.cs
- StructuredTypeEmitter.cs
- UnsafeNativeMethods.cs
- LateBoundBitmapDecoder.cs
- TriState.cs
- ItemContainerGenerator.cs
- ObjectStateEntryDbUpdatableDataRecord.cs
- WebServiceHostFactory.cs
- UInt64Converter.cs
- DataGridViewColumnTypePicker.cs
- XPathNodeIterator.cs
- PeerContact.cs
- DeploymentSection.cs
- DateTimeOffsetStorage.cs
- DesignerSerializerAttribute.cs
- CheckBoxPopupAdapter.cs
- WebPartMinimizeVerb.cs
- TrustSection.cs
- TargetParameterCountException.cs
- ResponseBodyWriter.cs
- PropertyEntry.cs
- SystemInformation.cs
- __TransparentProxy.cs
- GridViewRowCollection.cs
- Regex.cs
- FormDesigner.cs
- HtmlTableRowCollection.cs
- CapabilitiesAssignment.cs
- NativeObjectSecurity.cs
- XmlHierarchicalEnumerable.cs
- DiscoveryCallbackBehavior.cs
- EntityStoreSchemaFilterEntry.cs
- BaseParaClient.cs
- FixedMaxHeap.cs
- FixedSOMTextRun.cs
- MDIWindowDialog.cs
- CodeDOMProvider.cs
- CacheForPrimitiveTypes.cs
- DrawTreeNodeEventArgs.cs
- CodeCatchClause.cs
- CanExecuteRoutedEventArgs.cs
- _NetRes.cs
- DelegatedStream.cs
- HttpDebugHandler.cs
- DataGridViewCellPaintingEventArgs.cs
- WebRequest.cs
- SamlAssertionKeyIdentifierClause.cs
- AmbiguousMatchException.cs
- StringConcat.cs
- FormViewDeletedEventArgs.cs
- ApplicationDirectoryMembershipCondition.cs
- Win32Exception.cs
- TextRunProperties.cs
- SequentialUshortCollection.cs
- ExpressionBuilder.cs
- ImageListImageEditor.cs
- XmlDataSource.cs
- ModuleConfigurationInfo.cs
- ElementHostAutomationPeer.cs
- SqlDataSourceCommandEventArgs.cs
- PageWrapper.cs
- BinaryNode.cs
- NotifyIcon.cs
- updateconfighost.cs
- QueryActivatableWorkflowsCommand.cs
- ClockController.cs
- errorpatternmatcher.cs
- SQLUtility.cs
- CompoundFileStorageReference.cs
- XmlLoader.cs
- iisPickupDirectory.cs
- IERequestCache.cs