Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / Orcas / SP / ndp / fx / src / SystemNet / Net / PeerToPeer / PeerToPeerException.cs / 1 / PeerToPeerException.cs
//------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- namespace System.Net.PeerToPeer { using System; using System.Collections.Generic; using System.Text; using System.Runtime.InteropServices; using System.ComponentModel; using System.Diagnostics; using System.Threading; using System.Runtime.Serialization; using System.Security.Permissions; ////// The PeerToPeerException class encpasulates the exceptions for /// PeerToPeer classes. /// NOTE: /// This class is marked serializable but does not implement /// ISerializable interface. There are no private/public properties /// we keep track across the serialization. The base class message /// and inner exceptions are used. /// [Serializable] public class PeerToPeerException : Exception, ISerializable { private const UInt32 FACILITY_P2P = 99; public PeerToPeerException() { } ////// Construtor /// /// public PeerToPeerException(string message) : base(message) { } ////// Constructor /// /// /// public PeerToPeerException(string message, Exception innerException) : base(message, innerException) { } ////// HRESULT Structure /// 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 /// 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 /// +---+-+-+-----------------------+-------------------------------+ /// |Sev|C|R| Facility | Code | /// +---+-+-+-----------------------+-------------------------------+ /// /// The intent here is that when we get a HRESULT from a P2P.dll, /// we need to get the message from the P2p.dll resource table. /// If the HRESULT is something like E_INVALIDARG, we need to get the /// message from the SYSTEM table. /// Apart from the native exception message, we would like to provide /// a friendly message to explain the context under which the exception /// occurred from managed code developers. /// So we first try to get the message from the P2P.dll if the HRESULT /// comes with a facility ID for P2P. Otherwise we get the exception message from /// system. We then construct a Win32Exception and set this as an inner exception /// /// If in case we can't get the message from either system or P2p, then /// we try the Marshal class and throw a exception from the HRESULT /// /// If all else fails we simply throw an exception with no inner /// exception but still give the HRESULT /// /// A note that we are getting the handle for P2p.dll from the LoadLibrary /// we originally did for checking if P2P.dll is present on the system. /// Since we are getting the underlying handle, there is a possibility that /// the Library is freed [AppDomain shutdown] and we are trying to /// use the handle. The code is in a try catch block here so that /// we catch these situations and still recover. /// /// The error message that we would like to set as the message for the exception/// /// The error code ///a PeerToPeerException //// [System.Security.SecurityCritical] internal static PeerToPeerException CreateFromHr(string message, Int32 hr) { PeerToPeerException p2pEx = null; int facility = ((hr >> 16) & 0x1FFF); IntPtr NativeMessagePtr = IntPtr.Zero; try { UInt32 dwLength = UnsafeSystemNativeMethods.FormatMessage( FormatMessageFlags.FORMAT_MESSAGE_ALLOCATE_BUFFER | FormatMessageFlags.FORMAT_MESSAGE_ARGUMENT_ARRAY | (facility == FACILITY_P2P ? FormatMessageFlags.FORMAT_MESSAGE_FROM_HMODULE : FormatMessageFlags.FORMAT_MESSAGE_FROM_SYSTEM), (facility == FACILITY_P2P ? PeerToPeerOSHelper.P2PModuleHandle : IntPtr.Zero), (uint)(hr), 0, ref NativeMessagePtr, 0, IntPtr.Zero); if (dwLength != 0) { string NativeMessage = Marshal.PtrToStringUni(NativeMessagePtr); p2pEx = new PeerToPeerException(message, new Win32Exception(hr, NativeMessage)); } else { p2pEx = new PeerToPeerException(message, Marshal.GetExceptionForHR(hr)); } } catch(Exception ex) { Logging.P2PTraceSource.TraceEvent(TraceEventType.Warning, 0, "Could not get the error message for error code {0} - Exception {1}", hr, ex); if (ex is ThreadAbortException || ex is StackOverflowException || ex is OutOfMemoryException) { throw; } } finally { if (NativeMessagePtr != IntPtr.Zero) { UnsafeSystemNativeMethods.LocalFree(NativeMessagePtr); } } if (p2pEx == null) { Logging.P2PTraceSource.TraceEvent(TraceEventType.Warning, 0, "Could not get the error message for error code {0}", hr); p2pEx = new PeerToPeerException(message + "Underlying native error " + hr); } Logging.P2PTraceSource.TraceEvent(TraceEventType.Error, 0, "Exception: {0}", p2pEx); return p2pEx; } protected PeerToPeerException(SerializationInfo info, StreamingContext context) : base (info, context) {} //// // // // // // // [System.Security.SecurityCritical] [SecurityPermissionAttribute(SecurityAction.LinkDemand, Flags=SecurityPermissionFlag.SerializationFormatter)] void ISerializable.GetObjectData(SerializationInfo info, StreamingContext context) { GetObjectData(info, context); } //// // [System.Security.SecurityCritical] [SecurityPermissionAttribute(SecurityAction.LinkDemand, Flags=SecurityPermissionFlag.SerializationFormatter)] public override void GetObjectData(SerializationInfo info, StreamingContext context) { base.GetObjectData(info, context); } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. //------------------------------------------------------------------------------ //// // Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- namespace System.Net.PeerToPeer { using System; using System.Collections.Generic; using System.Text; using System.Runtime.InteropServices; using System.ComponentModel; using System.Diagnostics; using System.Threading; using System.Runtime.Serialization; using System.Security.Permissions; ////// The PeerToPeerException class encpasulates the exceptions for /// PeerToPeer classes. /// NOTE: /// This class is marked serializable but does not implement /// ISerializable interface. There are no private/public properties /// we keep track across the serialization. The base class message /// and inner exceptions are used. /// [Serializable] public class PeerToPeerException : Exception, ISerializable { private const UInt32 FACILITY_P2P = 99; public PeerToPeerException() { } ////// Construtor /// /// public PeerToPeerException(string message) : base(message) { } ////// Constructor /// /// /// public PeerToPeerException(string message, Exception innerException) : base(message, innerException) { } ////// HRESULT Structure /// 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 /// 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 /// +---+-+-+-----------------------+-------------------------------+ /// |Sev|C|R| Facility | Code | /// +---+-+-+-----------------------+-------------------------------+ /// /// The intent here is that when we get a HRESULT from a P2P.dll, /// we need to get the message from the P2p.dll resource table. /// If the HRESULT is something like E_INVALIDARG, we need to get the /// message from the SYSTEM table. /// Apart from the native exception message, we would like to provide /// a friendly message to explain the context under which the exception /// occurred from managed code developers. /// So we first try to get the message from the P2P.dll if the HRESULT /// comes with a facility ID for P2P. Otherwise we get the exception message from /// system. We then construct a Win32Exception and set this as an inner exception /// /// If in case we can't get the message from either system or P2p, then /// we try the Marshal class and throw a exception from the HRESULT /// /// If all else fails we simply throw an exception with no inner /// exception but still give the HRESULT /// /// A note that we are getting the handle for P2p.dll from the LoadLibrary /// we originally did for checking if P2P.dll is present on the system. /// Since we are getting the underlying handle, there is a possibility that /// the Library is freed [AppDomain shutdown] and we are trying to /// use the handle. The code is in a try catch block here so that /// we catch these situations and still recover. /// /// The error message that we would like to set as the message for the exception/// /// The error code ///a PeerToPeerException //// [System.Security.SecurityCritical] internal static PeerToPeerException CreateFromHr(string message, Int32 hr) { PeerToPeerException p2pEx = null; int facility = ((hr >> 16) & 0x1FFF); IntPtr NativeMessagePtr = IntPtr.Zero; try { UInt32 dwLength = UnsafeSystemNativeMethods.FormatMessage( FormatMessageFlags.FORMAT_MESSAGE_ALLOCATE_BUFFER | FormatMessageFlags.FORMAT_MESSAGE_ARGUMENT_ARRAY | (facility == FACILITY_P2P ? FormatMessageFlags.FORMAT_MESSAGE_FROM_HMODULE : FormatMessageFlags.FORMAT_MESSAGE_FROM_SYSTEM), (facility == FACILITY_P2P ? PeerToPeerOSHelper.P2PModuleHandle : IntPtr.Zero), (uint)(hr), 0, ref NativeMessagePtr, 0, IntPtr.Zero); if (dwLength != 0) { string NativeMessage = Marshal.PtrToStringUni(NativeMessagePtr); p2pEx = new PeerToPeerException(message, new Win32Exception(hr, NativeMessage)); } else { p2pEx = new PeerToPeerException(message, Marshal.GetExceptionForHR(hr)); } } catch(Exception ex) { Logging.P2PTraceSource.TraceEvent(TraceEventType.Warning, 0, "Could not get the error message for error code {0} - Exception {1}", hr, ex); if (ex is ThreadAbortException || ex is StackOverflowException || ex is OutOfMemoryException) { throw; } } finally { if (NativeMessagePtr != IntPtr.Zero) { UnsafeSystemNativeMethods.LocalFree(NativeMessagePtr); } } if (p2pEx == null) { Logging.P2PTraceSource.TraceEvent(TraceEventType.Warning, 0, "Could not get the error message for error code {0}", hr); p2pEx = new PeerToPeerException(message + "Underlying native error " + hr); } Logging.P2PTraceSource.TraceEvent(TraceEventType.Error, 0, "Exception: {0}", p2pEx); return p2pEx; } protected PeerToPeerException(SerializationInfo info, StreamingContext context) : base (info, context) {} //// // // // // // // [System.Security.SecurityCritical] [SecurityPermissionAttribute(SecurityAction.LinkDemand, Flags=SecurityPermissionFlag.SerializationFormatter)] void ISerializable.GetObjectData(SerializationInfo info, StreamingContext context) { GetObjectData(info, context); } //// // [System.Security.SecurityCritical] [SecurityPermissionAttribute(SecurityAction.LinkDemand, Flags=SecurityPermissionFlag.SerializationFormatter)] public override void GetObjectData(SerializationInfo info, StreamingContext context) { base.GetObjectData(info, context); } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007.//
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- WindowVisualStateTracker.cs
- RemotingAttributes.cs
- XamlLoadErrorInfo.cs
- QueueProcessor.cs
- OletxEnlistment.cs
- ForeignConstraint.cs
- DocumentPageViewAutomationPeer.cs
- DataBindingCollection.cs
- SafeTokenHandle.cs
- RadioButtonAutomationPeer.cs
- EventMappingSettingsCollection.cs
- TypeBuilderInstantiation.cs
- WebPartEventArgs.cs
- PageCodeDomTreeGenerator.cs
- SmtpMail.cs
- DefaultExpressionVisitor.cs
- ResponseBodyWriter.cs
- CodeAttributeArgument.cs
- RepeatButtonAutomationPeer.cs
- XPathDocumentIterator.cs
- hebrewshape.cs
- ParameterCollection.cs
- InitializingNewItemEventArgs.cs
- WaveHeader.cs
- PolyBezierSegmentFigureLogic.cs
- _AutoWebProxyScriptWrapper.cs
- PointCollectionValueSerializer.cs
- OAVariantLib.cs
- GridViewItemAutomationPeer.cs
- XmlDeclaration.cs
- StorageTypeMapping.cs
- DtdParser.cs
- HybridDictionary.cs
- ContextInformation.cs
- CopyAttributesAction.cs
- SrgsNameValueTag.cs
- RepeatInfo.cs
- TitleStyle.cs
- SHA256CryptoServiceProvider.cs
- ChameleonKey.cs
- DocumentApplicationJournalEntry.cs
- CompletedAsyncResult.cs
- XamlFigureLengthSerializer.cs
- DbSetClause.cs
- TypeLoadException.cs
- QueryServiceConfigHandle.cs
- SafeLocalMemHandle.cs
- Utility.cs
- XmlExtensionFunction.cs
- QuadTree.cs
- LoopExpression.cs
- GestureRecognitionResult.cs
- IOException.cs
- AuthenticationConfig.cs
- PrintingPermissionAttribute.cs
- Ticks.cs
- DurableInstanceContextProvider.cs
- TdsParserStateObject.cs
- MapPathBasedVirtualPathProvider.cs
- CursorInteropHelper.cs
- DayRenderEvent.cs
- GiveFeedbackEvent.cs
- FixedStringLookup.cs
- PrivilegeNotHeldException.cs
- XmlQueryOutput.cs
- CngKeyCreationParameters.cs
- TemplatedMailWebEventProvider.cs
- EventHandlersDesigner.cs
- SystemColorTracker.cs
- WebPartsPersonalization.cs
- WebPartMovingEventArgs.cs
- UnmanagedMarshal.cs
- ToolStripItemEventArgs.cs
- Utils.cs
- DefaultPropertyAttribute.cs
- ErrorRuntimeConfig.cs
- MaskDescriptor.cs
- ConditionCollection.cs
- HebrewCalendar.cs
- FileController.cs
- CollectionContainer.cs
- RegistrationServices.cs
- ReflectEventDescriptor.cs
- CompilationSection.cs
- TextBreakpoint.cs
- UnsafeNativeMethods.cs
- Slider.cs
- DBCSCodePageEncoding.cs
- InvalidStoreProtectionKeyException.cs
- Deflater.cs
- IPGlobalProperties.cs
- TreeNodeBindingCollection.cs
- LineBreak.cs
- QilCloneVisitor.cs
- GlyphTypeface.cs
- ProxyFragment.cs
- FileVersionInfo.cs
- SharedDp.cs
- BitmapMetadataBlob.cs
- ActionFrame.cs