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
- SemanticAnalyzer.cs
- WindowsImpersonationContext.cs
- TableLayoutCellPaintEventArgs.cs
- FormsIdentity.cs
- DirectionalLight.cs
- Control.cs
- AccessDataSourceView.cs
- MsmqIntegrationProcessProtocolHandler.cs
- WebPartVerb.cs
- dbdatarecord.cs
- DragCompletedEventArgs.cs
- PointLightBase.cs
- MexHttpBindingCollectionElement.cs
- HyperLinkDataBindingHandler.cs
- DbFunctionCommandTree.cs
- DefaultAuthorizationContext.cs
- HMACSHA256.cs
- CorruptingExceptionCommon.cs
- TableLayoutPanelCellPosition.cs
- ReadOnlyDataSourceView.cs
- EntityDataSourceEntityTypeFilterItem.cs
- NativeCppClassAttribute.cs
- ToolTip.cs
- WebPartConnectionCollection.cs
- Rules.cs
- WebPartCatalogAddVerb.cs
- WorkflowValidationFailedException.cs
- SmiConnection.cs
- FontUnitConverter.cs
- NextPreviousPagerField.cs
- TransformerInfoCollection.cs
- ComponentResourceManager.cs
- TextParagraphCache.cs
- LabelAutomationPeer.cs
- VersionPair.cs
- CalendarDayButton.cs
- TraceHwndHost.cs
- WebSysDescriptionAttribute.cs
- GeneralTransform3DGroup.cs
- PowerStatus.cs
- FontStretchConverter.cs
- DataSourceSelectArguments.cs
- OutputCacheModule.cs
- TypeToStringValueConverter.cs
- ArcSegment.cs
- JsonFormatGeneratorStatics.cs
- HierarchicalDataBoundControlAdapter.cs
- ContentType.cs
- IdentityHolder.cs
- TrackingServices.cs
- VScrollProperties.cs
- SqlMethodTransformer.cs
- UpdateRecord.cs
- PageParserFilter.cs
- SubMenuStyle.cs
- EndOfStreamException.cs
- PrimarySelectionAdorner.cs
- WebEventCodes.cs
- XamlToRtfParser.cs
- HttpListenerRequest.cs
- EpmContentSerializerBase.cs
- PropertyKey.cs
- XmlSerializableWriter.cs
- StandardOleMarshalObject.cs
- SoapObjectInfo.cs
- GatewayIPAddressInformationCollection.cs
- AppDomainAttributes.cs
- ColorConverter.cs
- VersionPair.cs
- SchemaAttDef.cs
- DataSvcMapFileSerializer.cs
- InternalBufferManager.cs
- ComplexType.cs
- DefaultExpression.cs
- SqlMethodCallConverter.cs
- XmlName.cs
- KeyNotFoundException.cs
- StructuralObject.cs
- ToolStripScrollButton.cs
- InvokeProviderWrapper.cs
- ArraySegment.cs
- MethodCallConverter.cs
- ScriptIgnoreAttribute.cs
- SafeHandle.cs
- ConfigurationLockCollection.cs
- Line.cs
- LoginName.cs
- FileLoadException.cs
- ObjectDataProvider.cs
- XmlDocumentSerializer.cs
- SimplePropertyEntry.cs
- UIElementParaClient.cs
- AnnotationService.cs
- XMLSyntaxException.cs
- PersonalizationState.cs
- SafeRsaProviderHandle.cs
- Properties.cs
- ReflectionTypeLoadException.cs
- BasicViewGenerator.cs
- SecurityDescriptor.cs