Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / cdf / src / WCF / IdentityModel / System / IdentityModel / SafeCryptHandles.cs / 1305376 / SafeCryptHandles.cs
//------------------------------------------------------------------------------ // Copyright (c) Microsoft Corporation. All rights reserved. //----------------------------------------------------------------------------- namespace System.IdentityModel { using System.ComponentModel; using System.Runtime.InteropServices; using System.Runtime.CompilerServices; using System.Runtime.ConstrainedExecution; using System.Security.Cryptography; using System.ServiceModel.Diagnostics; using Microsoft.Win32.SafeHandles; class SafeProvHandle : SafeHandleZeroOrMinusOneIsInvalid { SafeProvHandle() : base(true) { } // 0 is an Invalid Handle SafeProvHandle(IntPtr handle) : base(true) { DiagnosticUtility.DebugAssert(handle == IntPtr.Zero, "SafeProvHandle constructor can only be called with IntPtr.Zero."); SetHandle(handle); } internal static SafeProvHandle InvalidHandle { get { return new SafeProvHandle(IntPtr.Zero); } } protected override bool ReleaseHandle() { // PreSharp Bug: Call 'Marshal.GetLastWin32Error' or 'Marshal.GetHRForLastWin32Error' before any other interop call. #pragma warning suppress 56523 // We are not interested in throwing an exception here if CloseHandle fails. return NativeMethods.CryptReleaseContext(handle, 0); } } class SafeKeyHandle : SafeHandleZeroOrMinusOneIsInvalid { SafeProvHandle provHandle = null; SafeKeyHandle() : base(true) { } // 0 is an Invalid Handle SafeKeyHandle(IntPtr handle) : base(true) { DiagnosticUtility.DebugAssert(handle == IntPtr.Zero, "SafeKeyHandle constructor can only be called with IntPtr.Zero."); SetHandle(handle); } internal static SafeKeyHandle InvalidHandle { get { return new SafeKeyHandle(IntPtr.Zero); } } protected override bool ReleaseHandle() { // PreSharp Bug: Call 'Marshal.GetLastWin32Error' or 'Marshal.GetHRForLastWin32Error' before any other interop call. #pragma warning suppress 56523 // We are not interested in throwing an exception here if CloseHandle fails. bool ret = NativeMethods.CryptDestroyKey(handle); if (this.provHandle != null) { this.provHandle.DangerousRelease(); this.provHandle = null; } return ret; } internal static unsafe SafeKeyHandle SafeCryptImportKey(SafeProvHandle provHandle, void* pbDataPtr, int cbData) { bool b = false; int err = 0; SafeKeyHandle keyHandle = null; RuntimeHelpers.PrepareConstrainedRegions(); try { provHandle.DangerousAddRef(ref b); } catch (Exception e) { if (b) { provHandle.DangerousRelease(); b = false; } if (!(e is ObjectDisposedException)) throw; } finally { if (b) { b = NativeMethods.CryptImportKey(provHandle, pbDataPtr, (uint)cbData, IntPtr.Zero, 0, out keyHandle); if (!b) { err = Marshal.GetLastWin32Error(); provHandle.DangerousRelease(); } else { // Take ownership of AddRef. Will Release at Close. keyHandle.provHandle = provHandle; } } } if (!b) { Utility.CloseInvalidOutSafeHandle(keyHandle); string reason = (err != 0) ? new Win32Exception(err).Message : String.Empty; throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new CryptographicException(SR.GetString(SR.AESCryptImportKeyFailed, reason))); } return keyHandle; } } } // 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
- ControlPaint.cs
- AttachedPropertyBrowsableForTypeAttribute.cs
- CompareValidator.cs
- SqlBulkCopyColumnMapping.cs
- CheckBoxFlatAdapter.cs
- EntityType.cs
- CodeArrayCreateExpression.cs
- VSDExceptions.cs
- AuthorizationPolicyTypeElement.cs
- DbParameterHelper.cs
- Setter.cs
- ThemeDictionaryExtension.cs
- Debug.cs
- MergablePropertyAttribute.cs
- TypeConverterAttribute.cs
- ComplexTypeEmitter.cs
- WindowsIdentity.cs
- RbTree.cs
- SslStream.cs
- WebPartMinimizeVerb.cs
- FileLoadException.cs
- FlagsAttribute.cs
- Brushes.cs
- C14NUtil.cs
- Scripts.cs
- CriticalFinalizerObject.cs
- MethodSet.cs
- SqlInternalConnectionSmi.cs
- SizeAnimationClockResource.cs
- ClientApiGenerator.cs
- ObjectItemCollection.cs
- EntityTemplateUserControl.cs
- WebServiceMethodData.cs
- EntityDataSource.cs
- Convert.cs
- MissingSatelliteAssemblyException.cs
- WebPartZone.cs
- TreeViewItem.cs
- SqlConnectionFactory.cs
- DataKey.cs
- XmlnsCache.cs
- EntityDataSourceQueryBuilder.cs
- ValidatingReaderNodeData.cs
- XmlUrlResolver.cs
- MiniCustomAttributeInfo.cs
- Point3D.cs
- SchemaMerger.cs
- GridView.cs
- ActivityStatusChangeEventArgs.cs
- SetterTriggerConditionValueConverter.cs
- XmlSerializerFactory.cs
- ButtonField.cs
- WebPartAddingEventArgs.cs
- ServiceHostingEnvironmentSection.cs
- SecurityAppliedMessage.cs
- CompareInfo.cs
- ConfigurationPropertyCollection.cs
- AnimationClockResource.cs
- DoubleCollection.cs
- FontUnit.cs
- _ListenerRequestStream.cs
- Lazy.cs
- PrePrepareMethodAttribute.cs
- StretchValidation.cs
- DataServiceExpressionVisitor.cs
- ArcSegment.cs
- StreamInfo.cs
- TraceContext.cs
- EntityTypeBase.cs
- Error.cs
- BooleanProjectedSlot.cs
- SessionSwitchEventArgs.cs
- FrameAutomationPeer.cs
- Table.cs
- TypeInitializationException.cs
- Stylus.cs
- DataGridViewRowsAddedEventArgs.cs
- XmlDeclaration.cs
- RoleManagerModule.cs
- COM2Enum.cs
- MemoryPressure.cs
- OleDbCommand.cs
- TextLine.cs
- XmlTextReaderImplHelpers.cs
- TransportListener.cs
- AnimatedTypeHelpers.cs
- Group.cs
- Native.cs
- AppSettingsExpressionBuilder.cs
- EastAsianLunisolarCalendar.cs
- HttpCachePolicy.cs
- Cursors.cs
- ObjectAnimationBase.cs
- RenderData.cs
- FilteredAttributeCollection.cs
- DictionaryCustomTypeDescriptor.cs
- Tuple.cs
- OperatingSystem.cs
- PhotoPrintingIntent.cs
- WriteTimeStream.cs