Code:
/ FXUpdate3074 / FXUpdate3074 / 1.1 / untmp / whidbey / QFE / 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 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.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- ConfigurationProperty.cs
- UndoEngine.cs
- DocumentGrid.cs
- TableRowCollection.cs
- compensatingcollection.cs
- ColumnWidthChangedEvent.cs
- ElementNotEnabledException.cs
- DataGridViewCell.cs
- NativeMethods.cs
- Int32RectConverter.cs
- PageHandlerFactory.cs
- _ServiceNameStore.cs
- SerializeAbsoluteContext.cs
- XmlSerializerVersionAttribute.cs
- HtmlInputText.cs
- XmlEncodedRawTextWriter.cs
- InputProviderSite.cs
- TypeExtensionConverter.cs
- _TransmitFileOverlappedAsyncResult.cs
- ArraySubsetEnumerator.cs
- ToolStripDropDownButton.cs
- BasicViewGenerator.cs
- RsaKeyIdentifierClause.cs
- ManagedWndProcTracker.cs
- DocumentCollection.cs
- LoadMessageLogger.cs
- Compiler.cs
- BitmapMetadata.cs
- OleAutBinder.cs
- Dictionary.cs
- RelationshipWrapper.cs
- DataGridColumnHeadersPresenterAutomationPeer.cs
- XmlBinaryWriter.cs
- CorrelationManager.cs
- ItemsControl.cs
- UIElementHelper.cs
- ScriptManager.cs
- OdbcHandle.cs
- ImportedNamespaceContextItem.cs
- DecoderFallbackWithFailureFlag.cs
- DispatcherTimer.cs
- XamlVector3DCollectionSerializer.cs
- CleanUpVirtualizedItemEventArgs.cs
- HierarchicalDataTemplate.cs
- PtsHost.cs
- TextAdaptor.cs
- XPathArrayIterator.cs
- DataGridViewSelectedColumnCollection.cs
- ReliabilityContractAttribute.cs
- UIPropertyMetadata.cs
- BindingNavigator.cs
- TextDecoration.cs
- SqlDataSourceView.cs
- WindowsComboBox.cs
- SafeEventLogReadHandle.cs
- BamlCollectionHolder.cs
- RadioButtonList.cs
- DefaultEventAttribute.cs
- Vector3DKeyFrameCollection.cs
- MDIControlStrip.cs
- TemplateBaseAction.cs
- SQLDecimal.cs
- PerspectiveCamera.cs
- Dictionary.cs
- EntityDesignerDataSourceView.cs
- TraceProvider.cs
- SinglePageViewer.cs
- Typography.cs
- QilSortKey.cs
- ReferentialConstraint.cs
- DefaultAsyncDataDispatcher.cs
- WindowsAltTab.cs
- Permission.cs
- MessageBox.cs
- QueryRewriter.cs
- WebPartCollection.cs
- CacheModeValueSerializer.cs
- ObsoleteAttribute.cs
- ResourceDisplayNameAttribute.cs
- LinqDataSourceInsertEventArgs.cs
- OracleDateTime.cs
- BoundPropertyEntry.cs
- TypeSemantics.cs
- __FastResourceComparer.cs
- ConfigurationSectionGroupCollection.cs
- AssociationSetMetadata.cs
- AnnotationAdorner.cs
- TextFormatter.cs
- ManagedCodeMarkers.cs
- DetailsViewUpdatedEventArgs.cs
- Int32AnimationUsingKeyFrames.cs
- Point.cs
- RealizationDrawingContextWalker.cs
- XmlWhitespace.cs
- DictionaryContent.cs
- DesignerVerbCollection.cs
- OracleBinary.cs
- UiaCoreProviderApi.cs
- OpenFileDialog.cs
- HostedHttpRequestAsyncResult.cs