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
- Partitioner.cs
- dataprotectionpermission.cs
- PersonalizablePropertyEntry.cs
- AsyncStreamReader.cs
- X509Logo.cs
- SectionUpdates.cs
- DrawingContextDrawingContextWalker.cs
- WSSecurityOneDotOneReceiveSecurityHeader.cs
- OperationAbortedException.cs
- PrintingPermissionAttribute.cs
- WSSecurityXXX2005.cs
- AddInServer.cs
- SemanticAnalyzer.cs
- CultureTableRecord.cs
- PageThemeCodeDomTreeGenerator.cs
- CommonRemoteMemoryBlock.cs
- PrimitiveXmlSerializers.cs
- TraceEventCache.cs
- ServiceBuildProvider.cs
- ControllableStoryboardAction.cs
- MultilineStringConverter.cs
- Frame.cs
- Event.cs
- HttpWebResponse.cs
- AmbiguousMatchException.cs
- KeyTimeConverter.cs
- XPathMultyIterator.cs
- NativeCppClassAttribute.cs
- DeviceContext.cs
- SqlRetyper.cs
- BamlWriter.cs
- TreeNodeBindingCollection.cs
- XmlSchemaComplexContentRestriction.cs
- NodeFunctions.cs
- ExpandableObjectConverter.cs
- DropTarget.cs
- DayRenderEvent.cs
- InkCanvasSelection.cs
- UpdatePanel.cs
- TextElement.cs
- TypefaceCollection.cs
- HttpCapabilitiesEvaluator.cs
- ExclusiveCanonicalizationTransform.cs
- OracleConnectionFactory.cs
- LinkTarget.cs
- FixedHighlight.cs
- EdmTypeAttribute.cs
- OleTxTransaction.cs
- ISFTagAndGuidCache.cs
- DrawingContextDrawingContextWalker.cs
- OracleCommand.cs
- Button.cs
- Avt.cs
- SlotInfo.cs
- SystemSounds.cs
- OleAutBinder.cs
- BatchServiceHost.cs
- FileLevelControlBuilderAttribute.cs
- CompilerGeneratedAttribute.cs
- entitydatasourceentitysetnameconverter.cs
- PropertyEmitter.cs
- ToolStripItemRenderEventArgs.cs
- ValidateNames.cs
- SelectorAutomationPeer.cs
- BitmapEffect.cs
- EntityViewGenerationConstants.cs
- UpdatePanelControlTrigger.cs
- ProgressBarRenderer.cs
- CurrentChangingEventArgs.cs
- PeerIPHelper.cs
- EditorPart.cs
- BindingSource.cs
- PeerTransportListenAddressConverter.cs
- SimplePropertyEntry.cs
- App.cs
- ActionFrame.cs
- TextParagraph.cs
- GridProviderWrapper.cs
- RTTypeWrapper.cs
- OrCondition.cs
- AudioFormatConverter.cs
- DataGridViewColumnEventArgs.cs
- VersionedStreamOwner.cs
- BaseUriHelper.cs
- SafeEventLogWriteHandle.cs
- TextBoxAutoCompleteSourceConverter.cs
- UnhandledExceptionEventArgs.cs
- FunctionDetailsReader.cs
- Message.cs
- ArrayTypeMismatchException.cs
- StaticSiteMapProvider.cs
- AnimationException.cs
- SHA1CryptoServiceProvider.cs
- QueryOperationResponseOfT.cs
- SingleConverter.cs
- TypeForwardedToAttribute.cs
- PrintSchema.cs
- UrlRoutingModule.cs
- DynamicILGenerator.cs
- StorageAssociationSetMapping.cs