The Labs \ Source Viewer \ SSCLI \ System \ OperatingSystem

  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:    OperatingSystem
  18. **
  19. **
  20. ** Purpose:
  21. **
  22. **
  23. ===========================================================*/
  24. namespace System
  25. {
  26.     using System.Runtime.Serialization;
  27.     using System.Globalization;
  28.     using System.Security.Permissions;
  29.     using System.Runtime.InteropServices;
  30.    
  31.    
  32.     [ComVisible(true)]
  33.     [Serializable()]
  34.     public sealed class OperatingSystem : ICloneable, ISerializable
  35.     {
  36.         private Version _version;
  37.         private PlatformID _platform;
  38.         private string _servicePack;
  39.         private string _versionString;
  40.        
  41.         private OperatingSystem()
  42.         {
  43.         }
  44.        
  45.         public OperatingSystem(PlatformID platform, Version version) : this(platform, version, null)
  46.         {
  47.         }
  48.        
  49.         internal OperatingSystem(PlatformID platform, Version version, string servicePack)
  50.         {
  51.             if (platform < PlatformID.Win32S || platform > PlatformID.Unix) {
  52.                 throw new ArgumentException(String.Format(CultureInfo.CurrentCulture, Environment.GetResourceString("Arg_EnumIllegalVal"), (int)platform), "platform");
  53.             }
  54.            
  55.             if ((object)version == null)
  56.                 throw new ArgumentNullException("version");
  57.            
  58.             _platform = platform;
  59.             _version = (Version)version.Clone();
  60.             _servicePack = servicePack;
  61.         }
  62.        
  63.         private OperatingSystem(SerializationInfo info, StreamingContext context)
  64.         {
  65.             SerializationInfoEnumerator enumerator = info.GetEnumerator();
  66.             while (enumerator.MoveNext()) {
  67.                 switch (enumerator.Name) {
  68.                     case "_version":
  69.                         _version = (Version)info.GetValue("_version", typeof(Version));
  70.                         break;
  71.                     case "_platform":
  72.                         _platform = (PlatformID)info.GetValue("_platform", typeof(PlatformID));
  73.                         break;
  74.                     case "_servicePack":
  75.                         _servicePack = info.GetString("_servicePack");
  76.                         break;
  77.                 }
  78.             }
  79.            
  80.             if (_version == null) {
  81.                 throw new SerializationException(Environment.GetResourceString("Serialization_MissField", "_version"));
  82.             }
  83.         }
  84.        
  85.         [SecurityPermissionAttribute(SecurityAction.LinkDemand, Flags = SecurityPermissionFlag.SerializationFormatter)]
  86.         public void GetObjectData(SerializationInfo info, StreamingContext context)
  87.         {
  88.             if (info == null) {
  89.                 throw new ArgumentNullException("info");
  90.             }
  91.            
  92.             info.AddValue("_version", _version);
  93.             info.AddValue("_platform", _platform);
  94.             info.AddValue("_servicePack", _servicePack);
  95.         }
  96.        
  97.         public PlatformID Platform {
  98.             get { return _platform; }
  99.         }
  100.        
  101.         public string ServicePack {
  102.             get {
  103.                 if (_servicePack == null) {
  104.                     return string.Empty;
  105.                 }
  106.                
  107.                 return _servicePack;
  108.             }
  109.         }
  110.        
  111.         public Version Version {
  112.             get { return _version; }
  113.         }
  114.        
  115.         public object Clone()
  116.         {
  117.             return new OperatingSystem(_platform, _version, _servicePack);
  118.         }
  119.        
  120.         public override string ToString()
  121.         {
  122.             return VersionString;
  123.         }
  124.        
  125.         public string VersionString {
  126.             get {
  127.                 if (_versionString != null) {
  128.                     return _versionString;
  129.                 }
  130.                
  131.                 string os;
  132.                 if (_platform == PlatformID.Win32NT)
  133.                     os = "Microsoft Windows NT ";
  134.                 else if (_platform == PlatformID.Win32Windows) {
  135.                     if ((_version.Major > 4) || ((_version.Major == 4) && (_version.Minor > 0)))
  136.                         os = "Microsoft Windows 98 ";
  137.                     else
  138.                         os = "Microsoft Windows 95 ";
  139.                 }
  140.                 else if (_platform == PlatformID.Win32S)
  141.                     os = "Microsoft Win32S ";
  142.                 else if (_platform == PlatformID.WinCE)
  143.                     os = "Microsoft Windows CE ";
  144.                 else
  145.                     os = "<unknown> ";
  146.                
  147.                 if (String.IsNullOrEmpty(_servicePack)) {
  148.                     _versionString = os + _version.ToString();
  149.                 }
  150.                 else {
  151.                     _versionString = os + _version.ToString(3) + " " + _servicePack;
  152.                 }
  153.                
  154.                 return _versionString;
  155.             }
  156.         }
  157.     }
  158. }

Developer Fusion