Code:
/ FX-1434 / FX-1434 / 1.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
- MessageProtectionOrder.cs
- Quad.cs
- ReversePositionQuery.cs
- SSmlParser.cs
- Statements.cs
- ToolboxComponentsCreatingEventArgs.cs
- ParameterReplacerVisitor.cs
- EncoderFallback.cs
- XmlDocumentFragment.cs
- XmlWrappingReader.cs
- ConsoleKeyInfo.cs
- MimeFormatter.cs
- filewebrequest.cs
- ObjectQueryExecutionPlan.cs
- ThreadPool.cs
- SettingsPropertyIsReadOnlyException.cs
- Events.cs
- EmptyEnumerator.cs
- ValidationErrorEventArgs.cs
- BaseParser.cs
- HwndAppCommandInputProvider.cs
- EntityDataSourceSelectingEventArgs.cs
- WpfGeneratedKnownTypes.cs
- EntityContainer.cs
- EntityDataSourceViewSchema.cs
- SafeFileMappingHandle.cs
- IPipelineRuntime.cs
- PathHelper.cs
- SpanIndex.cs
- webbrowsersite.cs
- CommandLibraryHelper.cs
- OdbcFactory.cs
- FormsAuthenticationModule.cs
- SerializationFieldInfo.cs
- NativeActivityAbortContext.cs
- CheckBoxField.cs
- HttpClientProtocol.cs
- BitmapEffectInput.cs
- ToolStripOverflowButton.cs
- ComplexPropertyEntry.cs
- ControlBindingsCollection.cs
- XamlSerializationHelper.cs
- SessionIDManager.cs
- Win32KeyboardDevice.cs
- SparseMemoryStream.cs
- Security.cs
- AssemblyNameProxy.cs
- BindMarkupExtensionSerializer.cs
- InheritanceAttribute.cs
- JumpTask.cs
- BinaryHeap.cs
- printdlgexmarshaler.cs
- HashCodeCombiner.cs
- Enlistment.cs
- RenderOptions.cs
- TextEffectResolver.cs
- ToolStripItemDesigner.cs
- TemplatePropertyEntry.cs
- FamilyCollection.cs
- HitTestDrawingContextWalker.cs
- CodeMethodReturnStatement.cs
- XmlSignatureManifest.cs
- PreloadHost.cs
- MarkupCompilePass1.cs
- D3DImage.cs
- DataGridViewComponentPropertyGridSite.cs
- DeviceContext.cs
- SchemaImporter.cs
- CodeDirectionExpression.cs
- CompilerResults.cs
- TileBrush.cs
- WindowsToolbarItemAsMenuItem.cs
- CryptoApi.cs
- SpotLight.cs
- HwndKeyboardInputProvider.cs
- PasswordRecovery.cs
- WindowsGraphicsCacheManager.cs
- Clipboard.cs
- DoubleUtil.cs
- SystemPens.cs
- WinHttpWebProxyFinder.cs
- ResolveCriteriaApril2005.cs
- DesignerCalendarAdapter.cs
- GetPageCompletedEventArgs.cs
- TypeConverterAttribute.cs
- OpenCollectionAsyncResult.cs
- CustomValidator.cs
- RowsCopiedEventArgs.cs
- ServiceChannelManager.cs
- RootProjectionNode.cs
- WmpBitmapEncoder.cs
- CreateUserWizardAutoFormat.cs
- DispatcherProcessingDisabled.cs
- UDPClient.cs
- SubclassTypeValidator.cs
- ViewEventArgs.cs
- ConsumerConnectionPointCollection.cs
- HeaderCollection.cs
- IsolationInterop.cs
- SafeNativeMethods.cs