Code:
/ WCF / WCF / 3.5.30729.1 / untmp / Orcas / SP / ndp / cdf / src / WCF / IdentityModel / System / IdentityModel / SafeCryptHandles.cs / 1 / 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. // Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- XmlDataDocument.cs
- FormViewUpdatedEventArgs.cs
- AppDomain.cs
- Vector3DValueSerializer.cs
- GradientBrush.cs
- PtsHelper.cs
- GetPageCompletedEventArgs.cs
- AttributeUsageAttribute.cs
- Message.cs
- DataTablePropertyDescriptor.cs
- ImageSource.cs
- LocalizationParserHooks.cs
- DataBoundLiteralControl.cs
- TextServicesCompartment.cs
- ContentControl.cs
- FactoryGenerator.cs
- ProjectedSlot.cs
- HierarchicalDataBoundControl.cs
- DataBindingExpressionBuilder.cs
- SimplePropertyEntry.cs
- DrawingCollection.cs
- InputBuffer.cs
- ServiceManager.cs
- TypeForwardedFromAttribute.cs
- EditingCoordinator.cs
- AlignmentYValidation.cs
- Deserializer.cs
- StringHelper.cs
- XamlVector3DCollectionSerializer.cs
- RC2.cs
- WebPartEditorApplyVerb.cs
- PropertyCondition.cs
- OleDbSchemaGuid.cs
- RegexMatchCollection.cs
- Int16Animation.cs
- LayoutTableCell.cs
- StateChangeEvent.cs
- RegexReplacement.cs
- dataobject.cs
- HtmlElementErrorEventArgs.cs
- ServiceThrottlingBehavior.cs
- NameValueSectionHandler.cs
- DbConnectionClosed.cs
- DataGridColumnEventArgs.cs
- PaintValueEventArgs.cs
- OutOfMemoryException.cs
- XmlExpressionDumper.cs
- WebPartEditorOkVerb.cs
- BaseAddressElement.cs
- DataGridViewRowCancelEventArgs.cs
- dbenumerator.cs
- Size3D.cs
- StickyNoteAnnotations.cs
- TypeLoadException.cs
- EntityEntry.cs
- Cursors.cs
- OracleCommandSet.cs
- DetailsViewModeEventArgs.cs
- TreeNodeBinding.cs
- PropertyChange.cs
- CapiSymmetricAlgorithm.cs
- DBDataPermissionAttribute.cs
- TextAction.cs
- DispatcherSynchronizationContext.cs
- Pkcs7Recipient.cs
- CanonicalFontFamilyReference.cs
- File.cs
- XamlWriter.cs
- MetadataItem.cs
- FrameworkTextComposition.cs
- XmlSchemaAnyAttribute.cs
- ReadOnlyHierarchicalDataSourceView.cs
- EdmFunction.cs
- FileFormatException.cs
- HealthMonitoringSection.cs
- CaseInsensitiveComparer.cs
- BitmapMetadata.cs
- TranslateTransform3D.cs
- PolyBezierSegment.cs
- SystemBrushes.cs
- HyperLinkField.cs
- LongMinMaxAggregationOperator.cs
- AttributeInfo.cs
- ReaderWriterLock.cs
- MultiPartWriter.cs
- BindToObject.cs
- altserialization.cs
- PolygonHotSpot.cs
- MetafileHeaderWmf.cs
- RMPublishingDialog.cs
- EditorOptionAttribute.cs
- StorageScalarPropertyMapping.cs
- Int32AnimationUsingKeyFrames.cs
- EventEntry.cs
- ServiceNameElement.cs
- WindowsAuthenticationEventArgs.cs
- UnknownWrapper.cs
- IsolatedStorageException.cs
- Binding.cs
- SimpleRecyclingCache.cs