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
- DataObjectCopyingEventArgs.cs
- TextSelectionHighlightLayer.cs
- SecurityDescriptor.cs
- GridViewCommandEventArgs.cs
- BooleanExpr.cs
- CodeAttachEventStatement.cs
- WebPartAuthorizationEventArgs.cs
- FileVersion.cs
- EncryptedPackageFilter.cs
- DateTimeSerializationSection.cs
- ImageAutomationPeer.cs
- CompositeFontFamily.cs
- LineMetrics.cs
- StylusPointPropertyInfoDefaults.cs
- FieldBuilder.cs
- HandlerBase.cs
- CopyCodeAction.cs
- DecimalFormatter.cs
- ByteStorage.cs
- RuleSetCollection.cs
- ResXResourceReader.cs
- Style.cs
- PopupRootAutomationPeer.cs
- XmlQueryRuntime.cs
- MainMenu.cs
- StrokeCollectionConverter.cs
- HandoffBehavior.cs
- DataControlPagerLinkButton.cs
- WebPartVerbCollection.cs
- CryptoProvider.cs
- SSmlParser.cs
- ReferencedAssemblyResolver.cs
- DiscardableAttribute.cs
- CodeSpit.cs
- Timer.cs
- RuleSetBrowserDialog.cs
- ResXBuildProvider.cs
- WorkflowServiceNamespace.cs
- WebPartManager.cs
- EmptyQuery.cs
- _ListenerRequestStream.cs
- PageWrapper.cs
- TypeConverterHelper.cs
- KerberosTicketHashIdentifierClause.cs
- NameNode.cs
- StylusTouchDevice.cs
- SqlUserDefinedAggregateAttribute.cs
- DbgUtil.cs
- Point3DAnimationBase.cs
- ManagedIStream.cs
- ActivityWithResultWrapper.cs
- GenericTypeParameterBuilder.cs
- EntityDataSourceUtil.cs
- EntityFunctions.cs
- UnsafeNativeMethods.cs
- DoubleAnimation.cs
- EmptyCollection.cs
- InheritanceService.cs
- TreeNodeCollection.cs
- ECDsa.cs
- TreeChangeInfo.cs
- TraceUtility.cs
- BindUriHelper.cs
- AsyncInvokeContext.cs
- WorkflowValidationFailedException.cs
- XmlEventCache.cs
- DelegateTypeInfo.cs
- DrawingImage.cs
- ValueUtilsSmi.cs
- XNodeNavigator.cs
- DataAdapter.cs
- FrameworkElementAutomationPeer.cs
- OutputCacheSettingsSection.cs
- InvalidWMPVersionException.cs
- ToolStripItemTextRenderEventArgs.cs
- WindowsSysHeader.cs
- XmlSchemaSet.cs
- JoinCqlBlock.cs
- ThrowHelper.cs
- UnaryQueryOperator.cs
- CallContext.cs
- FlowDocumentFormatter.cs
- AlphabeticalEnumConverter.cs
- COM2ExtendedBrowsingHandler.cs
- CRYPTPROTECT_PROMPTSTRUCT.cs
- PreservationFileWriter.cs
- DbConnectionPoolOptions.cs
- SharedPersonalizationStateInfo.cs
- ButtonChrome.cs
- HttpCacheVary.cs
- ServicePoint.cs
- Camera.cs
- HyperLinkDataBindingHandler.cs
- BuilderInfo.cs
- cookie.cs
- JournalEntry.cs
- TreeNodeMouseHoverEvent.cs
- GifBitmapDecoder.cs
- followingquery.cs
- DataGridViewMethods.cs