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
- AddInSegmentDirectoryNotFoundException.cs
- EntitySetDataBindingList.cs
- DependencyObjectValidator.cs
- EditorPart.cs
- AsyncCodeActivity.cs
- DateTimeOffset.cs
- EmbossBitmapEffect.cs
- UiaCoreProviderApi.cs
- XmlSchemaAppInfo.cs
- TextView.cs
- basecomparevalidator.cs
- Graph.cs
- Converter.cs
- FocusTracker.cs
- propertytag.cs
- GAC.cs
- TabPanel.cs
- CodeArgumentReferenceExpression.cs
- Maps.cs
- DiscoveryVersion.cs
- GeometryGroup.cs
- TypeResolver.cs
- FormViewPagerRow.cs
- TableDetailsRow.cs
- SoapHeaders.cs
- ToolStripScrollButton.cs
- XmlSchemaElement.cs
- OutOfMemoryException.cs
- MetadataPropertyvalue.cs
- SystemThemeKey.cs
- ProcessThreadCollection.cs
- MasterPage.cs
- EmptyEnumerator.cs
- HijriCalendar.cs
- NonClientArea.cs
- _ListenerRequestStream.cs
- Cursors.cs
- OdbcHandle.cs
- AncestorChangedEventArgs.cs
- PerspectiveCamera.cs
- PropertyMetadata.cs
- WebService.cs
- WebPartTransformerCollection.cs
- _NetworkingPerfCounters.cs
- HttpServerVarsCollection.cs
- QueryException.cs
- DesignOnlyAttribute.cs
- WaitHandle.cs
- FormsAuthentication.cs
- Opcode.cs
- EntityContainerEmitter.cs
- PropertyGridEditorPart.cs
- SQLCharsStorage.cs
- DbConnectionOptions.cs
- InvalidPrinterException.cs
- NameValueFileSectionHandler.cs
- ToolboxBitmapAttribute.cs
- DesignSurfaceManager.cs
- Metafile.cs
- ReflectionHelper.cs
- SqlProfileProvider.cs
- InsufficientMemoryException.cs
- WebPartManager.cs
- DiagnosticsConfigurationHandler.cs
- PnrpPermission.cs
- PrintPreviewControl.cs
- HighlightVisual.cs
- PrintingPermissionAttribute.cs
- WebPartDeleteVerb.cs
- SafeWaitHandle.cs
- StorageScalarPropertyMapping.cs
- FixUpCollection.cs
- BinaryQueryOperator.cs
- PartialCachingAttribute.cs
- TargetException.cs
- CaseExpr.cs
- DataGridViewCellValidatingEventArgs.cs
- ExpressionBindingsDialog.cs
- DateTimeStorage.cs
- PrimitiveType.cs
- Vector3DConverter.cs
- SessionStateUtil.cs
- X509ServiceCertificateAuthentication.cs
- CqlErrorHelper.cs
- WindowsScrollBarBits.cs
- ButtonStandardAdapter.cs
- SchemaComplexType.cs
- Point4D.cs
- EventSource.cs
- SqlParameterizer.cs
- LocalizationParserHooks.cs
- Misc.cs
- WindowsIdentity.cs
- StorageMappingItemCollection.cs
- ActivityDesigner.cs
- BypassElement.cs
- PolyQuadraticBezierSegment.cs
- ListViewInsertionMark.cs
- SQLMembershipProvider.cs
- TextOnlyOutput.cs