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
- ActivityWithResultValueSerializer.cs
- LockRenewalTask.cs
- EncryptedData.cs
- CompiledRegexRunnerFactory.cs
- EFAssociationProvider.cs
- SqlRemoveConstantOrderBy.cs
- StsCommunicationException.cs
- SecurityProtocolFactory.cs
- SecurityElement.cs
- TableRowGroup.cs
- ValueType.cs
- ObjectDataSourceMethodEventArgs.cs
- LoginUtil.cs
- Fonts.cs
- Material.cs
- TransformPattern.cs
- CryptoSession.cs
- InputChannelAcceptor.cs
- BrowserDefinitionCollection.cs
- LinqDataSourceSelectEventArgs.cs
- InputMethodStateChangeEventArgs.cs
- Section.cs
- _HelperAsyncResults.cs
- counter.cs
- WindowsServiceElement.cs
- ViewLoader.cs
- BuildProviderUtils.cs
- WindowsAuthenticationEventArgs.cs
- Calendar.cs
- WorkflowFileItem.cs
- ReadOnlyMetadataCollection.cs
- SchemaExporter.cs
- ToolStripSplitButton.cs
- TargetConverter.cs
- SmtpLoginAuthenticationModule.cs
- TriggerActionCollection.cs
- XmlEventCache.cs
- PropertyCollection.cs
- PassportIdentity.cs
- XmlAttributeProperties.cs
- ObjectViewQueryResultData.cs
- ComEventsSink.cs
- DataGridColumnHeaderCollection.cs
- CodeBlockBuilder.cs
- BamlCollectionHolder.cs
- StateDesigner.TransitionInfo.cs
- DataGridViewIntLinkedList.cs
- EmptyControlCollection.cs
- WebPart.cs
- SourceSwitch.cs
- DynamicObjectAccessor.cs
- GroupItemAutomationPeer.cs
- OpCellTreeNode.cs
- PageCache.cs
- SystemWebCachingSectionGroup.cs
- TypeLibraryHelper.cs
- ConstraintManager.cs
- Size3D.cs
- DecimalStorage.cs
- InvokeMethodActivity.cs
- BindStream.cs
- OleDbConnectionFactory.cs
- ListViewItemSelectionChangedEvent.cs
- ColorTransformHelper.cs
- HTMLTextWriter.cs
- BidOverLoads.cs
- HTTPNotFoundHandler.cs
- PersonalizationStateInfo.cs
- CryptoApi.cs
- AttributeSetAction.cs
- ToggleButton.cs
- _CookieModule.cs
- RenderingBiasValidation.cs
- CqlIdentifiers.cs
- GenericParameterDataContract.cs
- ReaderWriterLockWrapper.cs
- BeginGetFileNameFromUserRequest.cs
- FunctionDetailsReader.cs
- RuntimeConfigLKG.cs
- RadioButtonRenderer.cs
- NetworkCredential.cs
- MSHTMLHostUtil.cs
- translator.cs
- DataGridViewLinkCell.cs
- XmlNotation.cs
- _TransmitFileOverlappedAsyncResult.cs
- _UriSyntax.cs
- OracleDataAdapter.cs
- HybridObjectCache.cs
- DefaultPrintController.cs
- DoubleLinkList.cs
- SchemaNames.cs
- Random.cs
- WebControlParameterProxy.cs
- HostedNamedPipeTransportManager.cs
- TreeBuilderXamlTranslator.cs
- Range.cs
- Int32EqualityComparer.cs
- Process.cs
- PrimarySelectionGlyph.cs