Code:
/ WCF / WCF / 3.5.30729.1 / untmp / Orcas / SP / ndp / cdf / src / WCF / infocard / Service / managed / Microsoft / InfoCards / SafeRsaProviderHandle.cs / 1 / SafeRsaProviderHandle.cs
//------------------------------------------------------------------------------
// Copyright (c) Microsoft Corporation. All rights reserved.
//-----------------------------------------------------------------------------
namespace Microsoft.InfoCards
{
using System;
using System.ComponentModel;
using System.Globalization;
using System.Runtime.InteropServices;
using System.Runtime.ConstrainedExecution;
using System.Security;
using Microsoft.InfoCards.Diagnostics;
using IDT=Microsoft.InfoCards.Diagnostics.InfoCardTrace;
//
// Summary:
// Provides a wrapper over a handle retrieved by CryptAcquireContext
//
internal class SafeRsaProviderHandle : SafeHandle
{
[DllImport( "advapi32.dll",
EntryPoint ="CryptAcquireContextW",
CharSet = CharSet.Unicode,
ExactSpelling = true,
SetLastError = true ) ]
[SuppressUnmanagedCodeSecurity]
private static extern bool CryptAcquireContext(
[Out] out SafeRsaProviderHandle hProv,
[In] string pszContainer,
[In] string pszProvider,
[In] uint dwProvType,
[In] uint dwFlags );
[DllImport( "advapi32.dll",
EntryPoint = "CryptReleaseContext",
CharSet = CharSet.Unicode,
ExactSpelling = true,
SetLastError = true ) ]
[ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
[SuppressUnmanagedCodeSecurity]
private static extern bool CryptReleaseContext(
[In] IntPtr hProv,
[In] uint dwFlags );
public static SafeRsaProviderHandle Construct()
{
//
// The native provider we use to do encryption and decryption and associated constants to
// set up the Microsoft Enhanced RSA and AES provider
//
const uint CRYPT_VERIFYCONTEXT = 0xF0000000;
const byte PROV_RSA_AES = 24;
//
// We use a null provider and CRYPT_VERIFYCONTEXT as a flag
// to force the use of ephemeral keys. See http://support.microsoft.com/default.aspx?scid=kb%3Ben-us%3B238187
// for details.
//
SafeRsaProviderHandle h;
if( !SafeRsaProviderHandle.CryptAcquireContext( out h,
null,
null,
PROV_RSA_AES,
CRYPT_VERIFYCONTEXT ) )
{
Win32Exception e = new Win32Exception( Marshal.GetLastWin32Error() );
IDT.CloseInvalidOutSafeHandle(h);
IDT.TraceAndLogException( e );
throw IDT.ThrowHelperError( new CommunicationException( e.Message ) );
}
return h;
}
private SafeRsaProviderHandle() : base( IntPtr.Zero, true )
{
}
public override bool IsInvalid
{
get
{
return ( IntPtr.Zero == base.handle );
}
}
protected override bool ReleaseHandle()
{
#pragma warning suppress 56523
return CryptReleaseContext( base.handle, 0 );
}
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- PocoEntityKeyStrategy.cs
- WebBrowserNavigatedEventHandler.cs
- MarkupExtensionReturnTypeAttribute.cs
- SelectionChangedEventArgs.cs
- StaticResourceExtension.cs
- DataPagerFieldItem.cs
- OLEDB_Enum.cs
- BoundColumn.cs
- ScrollChrome.cs
- IResourceProvider.cs
- ButtonColumn.cs
- BindingElement.cs
- Trace.cs
- RadioButtonFlatAdapter.cs
- CodeCastExpression.cs
- XmlSchemaSet.cs
- Types.cs
- CopyCodeAction.cs
- Trace.cs
- XsltCompileContext.cs
- keycontainerpermission.cs
- DesignerLabelAdapter.cs
- DetailsViewPagerRow.cs
- SqlDataSourceConfigureFilterForm.cs
- MatcherBuilder.cs
- JpegBitmapDecoder.cs
- DataList.cs
- HttpListenerRequest.cs
- ControlType.cs
- RadioButtonPopupAdapter.cs
- DbProviderFactory.cs
- FacetChecker.cs
- SqlDependency.cs
- PageVisual.cs
- SqlTrackingService.cs
- FileSystemWatcher.cs
- XmlSchemaIdentityConstraint.cs
- KeyMatchBuilder.cs
- XmlLanguageConverter.cs
- QilInvoke.cs
- VisualTarget.cs
- NonVisualControlAttribute.cs
- PropertyEmitter.cs
- LexicalChunk.cs
- TableFieldsEditor.cs
- Int32Storage.cs
- Brush.cs
- COAUTHIDENTITY.cs
- ResolveMatchesApril2005.cs
- LabelEditEvent.cs
- EnvelopedSignatureTransform.cs
- SizeFConverter.cs
- KeyboardDevice.cs
- SpecularMaterial.cs
- UpdatePanelControlTrigger.cs
- XamlSerializerUtil.cs
- BufferAllocator.cs
- ParameterBinding.cs
- DateTimeConstantAttribute.cs
- xmlsaver.cs
- HandledMouseEvent.cs
- UnsafeNativeMethods.cs
- Path.cs
- LabelTarget.cs
- PersonalizableAttribute.cs
- DomainUpDown.cs
- BufferBuilder.cs
- PrtTicket_Public.cs
- StateBag.cs
- Screen.cs
- JsonFormatGeneratorStatics.cs
- PathSegmentCollection.cs
- Visual.cs
- ZipIOModeEnforcingStream.cs
- ToolStripRenderEventArgs.cs
- IntellisenseTextBox.designer.cs
- ExpressionEditorAttribute.cs
- Events.cs
- SingleSelectRootGridEntry.cs
- SspiNegotiationTokenAuthenticator.cs
- QuaternionConverter.cs
- FixedBufferAttribute.cs
- InvocationExpression.cs
- SqlTypesSchemaImporter.cs
- ManifestSignatureInformation.cs
- MSAANativeProvider.cs
- BaseTemplateBuildProvider.cs
- ThemeableAttribute.cs
- SystemMulticastIPAddressInformation.cs
- EntitySqlQueryState.cs
- XsltArgumentList.cs
- PersonalizationStateQuery.cs
- ProgressBarBrushConverter.cs
- WaitHandleCannotBeOpenedException.cs
- ConfigXmlElement.cs
- BufferedStream.cs
- Context.cs
- MessageHeaderDescriptionCollection.cs
- DesignSurfaceCollection.cs
- PropertyTabChangedEvent.cs