Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / whidbey / netfxsp / 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
- XmlWrappingReader.cs
- ZipIOZip64EndOfCentralDirectoryBlock.cs
- PropertyDescriptor.cs
- UnsafeNativeMethods.cs
- ProcessHostConfigUtils.cs
- Parsers.cs
- DataViewManager.cs
- LogicalMethodInfo.cs
- SyncMethodInvoker.cs
- SortQueryOperator.cs
- CheckBox.cs
- DetailsViewRowCollection.cs
- EntityDataSourceDesignerHelper.cs
- DiagnosticsConfiguration.cs
- AncillaryOps.cs
- TableRowGroup.cs
- SafeProcessHandle.cs
- SqlDataSourceCustomCommandPanel.cs
- PropertyChangingEventArgs.cs
- CoreChannel.cs
- WSSecurityOneDotZeroSendSecurityHeader.cs
- XmlCDATASection.cs
- ComboBox.cs
- DeferredElementTreeState.cs
- NamespaceTable.cs
- CatalogZoneBase.cs
- DataBindingCollection.cs
- Shape.cs
- EventListenerClientSide.cs
- WebPartCatalogAddVerb.cs
- Rectangle.cs
- ProxyWebPart.cs
- NavigationPropertyAccessor.cs
- EntityKeyElement.cs
- SmtpLoginAuthenticationModule.cs
- SafeSecurityHandles.cs
- XmlLinkedNode.cs
- DbDataRecord.cs
- PrintPreviewGraphics.cs
- ButtonBaseAdapter.cs
- ContainerVisual.cs
- EventProperty.cs
- Logging.cs
- OpenTypeLayout.cs
- CacheMemory.cs
- SapiRecoInterop.cs
- StateBag.cs
- TraceXPathNavigator.cs
- EdgeModeValidation.cs
- ProviderUtil.cs
- DataGridTable.cs
- HttpCapabilitiesBase.cs
- CompositeFontParser.cs
- ObjectItemLoadingSessionData.cs
- XmlWriterSettings.cs
- SafeProcessHandle.cs
- HMAC.cs
- Tracking.cs
- TemplateControlBuildProvider.cs
- CodeCompileUnit.cs
- PasswordBoxAutomationPeer.cs
- DecoderExceptionFallback.cs
- CssTextWriter.cs
- DataSourceControlBuilder.cs
- DataColumnCollection.cs
- RemotingAttributes.cs
- DBCommandBuilder.cs
- FrameworkContentElementAutomationPeer.cs
- IISUnsafeMethods.cs
- HttpCacheVaryByContentEncodings.cs
- SafeLocalMemHandle.cs
- XmlSchemaValidator.cs
- StrokeSerializer.cs
- XamlInterfaces.cs
- HttpListenerException.cs
- DefaultSerializationProviderAttribute.cs
- QilFactory.cs
- Pkcs9Attribute.cs
- CngKey.cs
- DBPropSet.cs
- QuaternionAnimation.cs
- mda.cs
- Encoder.cs
- hresults.cs
- BinHexEncoder.cs
- PipelineModuleStepContainer.cs
- Profiler.cs
- HtmlTextArea.cs
- ToolboxSnapDragDropEventArgs.cs
- ErrorInfoXmlDocument.cs
- ErrorTableItemStyle.cs
- TextTreeTextNode.cs
- DataTableReaderListener.cs
- StrongNameIdentityPermission.cs
- Win32Native.cs
- GenerateHelper.cs
- Exceptions.cs
- DisplayNameAttribute.cs
- ResourceProperty.cs
- ResXDataNode.cs