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
- TemplatedMailWebEventProvider.cs
- Collection.cs
- BuildDependencySet.cs
- RowToFieldTransformer.cs
- FontDifferentiator.cs
- SiblingIterators.cs
- ObjectView.cs
- XmlSchemaSimpleTypeRestriction.cs
- ExceptionHelpers.cs
- CompatibleComparer.cs
- ScriptingRoleServiceSection.cs
- SelectingProviderEventArgs.cs
- TableLayoutSettingsTypeConverter.cs
- SessionSymmetricTransportSecurityProtocolFactory.cs
- SqlFacetAttribute.cs
- HMACRIPEMD160.cs
- SaveFileDialogDesigner.cs
- Assembly.cs
- TraversalRequest.cs
- ReturnEventArgs.cs
- Encoder.cs
- ZipArchive.cs
- Propagator.ExtentPlaceholderCreator.cs
- ByteStack.cs
- GroupBoxRenderer.cs
- LockRecoveryTask.cs
- ClientData.cs
- IsolatedStorageFileStream.cs
- WaveHeader.cs
- ADConnectionHelper.cs
- XamlToRtfWriter.cs
- WindowManager.cs
- _SafeNetHandles.cs
- TrimSurroundingWhitespaceAttribute.cs
- FixedSOMPageElement.cs
- XmlProcessingInstruction.cs
- Util.cs
- SqlWebEventProvider.cs
- DbDataAdapter.cs
- SvcFileManager.cs
- LinkConverter.cs
- ContainerVisual.cs
- XmlEncodedRawTextWriter.cs
- FloaterBaseParaClient.cs
- LinkConverter.cs
- mansign.cs
- RequestTimeoutManager.cs
- ExtentCqlBlock.cs
- SqlBulkCopyColumnMappingCollection.cs
- NameService.cs
- ActivationArguments.cs
- CompModHelpers.cs
- DbDataAdapter.cs
- ProxyElement.cs
- AlphabeticalEnumConverter.cs
- EntityModelSchemaGenerator.cs
- CookielessData.cs
- RequiredFieldValidator.cs
- Pts.cs
- XsdDateTime.cs
- PerformanceCounter.cs
- LockRecursionException.cs
- ConditionChanges.cs
- PassportAuthentication.cs
- RestrictedTransactionalPackage.cs
- ProcessStartInfo.cs
- InputBuffer.cs
- MeshGeometry3D.cs
- TextTrailingCharacterEllipsis.cs
- SchemaImporterExtensionsSection.cs
- IPGlobalProperties.cs
- ADRoleFactoryConfiguration.cs
- CompositeFontFamily.cs
- XmlSchemaInferenceException.cs
- FlowLayout.cs
- QueueSurrogate.cs
- QilReference.cs
- GradientBrush.cs
- ELinqQueryState.cs
- AuthenticationSection.cs
- TextProviderWrapper.cs
- FactoryId.cs
- OleTxTransaction.cs
- MethodBuilder.cs
- RuntimeEnvironment.cs
- Propagator.cs
- MetadataPropertyvalue.cs
- PageAsyncTaskManager.cs
- Span.cs
- LockRecoveryTask.cs
- RSAPKCS1SignatureFormatter.cs
- Variable.cs
- ConfigurationValidatorAttribute.cs
- BooleanFacetDescriptionElement.cs
- DocumentSchemaValidator.cs
- Window.cs
- ContextMenu.cs
- MessageHeaderAttribute.cs
- NotificationContext.cs
- SystemResourceKey.cs