Beispiel #1
0
        private static void DetermineVersionNumberAndServerVersion()
        {
            var osVersionInfo = new NativeMethods.OSVERSIONINFOEX {
                OSVersionInfoSize = Marshal.SizeOf(typeof(NativeMethods.OSVERSIONINFOEX))
            };

            if (NativeMethods.RtlGetVersion(ref osVersionInfo) != 0)
            {
                // TODO: Error handling
            }

            int ubr = 0;

            using (RegistryKey key = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Windows NT\CurrentVersion", false))
            {
                if (key != null)
                {
                    object o = key.GetValue("UBR");
                    if (o is int i)
                    {
                        ubr = i;
                    }
                }
            }
            _windowsVersionNumber   = $"{osVersionInfo.MajorVersion}.{osVersionInfo.MinorVersion}.{osVersionInfo.BuildNumber}.{ubr}";
            _isWindowsServerVersion = (osVersionInfo.ProductType & 2) != 0;
        }
      private static void UpdateData()
      {
         NativeMethods.OSVERSIONINFOEX info = new NativeMethods.OSVERSIONINFOEX();
         info.dwOSVersionInfoSize = Marshal.SizeOf(info);

         NativeMethods.SYSTEM_INFO sysInfo = new NativeMethods.SYSTEM_INFO();

         NativeMethods.GetSystemInfo(out sysInfo);
         if (!NativeMethods.GetVersionExW(ref info))
         {
            Marshal.ThrowExceptionForHR(Marshal.GetLastWin32Error());
         }

         Debug.Assert(info.dwMajorVersion == Environment.OSVersion.Version.Major);
         Debug.Assert(info.dwMinorVersion == Environment.OSVersion.Version.Minor);
         Debug.Assert(info.dwBuildNumber == Environment.OSVersion.Version.Build);

         s_processorArchitecture = (ProcessorArchitecture)sysInfo.processorArchitecture;

         s_servicePackVersion = new Version(info.wServicePackMajor, info.wServicePackMinor);

         s_isServer = info.wProductType == NativeMethods.VER_NT_DOMAIN_CONTROLLER || info.wProductType == NativeMethods.VER_NT_SERVER;

         if (info.dwMajorVersion > 6)
         {
            s_osVersionName = OSVersionName.Later;
         }
         else if (info.dwMajorVersion == 6) 
         {
            if (info.dwMinorVersion == 0) // Windows Vista or Windows Server 2008
            {
               if (info.wProductType == NativeMethods.VER_NT_WORKSTATION) // Vista
               {
                  s_osVersionName = OSVersionName.WindowsVista;
               }
               else
               {
                  s_osVersionName = OSVersionName.WindowsServer2008;
               }
            }
            else if (info.dwMinorVersion == 1) // Windows 7 or Windows Server 2008 R2
            {
               if (info.wProductType == NativeMethods.VER_NT_WORKSTATION)
               {
                  s_osVersionName = Vss.OSVersionName.Windows7;
               }
               else
               {
                  s_osVersionName = Vss.OSVersionName.WindowsServer2008R2;
               }
            }
            else
            {
               s_osVersionName = Vss.OSVersionName.Later;
            }
         }
         else if (info.dwMajorVersion == 5)
         {
            if (info.dwMinorVersion == 0)
            {
               s_osVersionName = OSVersionName.Windows2000;
            }
            if (info.dwMinorVersion == 1)
            {
               s_osVersionName = OSVersionName.WindowsXP;
            }
            else if (info.dwMinorVersion == 2)
            {
               if (info.wProductType == NativeMethods.VER_NT_WORKSTATION && s_processorArchitecture == ProcessorArchitecture.X64)
               {
                  s_osVersionName = OSVersionName.WindowsXP;
               }
               else if (info.wProductType != NativeMethods.VER_NT_WORKSTATION)
               {
                  s_osVersionName = OSVersionName.WindowsServer2003;
               }
               else
               {
                  s_osVersionName = OSVersionName.Later;
               }
            }
            else
            {
               s_osVersionName = OSVersionName.Later;
            }
         }
      }
Beispiel #3
0
        private static void UpdateData()
        {
            NativeMethods.OSVERSIONINFOEX info = new NativeMethods.OSVERSIONINFOEX();
            info.dwOSVersionInfoSize = Marshal.SizeOf(info);

            NativeMethods.SYSTEM_INFO sysInfo = new NativeMethods.SYSTEM_INFO();

            NativeMethods.GetSystemInfo(out sysInfo);
            if (!NativeMethods.GetVersionExW(ref info))
            {
                Marshal.ThrowExceptionForHR(Marshal.GetLastWin32Error());
            }

            Debug.Assert(info.dwMajorVersion == Environment.OSVersion.Version.Major);
            Debug.Assert(info.dwMinorVersion == Environment.OSVersion.Version.Minor);
            Debug.Assert(info.dwBuildNumber == Environment.OSVersion.Version.Build);

            s_processorArchitecture = (ProcessorArchitecture)sysInfo.processorArchitecture;

            s_servicePackVersion = new Version(info.wServicePackMajor, info.wServicePackMinor);

            s_isServer = info.wProductType == NativeMethods.VER_NT_DOMAIN_CONTROLLER || info.wProductType == NativeMethods.VER_NT_SERVER;

            if (info.dwMajorVersion > 6)
            {
                s_osVersionName = OSVersionName.Later;
            }
            else if (info.dwMajorVersion == 6)
            {
                if (info.dwMinorVersion == 0)                                  // Windows Vista or Windows Server 2008
                {
                    if (info.wProductType == NativeMethods.VER_NT_WORKSTATION) // Vista
                    {
                        s_osVersionName = OSVersionName.WindowsVista;
                    }
                    else
                    {
                        s_osVersionName = OSVersionName.WindowsServer2008;
                    }
                }
                else if (info.dwMinorVersion == 1) // Windows 7 or Windows Server 2008 R2
                {
                    if (info.wProductType == NativeMethods.VER_NT_WORKSTATION)
                    {
                        s_osVersionName = Vss.OSVersionName.Windows7;
                    }
                    else
                    {
                        s_osVersionName = Vss.OSVersionName.WindowsServer2008R2;
                    }
                }
                else
                {
                    s_osVersionName = Vss.OSVersionName.Later;
                }
            }
            else if (info.dwMajorVersion == 5)
            {
                if (info.dwMinorVersion == 0)
                {
                    s_osVersionName = OSVersionName.Windows2000;
                }
                if (info.dwMinorVersion == 1)
                {
                    s_osVersionName = OSVersionName.WindowsXP;
                }
                else if (info.dwMinorVersion == 2)
                {
                    if (info.wProductType == NativeMethods.VER_NT_WORKSTATION && s_processorArchitecture == ProcessorArchitecture.X64)
                    {
                        s_osVersionName = OSVersionName.WindowsXP;
                    }
                    else if (info.wProductType != NativeMethods.VER_NT_WORKSTATION)
                    {
                        s_osVersionName = OSVersionName.WindowsServer2003;
                    }
                    else
                    {
                        s_osVersionName = OSVersionName.Later;
                    }
                }
                else
                {
                    s_osVersionName = OSVersionName.Later;
                }
            }
        }