Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / whidbey / NetFXspW7 / 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
- RoutedUICommand.cs
- BaseWebProxyFinder.cs
- CodeTypeReference.cs
- AddInAdapter.cs
- AnimationClock.cs
- BackgroundFormatInfo.cs
- EventRecord.cs
- StreamSecurityUpgradeInitiatorAsyncResult.cs
- MsmqIntegrationOutputChannel.cs
- CommunicationException.cs
- ViewStateException.cs
- IDictionary.cs
- RepeaterItemCollection.cs
- HtmlFormWrapper.cs
- BaseDataListDesigner.cs
- QueryOperationResponseOfT.cs
- TableHeaderCell.cs
- MouseEvent.cs
- CodeIdentifier.cs
- FontResourceCache.cs
- TabRenderer.cs
- CompleteWizardStep.cs
- ListViewItem.cs
- OptimalTextSource.cs
- DiagnosticsConfiguration.cs
- Int16Converter.cs
- SqlProfileProvider.cs
- WebPartMenu.cs
- DictationGrammar.cs
- AssemblyBuilder.cs
- DynamicScriptObject.cs
- KoreanLunisolarCalendar.cs
- BindUriHelper.cs
- ResourceDisplayNameAttribute.cs
- ActivitySurrogate.cs
- Vector3DCollectionValueSerializer.cs
- CodeStatementCollection.cs
- XslAstAnalyzer.cs
- TrustSection.cs
- NonClientArea.cs
- SystemNetHelpers.cs
- SqlInternalConnectionTds.cs
- IgnoreDataMemberAttribute.cs
- IncrementalReadDecoders.cs
- UnsafeNativeMethodsPenimc.cs
- BooleanProjectedSlot.cs
- SplitterPanel.cs
- GridViewRowCollection.cs
- LinearGradientBrush.cs
- mediapermission.cs
- TableParagraph.cs
- OracleLob.cs
- AnnotationMap.cs
- TextOutput.cs
- LoginName.cs
- Itemizer.cs
- GridToolTip.cs
- ListenerSingletonConnectionReader.cs
- InvalidOperationException.cs
- DataObjectSettingDataEventArgs.cs
- ConfigurationException.cs
- PropertyGridDesigner.cs
- LogSwitch.cs
- DbDataRecord.cs
- ParameterCollection.cs
- SecurityException.cs
- UnknownWrapper.cs
- TraceSection.cs
- SharedPersonalizationStateInfo.cs
- XmlSchemaSimpleContent.cs
- ServiceChannelManager.cs
- XPathSelectionIterator.cs
- VirtualDirectoryMapping.cs
- DataGridViewComboBoxColumn.cs
- WebEventCodes.cs
- FirstQueryOperator.cs
- NamedPipeProcessProtocolHandler.cs
- MailDefinition.cs
- Baml2006ReaderSettings.cs
- XPathDocumentIterator.cs
- XmlUtf8RawTextWriter.cs
- DataControlFieldCollection.cs
- CacheEntry.cs
- HandleExceptionArgs.cs
- SafeEventHandle.cs
- QilTargetType.cs
- BindableAttribute.cs
- XsdDateTime.cs
- ComponentCollection.cs
- MasterPageParser.cs
- WpfXamlType.cs
- SignatureResourcePool.cs
- smtppermission.cs
- DatatypeImplementation.cs
- ExternalFile.cs
- ExpressionVisitorHelpers.cs
- ContextDataSourceView.cs
- DbConnectionFactory.cs
- ColumnResizeUndoUnit.cs
- ContextStack.cs