Code:
/ FXUpdate3074 / FXUpdate3074 / 1.1 / DEVDIV / depot / DevDiv / releases / whidbey / QFE / ndp / fx / src / xsp / System / Web / Configuration / StrongNameUtility.cs / 1 / StrongNameUtility.cs
//------------------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//-----------------------------------------------------------------------------
namespace System.Web.Configuration {
using System.Diagnostics;
using System.IO;
using System.Runtime.InteropServices;
using System.Security.Permissions;
internal class StrongNameUtility {
// Help class shouldn't be instantiated.
private StrongNameUtility() {
}
/// Free the buffer allocated by strong name functions
///
/// address of memory to free
[DllImport("mscoree.dll")]
internal extern static void StrongNameFreeBuffer(IntPtr pbMemory);
///
/// Return the last error
///
/// error information for the last strong name call
[DllImport("mscoree.dll")]
internal extern static int StrongNameErrorInfo();
///
/// Generate a new key pair for strong name use
///
/// desired key container name
/// flags
/// [out] generated public / private key blob
/// [out] size of the generated blob
/// true if the key was generated, false if there was an error
[DllImport("mscoree.dll")]
internal extern static bool StrongNameKeyGen([MarshalAs(UnmanagedType.LPWStr)]string wszKeyContainer,
uint dwFlags, [Out]out IntPtr ppbKeyBlob, [Out]out long pcbKeyBlob);
internal static bool GenerateStrongNameFile(string filename) {
// variables that hold the unmanaged key
IntPtr keyBlob = IntPtr.Zero;
long generatedSize = 0;
// create the key
bool createdKey = StrongNameKeyGen(null,
0 /*No flags. 1 is to save the key in the key container */,
out keyBlob, out generatedSize);
// if there was a problem, translate it and report it
if (!createdKey || keyBlob == IntPtr.Zero) {
throw Marshal.GetExceptionForHR(StrongNameErrorInfo());
}
try {
Debug.Assert(keyBlob != IntPtr.Zero);
// make sure the key size makes sense
Debug.Assert(generatedSize > 0 && generatedSize <= Int32.MaxValue);
if (generatedSize <= 0 || generatedSize > Int32.MaxValue) {
throw new InvalidOperationException(SR.GetString(SR.Browser_InvalidStrongNameKey));
}
// get the key into managed memory
byte[] key = new byte[generatedSize];
Marshal.Copy(keyBlob, key, 0, (int)generatedSize);
// write the key to the specified file
using (FileStream snkStream = new FileStream(filename, FileMode.Create, FileAccess.Write)) {
using (BinaryWriter snkWriter = new BinaryWriter(snkStream)) {
snkWriter.Write(key);
}
}
}
finally {
// release the unmanaged memory the key resides in
if (keyBlob != IntPtr.Zero) {
StrongNameFreeBuffer(keyBlob);
}
}
return true;
}
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.
//------------------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//-----------------------------------------------------------------------------
namespace System.Web.Configuration {
using System.Diagnostics;
using System.IO;
using System.Runtime.InteropServices;
using System.Security.Permissions;
internal class StrongNameUtility {
// Help class shouldn't be instantiated.
private StrongNameUtility() {
}
/// Free the buffer allocated by strong name functions
///
/// address of memory to free
[DllImport("mscoree.dll")]
internal extern static void StrongNameFreeBuffer(IntPtr pbMemory);
///
/// Return the last error
///
/// error information for the last strong name call
[DllImport("mscoree.dll")]
internal extern static int StrongNameErrorInfo();
///
/// Generate a new key pair for strong name use
///
/// desired key container name
/// flags
/// [out] generated public / private key blob
/// [out] size of the generated blob
/// true if the key was generated, false if there was an error
[DllImport("mscoree.dll")]
internal extern static bool StrongNameKeyGen([MarshalAs(UnmanagedType.LPWStr)]string wszKeyContainer,
uint dwFlags, [Out]out IntPtr ppbKeyBlob, [Out]out long pcbKeyBlob);
internal static bool GenerateStrongNameFile(string filename) {
// variables that hold the unmanaged key
IntPtr keyBlob = IntPtr.Zero;
long generatedSize = 0;
// create the key
bool createdKey = StrongNameKeyGen(null,
0 /*No flags. 1 is to save the key in the key container */,
out keyBlob, out generatedSize);
// if there was a problem, translate it and report it
if (!createdKey || keyBlob == IntPtr.Zero) {
throw Marshal.GetExceptionForHR(StrongNameErrorInfo());
}
try {
Debug.Assert(keyBlob != IntPtr.Zero);
// make sure the key size makes sense
Debug.Assert(generatedSize > 0 && generatedSize <= Int32.MaxValue);
if (generatedSize <= 0 || generatedSize > Int32.MaxValue) {
throw new InvalidOperationException(SR.GetString(SR.Browser_InvalidStrongNameKey));
}
// get the key into managed memory
byte[] key = new byte[generatedSize];
Marshal.Copy(keyBlob, key, 0, (int)generatedSize);
// write the key to the specified file
using (FileStream snkStream = new FileStream(filename, FileMode.Create, FileAccess.Write)) {
using (BinaryWriter snkWriter = new BinaryWriter(snkStream)) {
snkWriter.Write(key);
}
}
}
finally {
// release the unmanaged memory the key resides in
if (keyBlob != IntPtr.Zero) {
StrongNameFreeBuffer(keyBlob);
}
}
return true;
}
}
}
// 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
- ExtensionWindowResizeGrip.cs
- PolygonHotSpot.cs
- InvokeSchedule.cs
- Trace.cs
- RpcCryptoContext.cs
- WebControlsSection.cs
- EmbeddedMailObject.cs
- DesignerHierarchicalDataSourceView.cs
- SignedInfo.cs
- PrintController.cs
- Wildcard.cs
- WSHttpBindingBase.cs
- SecurityDescriptor.cs
- TypeGeneratedEventArgs.cs
- ManagementObjectCollection.cs
- StructuredTypeEmitter.cs
- CompiledIdentityConstraint.cs
- ReliableRequestSessionChannel.cs
- DynamicDataResources.Designer.cs
- AuthenticationService.cs
- SinglePhaseEnlistment.cs
- BounceEase.cs
- XsdDataContractExporter.cs
- AutoGeneratedFieldProperties.cs
- CorrelationQuery.cs
- OdbcTransaction.cs
- DataPagerFieldCommandEventArgs.cs
- MimeMultiPart.cs
- ResourceIDHelper.cs
- DataGridDefaultColumnWidthTypeConverter.cs
- DBBindings.cs
- WindowsScroll.cs
- ResourceProperty.cs
- BrushValueSerializer.cs
- ReflectionTypeLoadException.cs
- WorkItem.cs
- ToolboxCategory.cs
- KoreanLunisolarCalendar.cs
- ReadWriteObjectLock.cs
- sqlcontext.cs
- _IPv4Address.cs
- PaperSize.cs
- ConfigXmlSignificantWhitespace.cs
- ConfigurationSection.cs
- CustomErrorsSection.cs
- RoutedEventValueSerializer.cs
- RegexMatchCollection.cs
- HttpListenerContext.cs
- ClaimSet.cs
- ProfileManager.cs
- AddInStore.cs
- TriggerBase.cs
- DesignerProperties.cs
- UnsafeNetInfoNativeMethods.cs
- DatagridviewDisplayedBandsData.cs
- DesignTimeTemplateParser.cs
- CallbackValidator.cs
- GeneralTransform3D.cs
- PenContext.cs
- ReferenceService.cs
- GZipDecoder.cs
- BridgeDataReader.cs
- XmlResolver.cs
- ProviderCommandInfoUtils.cs
- BufferedWebEventProvider.cs
- ForceCopyBuildProvider.cs
- DetailsViewRowCollection.cs
- ByteRangeDownloader.cs
- EndPoint.cs
- DocumentSequence.cs
- LazyTextWriterCreator.cs
- BooleanFacetDescriptionElement.cs
- IndexedWhereQueryOperator.cs
- AnnotationHelper.cs
- MetadataCollection.cs
- autovalidator.cs
- RegexFCD.cs
- Schema.cs
- DataGridTable.cs
- AsnEncodedData.cs
- WeakEventTable.cs
- ConfigurationSettings.cs
- OracleParameter.cs
- HtmlInputImage.cs
- ResXFileRef.cs
- WSSecureConversation.cs
- OracleConnectionStringBuilder.cs
- Membership.cs
- DataContractAttribute.cs
- UnionExpr.cs
- ParserOptions.cs
- InstanceHandle.cs
- SchemaElementLookUpTableEnumerator.cs
- CompModSwitches.cs
- Tracking.cs
- EntityDataSourceWizardForm.cs
- ProcessModuleCollection.cs
- TextSelectionProcessor.cs
- IPAddressCollection.cs
- Int16Converter.cs