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
- MethodToken.cs
- XPathAncestorQuery.cs
- BackgroundWorker.cs
- Emitter.cs
- WSSecurityPolicy11.cs
- ResourcesBuildProvider.cs
- BitmapFrame.cs
- DataSourceControlBuilder.cs
- TypeSchema.cs
- MediaSystem.cs
- CodeMemberMethod.cs
- NameValuePermission.cs
- ControlDesignerState.cs
- RegexGroupCollection.cs
- ConnectionPoint.cs
- PropertyGroupDescription.cs
- CodePageUtils.cs
- ExpressionBuilderContext.cs
- CodeRemoveEventStatement.cs
- AttributeCollection.cs
- RootBrowserWindow.cs
- HandleRef.cs
- ExtractorMetadata.cs
- ConfigurationPropertyCollection.cs
- ProviderManager.cs
- FamilyTypeface.cs
- SendMailErrorEventArgs.cs
- Object.cs
- CategoryGridEntry.cs
- SizeConverter.cs
- TransformProviderWrapper.cs
- LocalizableAttribute.cs
- DbMetaDataCollectionNames.cs
- Separator.cs
- Operator.cs
- DockPatternIdentifiers.cs
- XmlBoundElement.cs
- SafeArrayTypeMismatchException.cs
- FragmentQueryKB.cs
- SecurityKeyIdentifierClause.cs
- RootProfilePropertySettingsCollection.cs
- RelationshipConverter.cs
- NameValueConfigurationCollection.cs
- SecurityContextSecurityTokenAuthenticator.cs
- AnnotationAdorner.cs
- TriState.cs
- IISUnsafeMethods.cs
- SerializerDescriptor.cs
- StreamAsIStream.cs
- ProfessionalColorTable.cs
- LogicalTreeHelper.cs
- PagePropertiesChangingEventArgs.cs
- Timer.cs
- BadImageFormatException.cs
- UserPreferenceChangedEventArgs.cs
- TypeConverterHelper.cs
- TagMapInfo.cs
- ContentTextAutomationPeer.cs
- XmlTypeAttribute.cs
- ThemeDictionaryExtension.cs
- FormViewModeEventArgs.cs
- OleDbParameter.cs
- LinqDataSourceContextEventArgs.cs
- SymbolEqualComparer.cs
- CreateSequence.cs
- DbCommandDefinition.cs
- CatalogPartCollection.cs
- ProtocolsConfigurationHandler.cs
- WebPartUserCapability.cs
- Panel.cs
- GlobalProxySelection.cs
- CharConverter.cs
- CategoryAttribute.cs
- RegistrySecurity.cs
- WebHttpSecurity.cs
- Metafile.cs
- ProjectionCamera.cs
- WindowsImpersonationContext.cs
- UidManager.cs
- CngKeyBlobFormat.cs
- ScriptBehaviorDescriptor.cs
- PaperSource.cs
- TransactedReceiveScope.cs
- TableColumn.cs
- DependentList.cs
- TableCell.cs
- BindableTemplateBuilder.cs
- DrawingContextWalker.cs
- x509utils.cs
- StateManager.cs
- DropSource.cs
- TypeConverterHelper.cs
- GeometryGroup.cs
- VirtualizedItemPattern.cs
- CodeTypeConstructor.cs
- AutomationProperties.cs
- BamlRecordReader.cs
- CompilationSection.cs
- WsrmMessageInfo.cs
- Vector3DConverter.cs