Code:
/ 4.0 / 4.0 / 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. //------------------------------------------------------------------------------ // 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
- InputLangChangeRequestEvent.cs
- SoapMessage.cs
- TopClause.cs
- DebugController.cs
- DataGridViewTopLeftHeaderCell.cs
- WebRequestModuleElement.cs
- AttachedAnnotation.cs
- PrintController.cs
- SymbolDocumentInfo.cs
- StaticExtensionConverter.cs
- AuthenticodeSignatureInformation.cs
- AttributeEmitter.cs
- InternalBufferManager.cs
- PersonalizationStateInfoCollection.cs
- XamlTypeMapper.cs
- QuaternionAnimation.cs
- AttributeInfo.cs
- ClosableStream.cs
- RadioButtonAutomationPeer.cs
- MatrixTransform.cs
- WindowsListViewItemCheckBox.cs
- MdiWindowListItemConverter.cs
- linebase.cs
- Comparer.cs
- Dynamic.cs
- AssemblyResourceLoader.cs
- ButtonBase.cs
- IPCCacheManager.cs
- DetailsViewRow.cs
- ComponentChangingEvent.cs
- QueryConverter.cs
- FieldAccessException.cs
- BoundsDrawingContextWalker.cs
- SoapProtocolReflector.cs
- FtpWebResponse.cs
- BindingWorker.cs
- DecoderReplacementFallback.cs
- DiagnosticTraceSource.cs
- Attributes.cs
- CompilationUtil.cs
- XmlSerializer.cs
- PreviewPageInfo.cs
- MULTI_QI.cs
- SqlAliaser.cs
- InputLanguageEventArgs.cs
- PropertyDescriptorComparer.cs
- ElementNotAvailableException.cs
- MenuItem.cs
- TypeUnloadedException.cs
- ProxyHwnd.cs
- BrowserCapabilitiesCodeGenerator.cs
- WebBaseEventKeyComparer.cs
- CatalogPartCollection.cs
- StackBuilderSink.cs
- TypedTableBaseExtensions.cs
- ObjectDataSourceMethodEditor.cs
- RijndaelManaged.cs
- Comparer.cs
- AuthenticationModuleElement.cs
- XmlQueryContext.cs
- FileFormatException.cs
- SmtpReplyReader.cs
- CodeDelegateCreateExpression.cs
- GetImportFileNameRequest.cs
- ScaleTransform3D.cs
- GAC.cs
- OleDbSchemaGuid.cs
- ServiceOperationWrapper.cs
- AttributeEmitter.cs
- RawStylusInputCustomDataList.cs
- CreateUserWizardAutoFormat.cs
- TraceProvider.cs
- RichTextBoxConstants.cs
- SoapAttributeAttribute.cs
- HwndSubclass.cs
- WebEventCodes.cs
- SimpleApplicationHost.cs
- InternalConfigSettingsFactory.cs
- SafeIUnknown.cs
- Rule.cs
- DynamicValueConverter.cs
- BlockUIContainer.cs
- SystemEvents.cs
- TagPrefixAttribute.cs
- SqlBuffer.cs
- DurationConverter.cs
- GcSettings.cs
- _DynamicWinsockMethods.cs
- FormViewUpdatedEventArgs.cs
- PermissionToken.cs
- DataSourceView.cs
- WebContext.cs
- Variable.cs
- RoamingStoreFileUtility.cs
- MemberHolder.cs
- SmiContext.cs
- COM2IPerPropertyBrowsingHandler.cs
- XmlSchemaGroup.cs
- FormViewDeletedEventArgs.cs
- PostBackOptions.cs