The Labs \ Source Viewer \ SSCLI \ System \ BadImageFormatException

  1. // ==++==
  2. //
  3. //
  4. // Copyright (c) 2006 Microsoft Corporation. All rights reserved.
  5. //
  6. // The use and distribution terms for this software are contained in the file
  7. // named license.txt, which can be found in the root of this distribution.
  8. // By using this software in any fashion, you are agreeing to be bound by the
  9. // terms of this license.
  10. //
  11. // You must not remove this notice, or any other, from this software.
  12. //
  13. //
  14. // ==--==
  15. /*============================================================
  16. **
  17. ** Class:  BadImageFormatException
  18. **
  19. **
  20. ** Purpose: Exception to an invalid dll or executable format.
  21. **
  22. **
  23. ===========================================================*/
  24. namespace System
  25. {
  26.    
  27.     using System;
  28.     using System.Runtime.Serialization;
  29.     using FileLoadException = System.IO.FileLoadException;
  30.     using System.Security.Permissions;
  31.     using SecurityException = System.Security.SecurityException;
  32.     using System.Globalization;
  33.    
  34.     [System.Runtime.InteropServices.ComVisible(true)]
  35.     [Serializable()]
  36.     public class BadImageFormatException : SystemException
  37.     {
  38.        
  39.         private string _fileName;
  40.         // The name of the corrupt PE file.
  41.         private string _fusionLog;
  42.         // fusion log (when applicable)
  43.         public BadImageFormatException() : base(Environment.GetResourceString("Arg_BadImageFormatException"))
  44.         {
  45.             SetErrorCode(__HResults.COR_E_BADIMAGEFORMAT);
  46.         }
  47.        
  48.         public BadImageFormatException(string message) : base(message)
  49.         {
  50.             SetErrorCode(__HResults.COR_E_BADIMAGEFORMAT);
  51.         }
  52.        
  53.         public BadImageFormatException(string message, Exception inner) : base(message, inner)
  54.         {
  55.             SetErrorCode(__HResults.COR_E_BADIMAGEFORMAT);
  56.         }
  57.        
  58.         public BadImageFormatException(string message, string fileName) : base(message)
  59.         {
  60.             SetErrorCode(__HResults.COR_E_BADIMAGEFORMAT);
  61.             _fileName = fileName;
  62.         }
  63.        
  64.         public BadImageFormatException(string message, string fileName, Exception inner) : base(message, inner)
  65.         {
  66.             SetErrorCode(__HResults.COR_E_BADIMAGEFORMAT);
  67.             _fileName = fileName;
  68.         }
  69.        
  70.         public override string Message {
  71.             get {
  72.                 SetMessageField();
  73.                 return _message;
  74.             }
  75.         }
  76.        
  77.         private void SetMessageField()
  78.         {
  79.             if (_message == null) {
  80.                 if ((_fileName == null) && (HResult == System.__HResults.COR_E_EXCEPTION))
  81.                     _message = Environment.GetResourceString("Arg_BadImageFormatException");
  82.                 else
  83.                    
  84.                     _message = FileLoadException.FormatFileLoadExceptionMessage(_fileName, HResult);
  85.             }
  86.         }
  87.        
  88.         public string FileName {
  89.             get { return _fileName; }
  90.         }
  91.        
  92.         public override string ToString()
  93.         {
  94.             string s = GetType().FullName + ": " + Message;
  95.            
  96.             if (_fileName != null && _fileName.Length != 0)
  97.                 s += Environment.NewLine + String.Format(CultureInfo.CurrentCulture, Environment.GetResourceString("IO.FileName_Name"), _fileName);
  98.            
  99.             if (InnerException != null)
  100.                 s = s + " ---> " + InnerException.ToString();
  101.            
  102.             if (StackTrace != null)
  103.                 s += Environment.NewLine + StackTrace;
  104.            
  105.             try {
  106.                 if (FusionLog != null) {
  107.                     if (s == null)
  108.                         s = " ";
  109.                     s += Environment.NewLine;
  110.                     s += Environment.NewLine;
  111.                     s += FusionLog;
  112.                 }
  113.             }
  114.             catch (SecurityException) {
  115.                
  116.             }
  117.            
  118.             return s;
  119.         }
  120.        
  121.         protected BadImageFormatException(SerializationInfo info, StreamingContext context) : base(info, context)
  122.         {
  123.             // Base class constructor will check info != null.
  124.            
  125.             _fileName = info.GetString("BadImageFormat_FileName");
  126.             try {
  127.                 _fusionLog = info.GetString("BadImageFormat_FusionLog");
  128.             }
  129.             catch {
  130.                 _fusionLog = null;
  131.             }
  132.         }
  133.        
  134.         private BadImageFormatException(string fileName, string fusionLog, int hResult) : base(null)
  135.         {
  136.             SetErrorCode(hResult);
  137.             _fileName = fileName;
  138.             _fusionLog = fusionLog;
  139.             SetMessageField();
  140.         }
  141.        
  142.         public string FusionLog {
  143.             [SecurityPermissionAttribute(SecurityAction.Demand, Flags = SecurityPermissionFlag.ControlEvidence | SecurityPermissionFlag.ControlPolicy)]
  144.             get { return _fusionLog; }
  145.         }
  146.        
  147.         [SecurityPermissionAttribute(SecurityAction.LinkDemand, Flags = SecurityPermissionFlag.SerializationFormatter)]
  148.         public override void GetObjectData(SerializationInfo info, StreamingContext context)
  149.         {
  150.             // Serialize data for our base classes. base will verify info != null.
  151.             base.GetObjectData(info, context);
  152.            
  153.             // Serialize data for this class
  154.             info.AddValue("BadImageFormat_FileName", _fileName, typeof(string));
  155.             try {
  156.                 info.AddValue("BadImageFormat_FusionLog", FusionLog, typeof(string));
  157.             }
  158.             catch (SecurityException) {
  159.             }
  160.            
  161.         }
  162.     }
  163. }

Developer Fusion