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
- SoapObjectInfo.cs
- MarkupCompilePass1.cs
- CompositeDesignerAccessibleObject.cs
- TextUtf8RawTextWriter.cs
- Matrix.cs
- XamlReaderHelper.cs
- ListViewPagedDataSource.cs
- DbReferenceCollection.cs
- Material.cs
- FileLogRecord.cs
- AnnotationHighlightLayer.cs
- MergablePropertyAttribute.cs
- RC2CryptoServiceProvider.cs
- CLRBindingWorker.cs
- XhtmlConformanceSection.cs
- NavigatorOutput.cs
- DetailsViewPagerRow.cs
- PropertyToken.cs
- NamespaceDecl.cs
- TemplateBamlTreeBuilder.cs
- HtmlGenericControl.cs
- SettingsProviderCollection.cs
- DeploymentSection.cs
- Freezable.cs
- ByteStorage.cs
- XmlDataDocument.cs
- SpeechAudioFormatInfo.cs
- Pair.cs
- StateRuntime.cs
- EmptyEnumerable.cs
- ObjectStateEntryBaseUpdatableDataRecord.cs
- SemanticAnalyzer.cs
- UnauthorizedAccessException.cs
- AudioDeviceOut.cs
- SEHException.cs
- FixedTextContainer.cs
- SqlBuffer.cs
- HashSetDebugView.cs
- ToolStripDropDownItem.cs
- TextServicesCompartment.cs
- OutputCache.cs
- XsdBuilder.cs
- DataSourceSelectArguments.cs
- ScriptingRoleServiceSection.cs
- DataSvcMapFile.cs
- Soap.cs
- Bitmap.cs
- Subtree.cs
- PropertyItem.cs
- NameValueCache.cs
- ByteStreamGeometryContext.cs
- DataContractJsonSerializer.cs
- ProfessionalColors.cs
- TemplateColumn.cs
- DataContractAttribute.cs
- DataRowCollection.cs
- AmbientProperties.cs
- SQLResource.cs
- CodeArgumentReferenceExpression.cs
- HitTestParameters3D.cs
- TransformValueSerializer.cs
- ManagementOperationWatcher.cs
- SafeRegistryHandle.cs
- Semaphore.cs
- MatrixCamera.cs
- BamlBinaryReader.cs
- QueryParameter.cs
- FontWeightConverter.cs
- InfoCardTrace.cs
- LayoutEvent.cs
- ContentIterators.cs
- GlobalizationAssembly.cs
- ToolStripButton.cs
- ScriptIgnoreAttribute.cs
- NavigationCommands.cs
- ExtensionQuery.cs
- StrokeIntersection.cs
- ColumnReorderedEventArgs.cs
- DummyDataSource.cs
- LocalValueEnumerator.cs
- GridViewCancelEditEventArgs.cs
- AsyncResult.cs
- RelationshipWrapper.cs
- ToolStripSeparator.cs
- NotCondition.cs
- IEnumerable.cs
- DialogDivider.cs
- SerTrace.cs
- TableRow.cs
- ContainerParagraph.cs
- SessionStateSection.cs
- WebPartTransformerCollection.cs
- XamlStream.cs
- NameObjectCollectionBase.cs
- RenderOptions.cs
- ConstructorNeedsTagAttribute.cs
- WorkflowTraceTransfer.cs
- UrlMapping.cs
- DesignerDataTableBase.cs
- Converter.cs