Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / Orcas / NetFXw7 / 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
- SiteMapHierarchicalDataSourceView.cs
- Canvas.cs
- ReflectionUtil.cs
- CustomPeerResolverService.cs
- WorkflowInspectionServices.cs
- Menu.cs
- NativeMethods.cs
- RichTextBoxConstants.cs
- SafeSystemMetrics.cs
- DiscoveryDocumentReference.cs
- ArrayTypeMismatchException.cs
- LoginView.cs
- NamedObject.cs
- SqlWebEventProvider.cs
- ComponentConverter.cs
- DocumentSchemaValidator.cs
- XMLUtil.cs
- validationstate.cs
- XPathNode.cs
- DataSourceCache.cs
- StyleSheetComponentEditor.cs
- WebControl.cs
- InvalidFilterCriteriaException.cs
- sqlnorm.cs
- ToolboxComponentsCreatedEventArgs.cs
- BufferedMessageWriter.cs
- CDSCollectionETWBCLProvider.cs
- BaseCodePageEncoding.cs
- updateconfighost.cs
- PeerTransportListenAddressConverter.cs
- LocalizationParserHooks.cs
- XamlFrame.cs
- ACE.cs
- ServerIdentity.cs
- ScrollBarAutomationPeer.cs
- ImageSourceValueSerializer.cs
- FillBehavior.cs
- DataRowView.cs
- ReliableChannelBinder.cs
- CodeArgumentReferenceExpression.cs
- Freezable.cs
- ControlFilterExpression.cs
- QueueProcessor.cs
- DictionaryContent.cs
- AnnotationAdorner.cs
- EncryptedType.cs
- ADConnectionHelper.cs
- ObjectCache.cs
- Splitter.cs
- AsynchronousChannelMergeEnumerator.cs
- SharedPerformanceCounter.cs
- EntityDesignerUtils.cs
- ConsoleCancelEventArgs.cs
- TokenCreationException.cs
- ContentFilePart.cs
- DoubleLinkListEnumerator.cs
- WinFormsUtils.cs
- SequentialWorkflowRootDesigner.cs
- OdbcStatementHandle.cs
- wgx_exports.cs
- AdornedElementPlaceholder.cs
- DockProviderWrapper.cs
- FormatterConverter.cs
- ScaleTransform3D.cs
- LookupBindingPropertiesAttribute.cs
- TabItemAutomationPeer.cs
- XmlSchemaObjectTable.cs
- Int32EqualityComparer.cs
- SizeConverter.cs
- Utility.cs
- CollectionChangeEventArgs.cs
- RootBrowserWindow.cs
- InvalidContentTypeException.cs
- MarkerProperties.cs
- DataGridColumnReorderingEventArgs.cs
- IntegerCollectionEditor.cs
- XmlSerializer.cs
- DesignerActionGlyph.cs
- IntSecurity.cs
- ErrorTableItemStyle.cs
- JournalNavigationScope.cs
- TraceContext.cs
- PerfProviderCollection.cs
- XsltLoader.cs
- SoapExtension.cs
- DataViewManager.cs
- BrowserCapabilitiesCodeGenerator.cs
- ResourcePool.cs
- DictionaryManager.cs
- ContentControl.cs
- TaskDesigner.cs
- Quaternion.cs
- WebSysDisplayNameAttribute.cs
- SQLMembershipProvider.cs
- FilterableAttribute.cs
- PrivilegeNotHeldException.cs
- ResourceKey.cs
- HwndSourceKeyboardInputSite.cs
- CheckBoxField.cs
- SecurityDocument.cs