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
- InstanceDescriptor.cs
- SystemParameters.cs
- BufferedWebEventProvider.cs
- CommandTreeTypeHelper.cs
- SubpageParaClient.cs
- Transform.cs
- DataTableReader.cs
- ImageSource.cs
- ImportCatalogPart.cs
- PropertyTab.cs
- MultiSelectRootGridEntry.cs
- TaskHelper.cs
- MenuItemCollectionEditorDialog.cs
- AttachedPropertyBrowsableAttribute.cs
- InstanceOwnerException.cs
- URLMembershipCondition.cs
- DataGridViewTopLeftHeaderCell.cs
- PenLineJoinValidation.cs
- TableCell.cs
- WebPartConnectionsCancelVerb.cs
- PeerResolverMode.cs
- SqlXmlStorage.cs
- DescendantBaseQuery.cs
- StatusBar.cs
- XmlSerializerNamespaces.cs
- StrokeNodeOperations.cs
- Buffer.cs
- DataGridViewLinkCell.cs
- QueryOutputWriter.cs
- XamlTypeWithExplicitNamespace.cs
- EntityAdapter.cs
- DataServiceRequestException.cs
- TextEndOfParagraph.cs
- PieceDirectory.cs
- FixedSOMFixedBlock.cs
- RegisterResponseInfo.cs
- TimeSpanValidator.cs
- TextCharacters.cs
- panel.cs
- HttpHandlerActionCollection.cs
- wgx_render.cs
- HMAC.cs
- ControlPaint.cs
- PersonalizationProviderHelper.cs
- TokenBasedSetEnumerator.cs
- AsymmetricKeyExchangeDeformatter.cs
- RNGCryptoServiceProvider.cs
- DataListItemEventArgs.cs
- QuaternionValueSerializer.cs
- InputReport.cs
- UidPropertyAttribute.cs
- ToolStripProgressBar.cs
- sqlpipe.cs
- ConfigurationLocation.cs
- HttpStreamXmlDictionaryReader.cs
- SpeakCompletedEventArgs.cs
- FlagsAttribute.cs
- SharedConnectionListener.cs
- DispatchRuntime.cs
- LicenseException.cs
- DrawItemEvent.cs
- RawStylusInput.cs
- SafeSecurityHelper.cs
- DependentTransaction.cs
- documentation.cs
- InfocardInteractiveChannelInitializer.cs
- NotifyIcon.cs
- Stylesheet.cs
- ObjectCacheSettings.cs
- TextElementEnumerator.cs
- XsltSettings.cs
- NonBatchDirectoryCompiler.cs
- StatusStrip.cs
- EntityContainerRelationshipSet.cs
- WebPartVerb.cs
- ImageMetadata.cs
- XmlCDATASection.cs
- StrokeNodeOperations2.cs
- COM2FontConverter.cs
- UxThemeWrapper.cs
- MouseButton.cs
- DbConnectionStringBuilder.cs
- BuildManagerHost.cs
- Validator.cs
- JsonDeserializer.cs
- ModelTreeEnumerator.cs
- CodeTypeOfExpression.cs
- SQLDateTimeStorage.cs
- COSERVERINFO.cs
- DirectoryRedirect.cs
- SortExpressionBuilder.cs
- CrossAppDomainChannel.cs
- LabelLiteral.cs
- NumericUpDownAcceleration.cs
- FileSecurity.cs
- ContextCorrelationInitializer.cs
- EventRoute.cs
- RemotingConfigParser.cs
- ObjectStateManager.cs
- WebPartMinimizeVerb.cs