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
- InvocationExpression.cs
- entityreference_tresulttype.cs
- MarginCollapsingState.cs
- SqlDataSource.cs
- HebrewNumber.cs
- ProviderConnectionPoint.cs
- Operator.cs
- CreateRefExpr.cs
- GatewayIPAddressInformationCollection.cs
- DrawingContextWalker.cs
- HierarchicalDataBoundControl.cs
- XmlSiteMapProvider.cs
- ManifestResourceInfo.cs
- DataGridViewRowCancelEventArgs.cs
- LogicalExpr.cs
- Vector.cs
- BlockCollection.cs
- RequestCacheValidator.cs
- SqlDataSourceView.cs
- ListViewGroupItemCollection.cs
- ZipIOFileItemStream.cs
- DeploymentExceptionMapper.cs
- LabelDesigner.cs
- RoutedPropertyChangedEventArgs.cs
- ReadOnlyState.cs
- PermissionAttributes.cs
- StickyNoteHelper.cs
- DateTimeConstantAttribute.cs
- CommonDialog.cs
- FontCacheUtil.cs
- ScrollableControl.cs
- BindableTemplateBuilder.cs
- XPathQilFactory.cs
- CssStyleCollection.cs
- ExtensionDataObject.cs
- SystemFonts.cs
- PrintPreviewGraphics.cs
- MenuItemBindingCollection.cs
- DataGridItem.cs
- PartialList.cs
- TypeResolvingOptions.cs
- ImageButton.cs
- Helper.cs
- Bidi.cs
- InputScope.cs
- TableDetailsRow.cs
- EffectiveValueEntry.cs
- ExpandSegment.cs
- EmptyCollection.cs
- WebBrowserSiteBase.cs
- LinqExpressionNormalizer.cs
- ExpressionEditorAttribute.cs
- OracleNumber.cs
- UpdatePanelTriggerCollection.cs
- XPathItem.cs
- SerializeAbsoluteContext.cs
- RelationalExpressions.cs
- NotCondition.cs
- CompModSwitches.cs
- FrugalMap.cs
- MappingMetadataHelper.cs
- EntityDataSource.cs
- ProxyGenerator.cs
- ThreadLocal.cs
- ProjectionCamera.cs
- ManagementOperationWatcher.cs
- PathSegmentCollection.cs
- PropertyMappingExceptionEventArgs.cs
- WindowsBrush.cs
- GridViewColumnCollection.cs
- NameValueConfigurationElement.cs
- PointCollectionValueSerializer.cs
- HtmlElementEventArgs.cs
- ReachSerializationUtils.cs
- MemoryStream.cs
- ContainerVisual.cs
- PeerApplicationLaunchInfo.cs
- HybridDictionary.cs
- RefreshResponseInfo.cs
- SessionPageStatePersister.cs
- HotCommands.cs
- TableLayout.cs
- UpdateCommand.cs
- TemplateKeyConverter.cs
- RequestNavigateEventArgs.cs
- HTTPNotFoundHandler.cs
- TimeManager.cs
- FontEmbeddingManager.cs
- ObjectSecurity.cs
- HelpProvider.cs
- XmlNamespaceDeclarationsAttribute.cs
- ParameterReplacerVisitor.cs
- DataFormats.cs
- ImageButton.cs
- MembershipValidatePasswordEventArgs.cs
- InProcStateClientManager.cs
- XPathNode.cs
- RemoteDebugger.cs
- HandlerFactoryWrapper.cs
- MemberRelationshipService.cs