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
- FontFamilyValueSerializer.cs
- CursorInteropHelper.cs
- HtmlSelect.cs
- ReadOnlyDataSourceView.cs
- OutputCacheProfile.cs
- StringFreezingAttribute.cs
- DependencyPropertyKind.cs
- EntityViewGenerationConstants.cs
- ImpersonationOption.cs
- PenContexts.cs
- StringBuilder.cs
- ServiceReference.cs
- ResourceDescriptionAttribute.cs
- CharacterHit.cs
- EventSetter.cs
- CustomErrorsSectionWrapper.cs
- ListViewItem.cs
- ClientScriptManager.cs
- BasicBrowserDialog.cs
- ThreadInterruptedException.cs
- UdpChannelListener.cs
- RemoveStoryboard.cs
- Scripts.cs
- Event.cs
- CodeConditionStatement.cs
- ProxyElement.cs
- VersionedStreamOwner.cs
- TypeKeyValue.cs
- Pair.cs
- MenuAdapter.cs
- Win32.cs
- XmlnsCache.cs
- FixedSOMLineRanges.cs
- XmlConvert.cs
- SafeRegistryKey.cs
- DoubleLink.cs
- COM2Properties.cs
- StrokeCollectionConverter.cs
- PageStatePersister.cs
- Image.cs
- WebPartDeleteVerb.cs
- InkCollectionBehavior.cs
- TraceEventCache.cs
- DiscoveryReferences.cs
- SqlBuilder.cs
- SplitterPanel.cs
- Util.cs
- XmlDataLoader.cs
- TextFindEngine.cs
- Connector.xaml.cs
- SafeProcessHandle.cs
- DataGridViewDataConnection.cs
- CompilationLock.cs
- GrammarBuilderRuleRef.cs
- JsonCollectionDataContract.cs
- XmlSchemaImporter.cs
- ToolBarButtonClickEvent.cs
- OpCopier.cs
- Delegate.cs
- SchemaImporter.cs
- COM2FontConverter.cs
- DataGridViewLinkCell.cs
- WindowsComboBox.cs
- ActivityLocationReferenceEnvironment.cs
- HtmlSelectionListAdapter.cs
- WhitespaceRuleLookup.cs
- VectorConverter.cs
- DelegatedStream.cs
- HelpProvider.cs
- ContentPresenter.cs
- TreeNodeConverter.cs
- externdll.cs
- PeerToPeerException.cs
- BindingCompleteEventArgs.cs
- CodeDomLoader.cs
- SecurityContextTokenValidationException.cs
- PackagePartCollection.cs
- HTMLTagNameToTypeMapper.cs
- ValueType.cs
- CryptoApi.cs
- EventHandlerList.cs
- DataTemplateKey.cs
- RenderTargetBitmap.cs
- ReaderOutput.cs
- PointLightBase.cs
- ViewGenerator.cs
- WorkflowTransactionService.cs
- CssTextWriter.cs
- NullReferenceException.cs
- ByteBufferPool.cs
- AssemblyNameProxy.cs
- ReachFixedPageSerializerAsync.cs
- DesignerSerializationManager.cs
- SqlResolver.cs
- ProcessModelInfo.cs
- PropertyContainer.cs
- AudioFormatConverter.cs
- Registry.cs
- BinaryMessageEncoder.cs
- COMException.cs