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
- HashCodeCombiner.cs
- StringConcat.cs
- CodeDirectiveCollection.cs
- EntitySqlQueryBuilder.cs
- TCPClient.cs
- SslStream.cs
- ArrayList.cs
- LocalValueEnumerator.cs
- ActivationServices.cs
- Package.cs
- WebControlToolBoxItem.cs
- FieldDescriptor.cs
- SingleAnimationBase.cs
- StorageAssociationSetMapping.cs
- StrokeDescriptor.cs
- PrintPreviewGraphics.cs
- QilPatternVisitor.cs
- TextureBrush.cs
- PropertyManager.cs
- XmlSiteMapProvider.cs
- ErrorWrapper.cs
- ApplicationId.cs
- TextTreeDeleteContentUndoUnit.cs
- XpsFixedDocumentReaderWriter.cs
- TraceData.cs
- DesignerLoader.cs
- HtmlDocument.cs
- DataBindingCollection.cs
- MsmqIntegrationProcessProtocolHandler.cs
- TcpWorkerProcess.cs
- FileDialog.cs
- DeclarationUpdate.cs
- Context.cs
- TableTextElementCollectionInternal.cs
- WorkflowViewManager.cs
- EmptyEnumerable.cs
- FloaterBaseParaClient.cs
- BindingExpression.cs
- StyleCollectionEditor.cs
- RegexReplacement.cs
- SoapRpcServiceAttribute.cs
- BufferModeSettings.cs
- RenderTargetBitmap.cs
- XmlUTF8TextReader.cs
- NativeCppClassAttribute.cs
- RootProfilePropertySettingsCollection.cs
- XmlSchemaGroup.cs
- AnnotationStore.cs
- RTTrackingProfile.cs
- ConsoleKeyInfo.cs
- FragmentQuery.cs
- XsltOutput.cs
- ExpressionCopier.cs
- MultiPropertyDescriptorGridEntry.cs
- SettingsProperty.cs
- DataAdapter.cs
- ImageListImageEditor.cs
- WorkflowRuntimeServicesBehavior.cs
- RelationshipConstraintValidator.cs
- RemotingException.cs
- SecurityPolicySection.cs
- Calendar.cs
- VisualStyleInformation.cs
- DerivedKeySecurityTokenStub.cs
- EndpointDesigner.cs
- AssociativeAggregationOperator.cs
- DataGridViewColumnCollectionEditor.cs
- ContentType.cs
- HitTestFilterBehavior.cs
- AttachmentService.cs
- SupportingTokenListenerFactory.cs
- CodeTypeMember.cs
- UnitControl.cs
- TextRangeBase.cs
- CodeDirectiveCollection.cs
- KeyTime.cs
- NativeWindow.cs
- COM2ICategorizePropertiesHandler.cs
- TheQuery.cs
- CrossSiteScriptingValidation.cs
- XPathConvert.cs
- SerializationException.cs
- DecoderFallback.cs
- XmlSerializerNamespaces.cs
- NativeRecognizer.cs
- ReferencedCollectionType.cs
- StatusBarPanel.cs
- MsdtcClusterUtils.cs
- ParameterToken.cs
- TaskExtensions.cs
- Stack.cs
- ReadOnlyDictionary.cs
- UnauthorizedWebPart.cs
- SHA512Managed.cs
- PropertyStore.cs
- SiteMembershipCondition.cs
- XmlSchemaElement.cs
- ClrPerspective.cs
- PrefixHandle.cs
- BeginStoryboard.cs