Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / whidbey / NetFxQFE / 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 ---- 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; } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // ==++== // // 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 ---- 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; } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- VirtualDirectoryMapping.cs
- AssemblyGen.cs
- MessageSecurityOverMsmq.cs
- ObjectRef.cs
- CurrentTimeZone.cs
- GPRECT.cs
- EventProviderBase.cs
- QueryableDataSourceEditData.cs
- UnsafeNativeMethodsMilCoreApi.cs
- StylusCollection.cs
- LogicalExpressionEditor.cs
- ScriptingJsonSerializationSection.cs
- Tuple.cs
- MsmqTransportBindingElement.cs
- ButtonFieldBase.cs
- LazyTextWriterCreator.cs
- WebAdminConfigurationHelper.cs
- BlobPersonalizationState.cs
- NavigateEvent.cs
- ConnectionManagementElement.cs
- SystemResourceKey.cs
- MemoryResponseElement.cs
- StringUtil.cs
- LayoutEngine.cs
- DocumentPageViewAutomationPeer.cs
- FlagsAttribute.cs
- XmlSchemaSimpleTypeList.cs
- FileDataSourceCache.cs
- RootAction.cs
- FormsAuthenticationUserCollection.cs
- SqlGenericUtil.cs
- DocumentsTrace.cs
- NameNode.cs
- ClientRuntimeConfig.cs
- JsonWriterDelegator.cs
- ServiceAuthorizationBehavior.cs
- ColumnTypeConverter.cs
- OleTxTransaction.cs
- FormsAuthenticationModule.cs
- SpanIndex.cs
- WebServiceParameterData.cs
- DbConnectionPoolGroupProviderInfo.cs
- StyleSelector.cs
- DictionarySurrogate.cs
- MetadataArtifactLoaderFile.cs
- HttpStreamMessageEncoderFactory.cs
- DataGridRow.cs
- InheritanceRules.cs
- WebPartMenu.cs
- WebPartConnectionsConfigureVerb.cs
- SoapSchemaMember.cs
- WaitHandleCannotBeOpenedException.cs
- ColorKeyFrameCollection.cs
- ListViewItemMouseHoverEvent.cs
- EventBuilder.cs
- SigningCredentials.cs
- GregorianCalendarHelper.cs
- EntryWrittenEventArgs.cs
- RIPEMD160.cs
- DoubleLinkListEnumerator.cs
- GenericTypeParameterConverter.cs
- SecurityDocument.cs
- connectionpool.cs
- UMPAttributes.cs
- NativeObjectSecurity.cs
- MsmqProcessProtocolHandler.cs
- TreeViewImageIndexConverter.cs
- HealthMonitoringSection.cs
- MsmqChannelFactory.cs
- XmlSchemaInferenceException.cs
- DataGridDefaultColumnWidthTypeConverter.cs
- UnsafeNativeMethodsCLR.cs
- ObjectStateManager.cs
- URI.cs
- PackageRelationshipCollection.cs
- Size3DValueSerializer.cs
- StreamUpdate.cs
- HttpCachePolicyElement.cs
- ClientFormsAuthenticationCredentials.cs
- FontStretch.cs
- StateMachineWorkflow.cs
- RuleRef.cs
- UnmanagedHandle.cs
- BrowserDefinition.cs
- SymLanguageType.cs
- BufferedMessageData.cs
- BinaryVersion.cs
- GeneralTransform3DTo2D.cs
- AssemblyBuilderData.cs
- SqlDataSourceView.cs
- MenuAutoFormat.cs
- DataControlFieldCell.cs
- XPathCompileException.cs
- BaseTemplateParser.cs
- ResourceManager.cs
- ProviderBase.cs
- KeyedHashAlgorithm.cs
- PropertyOverridesTypeEditor.cs
- FormsAuthenticationModule.cs
- CustomActivityDesigner.cs