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
- MatcherBuilder.cs
- CommentEmitter.cs
- _SSPISessionCache.cs
- XPathScanner.cs
- IPCCacheManager.cs
- ParameterToken.cs
- CodeDirectiveCollection.cs
- FormViewInsertedEventArgs.cs
- TraceContextEventArgs.cs
- DataKeyCollection.cs
- SqlBulkCopy.cs
- DateTimePicker.cs
- ExtensionSurface.cs
- DataGridViewUtilities.cs
- SubqueryTrackingVisitor.cs
- Maps.cs
- AuthenticationModuleElementCollection.cs
- CssTextWriter.cs
- SQLInt32.cs
- CalendarDay.cs
- ExpressionBinding.cs
- StorageEntityTypeMapping.cs
- XmlConvert.cs
- ProtectedProviderSettings.cs
- InkCanvasSelection.cs
- ServiceMetadataExtension.cs
- BinaryFormatterSinks.cs
- TextClipboardData.cs
- Logging.cs
- OdbcRowUpdatingEvent.cs
- OrderByQueryOptionExpression.cs
- SafeNativeMethodsCLR.cs
- ExcludeFromCodeCoverageAttribute.cs
- PopupRoot.cs
- CheckBoxStandardAdapter.cs
- ListBoxItemAutomationPeer.cs
- IsolatedStoragePermission.cs
- BaseTemplateParser.cs
- PageCatalogPart.cs
- AnimatedTypeHelpers.cs
- FieldNameLookup.cs
- DbProviderManifest.cs
- ChtmlLinkAdapter.cs
- DataStreams.cs
- AssemblyAttributesGoHere.cs
- SessionEndedEventArgs.cs
- PersonalizationStateInfo.cs
- CodeTypeDeclarationCollection.cs
- Glyph.cs
- VSWCFServiceContractGenerator.cs
- InternalEnumValidatorAttribute.cs
- SpecularMaterial.cs
- DataTableNewRowEvent.cs
- Control.cs
- SignatureResourcePool.cs
- MetadataCacheItem.cs
- ExtenderControl.cs
- MailMessage.cs
- ObjectStorage.cs
- COSERVERINFO.cs
- PasswordRecovery.cs
- SqlConnectionManager.cs
- CodeTypeReferenceCollection.cs
- EmptyElement.cs
- CmsInterop.cs
- UIntPtr.cs
- PolicyLevel.cs
- FixedBufferAttribute.cs
- SqlDataSourceEnumerator.cs
- WebRequest.cs
- Byte.cs
- ReferenceEqualityComparer.cs
- BoundField.cs
- SchemaCollectionPreprocessor.cs
- RelationshipEndMember.cs
- StackOverflowException.cs
- NameValueCollection.cs
- Int32RectConverter.cs
- MultiByteCodec.cs
- DataGridViewCellMouseEventArgs.cs
- recordstatescratchpad.cs
- HyperLinkStyle.cs
- ThreadInterruptedException.cs
- ValidationError.cs
- SessionSwitchEventArgs.cs
- HtmlWindowCollection.cs
- DesignColumnCollection.cs
- BindableTemplateBuilder.cs
- RouteParser.cs
- CompositeControl.cs
- DependencyPropertyChangedEventArgs.cs
- SqlFlattener.cs
- WebBrowser.cs
- FastEncoderWindow.cs
- DesignerActionUIService.cs
- XmlSchemaAnnotation.cs
- BlurBitmapEffect.cs
- selecteditemcollection.cs
- OutputCacheSection.cs
- ArithmeticException.cs