Code:
/ DotNET / DotNET / 8.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
- ToolStripRenderer.cs
- WorkerRequest.cs
- SoapMessage.cs
- DefaultValueAttribute.cs
- updatecommandorderer.cs
- MissingMethodException.cs
- RegexNode.cs
- XmlTextReader.cs
- SourceChangedEventArgs.cs
- DateTimeHelper.cs
- sqlpipe.cs
- ModelTypeConverter.cs
- SqlAliasesReferenced.cs
- Part.cs
- DesignerSerializerAttribute.cs
- SqlClientPermission.cs
- ColumnResult.cs
- Page.cs
- TypedTableBaseExtensions.cs
- SqlDataSourceEnumerator.cs
- SQLBinary.cs
- Visual.cs
- TextEditorSelection.cs
- TraceSource.cs
- SimplePropertyEntry.cs
- XamlReader.cs
- LinqDataSourceContextEventArgs.cs
- StylusPointPropertyInfoDefaults.cs
- DefaultEventAttribute.cs
- DocumentSequenceHighlightLayer.cs
- BindingListCollectionView.cs
- _AutoWebProxyScriptWrapper.cs
- HostingPreferredMapPath.cs
- FormViewDeleteEventArgs.cs
- TableFieldsEditor.cs
- StringStorage.cs
- DragEventArgs.cs
- ValidationContext.cs
- VScrollBar.cs
- ResourceDescriptionAttribute.cs
- CommonDialog.cs
- ClientFormsAuthenticationCredentials.cs
- BitFlagsGenerator.cs
- ButtonAutomationPeer.cs
- AccessedThroughPropertyAttribute.cs
- HierarchicalDataBoundControlAdapter.cs
- EventLogWatcher.cs
- CanonicalFontFamilyReference.cs
- SqlException.cs
- FixedPage.cs
- DebugHandleTracker.cs
- ExpandSegment.cs
- MarkedHighlightComponent.cs
- InternalUserCancelledException.cs
- MemberExpression.cs
- XpsResource.cs
- ElementAction.cs
- RequestCacheEntry.cs
- NotSupportedException.cs
- DesignerCommandSet.cs
- WebException.cs
- NavigationFailedEventArgs.cs
- EntityDesignerDataSourceView.cs
- ComplexPropertyEntry.cs
- UpdateTracker.cs
- BooleanExpr.cs
- Trace.cs
- PasswordRecoveryDesigner.cs
- SQLCharsStorage.cs
- RegexRunner.cs
- RtType.cs
- ConfigurationManager.cs
- ContainerParaClient.cs
- ReadWriteObjectLock.cs
- DnsPermission.cs
- ProxyHelper.cs
- ExtendedPropertyDescriptor.cs
- AssociationType.cs
- ListViewItem.cs
- NativeMethods.cs
- LocalTransaction.cs
- XPathNodeList.cs
- ParameterToken.cs
- InfocardChannelParameter.cs
- AsyncOperation.cs
- BufferedGraphics.cs
- SmtpNegotiateAuthenticationModule.cs
- SystemIPGlobalProperties.cs
- HtmlProps.cs
- _OverlappedAsyncResult.cs
- AxHost.cs
- AttachedPropertyBrowsableForChildrenAttribute.cs
- HelpEvent.cs
- MouseGestureValueSerializer.cs
- BasicCellRelation.cs
- TTSEvent.cs
- TreeViewBindingsEditor.cs
- WorkflowRuntimeServiceElement.cs
- DoubleConverter.cs
- LookupBindingPropertiesAttribute.cs