diff --git a/.vs/CMWTAT_DIGITAL/v15/.suo b/.vs/CMWTAT_DIGITAL/v15/.suo
new file mode 100644
index 0000000..136c275
Binary files /dev/null and b/.vs/CMWTAT_DIGITAL/v15/.suo differ
diff --git a/.vs/CMWTAT_DIGITAL/v15/Server/sqlite3/db.lock b/.vs/CMWTAT_DIGITAL/v15/Server/sqlite3/db.lock
new file mode 100644
index 0000000..e69de29
diff --git a/.vs/CMWTAT_DIGITAL/v15/Server/sqlite3/storage.ide b/.vs/CMWTAT_DIGITAL/v15/Server/sqlite3/storage.ide
new file mode 100644
index 0000000..e89fb90
Binary files /dev/null and b/.vs/CMWTAT_DIGITAL/v15/Server/sqlite3/storage.ide differ
diff --git a/CMWTAT_DIGITAL.sln b/CMWTAT_DIGITAL.sln
new file mode 100644
index 0000000..0119cec
--- /dev/null
+++ b/CMWTAT_DIGITAL.sln
@@ -0,0 +1,25 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 15
+VisualStudioVersion = 15.0.27130.2036
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CMWTAT_DIGITAL", "CMWTAT_DIGITAL\CMWTAT_DIGITAL.csproj", "{961DE925-B82C-4515-8FBD-6805E36D1212}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {961DE925-B82C-4515-8FBD-6805E36D1212}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {961DE925-B82C-4515-8FBD-6805E36D1212}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {961DE925-B82C-4515-8FBD-6805E36D1212}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {961DE925-B82C-4515-8FBD-6805E36D1212}.Release|Any CPU.Build.0 = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {653ED007-6FEF-4A82-9898-F60578205F1C}
+ EndGlobalSection
+EndGlobal
diff --git a/CMWTAT_DIGITAL/App.xaml b/CMWTAT_DIGITAL/App.xaml
new file mode 100644
index 0000000..904078b
--- /dev/null
+++ b/CMWTAT_DIGITAL/App.xaml
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/CMWTAT_DIGITAL/App.xaml.cs b/CMWTAT_DIGITAL/App.xaml.cs
new file mode 100644
index 0000000..374ac42
--- /dev/null
+++ b/CMWTAT_DIGITAL/App.xaml.cs
@@ -0,0 +1,16 @@
+using System;
+using System.Collections.Generic;
+using System.Configuration;
+using System.Data;
+using System.Linq;
+using System.Windows;
+
+namespace CMWTAT_KMS
+{
+ ///
+ /// App.xaml 的交互逻辑
+ ///
+ public partial class App : Application
+ {
+ }
+}
diff --git a/CMWTAT_DIGITAL/CMWTAT.ico b/CMWTAT_DIGITAL/CMWTAT.ico
new file mode 100644
index 0000000..42f687a
Binary files /dev/null and b/CMWTAT_DIGITAL/CMWTAT.ico differ
diff --git a/CMWTAT_DIGITAL/CMWTAT.png b/CMWTAT_DIGITAL/CMWTAT.png
new file mode 100644
index 0000000..e0ebb76
Binary files /dev/null and b/CMWTAT_DIGITAL/CMWTAT.png differ
diff --git a/CMWTAT_DIGITAL/CMWTAT_DIGITAL.csproj b/CMWTAT_DIGITAL/CMWTAT_DIGITAL.csproj
new file mode 100644
index 0000000..949fbb2
--- /dev/null
+++ b/CMWTAT_DIGITAL/CMWTAT_DIGITAL.csproj
@@ -0,0 +1,123 @@
+
+
+
+
+ Debug
+ AnyCPU
+ {961DE925-B82C-4515-8FBD-6805E36D1212}
+ WinExe
+ CMWTAT_DIGITAL
+ CMWTAT_DIGITAL
+ v4.5
+ 512
+ {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
+ 4
+
+
+
+ AnyCPU
+ true
+ full
+ false
+ bin\Debug\
+ DEBUG;TRACE
+ prompt
+ 4
+ false
+
+
+ AnyCPU
+ pdbonly
+ true
+ bin\Release\
+ TRACE
+ prompt
+ 4
+ false
+
+
+ app.manifest
+
+
+ CMWTAT.ico
+
+
+
+ ..\packages\MaterialDesignColors.1.1.3\lib\net45\MaterialDesignColors.dll
+
+
+ ..\packages\MaterialDesignThemes.2.4.0.1044\lib\net45\MaterialDesignThemes.Wpf.dll
+
+
+ ..\packages\Newtonsoft.Json.11.0.2\lib\net45\Newtonsoft.Json.dll
+
+
+
+
+
+
+
+
+
+ 4.0
+
+
+
+
+
+
+
+ MSBuild:Compile
+ Designer
+
+
+ Designer
+ MSBuild:Compile
+
+
+ MSBuild:Compile
+ Designer
+
+
+ App.xaml
+ Code
+
+
+ MainWindow.xaml
+ Code
+
+
+
+
+
+ Code
+
+
+ True
+ True
+ Resources.resx
+
+
+ True
+ Settings.settings
+ True
+
+
+ ResXFileCodeGenerator
+ Resources.Designer.cs
+
+
+
+ Designer
+
+
+
+ SettingsSingleFileGenerator
+ Settings.Designer.cs
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/CMWTAT_DIGITAL/MainWindow.xaml b/CMWTAT_DIGITAL/MainWindow.xaml
new file mode 100644
index 0000000..de4af81
--- /dev/null
+++ b/CMWTAT_DIGITAL/MainWindow.xaml
@@ -0,0 +1,160 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Loading
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Activating
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Loading
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Title
+ Hello World
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Error
+ Unable to connect to server, program will exit.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Title
+ Text
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Title
+ Congratulation! Windows 10 has been successful activated.
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/CMWTAT_DIGITAL/MainWindow.xaml.cs b/CMWTAT_DIGITAL/MainWindow.xaml.cs
new file mode 100644
index 0000000..ab049b0
--- /dev/null
+++ b/CMWTAT_DIGITAL/MainWindow.xaml.cs
@@ -0,0 +1,395 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Runtime.InteropServices;
+using System.Text;
+using System.Windows;
+using System.Windows.Controls;
+using System.Windows.Data;
+using System.Windows.Documents;
+using System.Windows.Input;
+using System.Windows.Media;
+using System.Windows.Media.Imaging;
+using System.Windows.Navigation;
+using System.Windows.Shapes;
+using OSVersionInfoClass;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+using System.Net;
+using System.IO;
+using System.Threading;
+using Microsoft.Win32;
+
+namespace CMWTAT_DIGITAL
+{
+ ///
+ /// MainWindow.xaml 的交互逻辑
+ ///
+ public partial class MainWindow : Window
+ {
+ [DllImport("Kernel32.dll")]
+ private static extern bool Wow64EnableWow64FsRedirection(bool Wow64FsEnableRedirection);//重定向
+ public struct Frequency
+ {
+ public int ID { get; set; }
+ public string DisplayOS { get; set; }
+ }
+ //public string SystemEdition = OSVersionInfo.Name + " " + OSVersionInfo.Edition;
+ public string SystemEdition = OSVersionInfo.Edition;
+ public MainWindow()
+ {
+ InitializeComponent();
+ //MessageBox.Show(@"reg add ""HKLM\SYSTEM\Tokens\"" /v ""Channel"" /t REG_SZ /d ""Retail"" /f");
+ DialogWait.IsOpen = true;
+ try
+ {
+ RegistryKey pRegKey = Registry.LocalMachine;
+ pRegKey = pRegKey.OpenSubKey(@"SOFTWARE\Microsoft\Windows NT\CurrentVersion");
+ SystemEdition = pRegKey.GetValue("EditionID").ToString();
+ }
+ catch
+ {
+ SystemEdition = OSVersionInfo.Edition;
+ }
+
+ //SystemEditionText.Text = SystemEdition;
+ Thread loadthread = new Thread(LoadOSList);
+ loadthread.Start();
+ }
+ JArray ositems;
+ int now_os_index = 0;
+ string checked_os = "unknow";
+ private void InvokeTest()
+ {
+ actbtn.Dispatcher.Invoke(new Action(() =>
+ {
+ LoadOSList();
+ }));
+ }
+ private void LoadOSList()
+ {
+ actbtn.Dispatcher.Invoke(new Action(() =>
+ {
+ DialogWait.IsOpen = true;
+ }));
+ try
+ {
+ string json = GetHttpWebRequest("https://kms.kumo.moe/api/digital?list=1");
+ JObject jsonobj = JObject.Parse(json);
+ List list = new List();
+ Frequency freq = new Frequency();
+ ositems = (JArray)jsonobj["OS"];
+ for (int i = 0; i < ositems.Count(); i++)
+ {
+ freq.ID = i;
+ freq.DisplayOS = jsonobj["OS"][i].ToString();
+ if (jsonobj["OS"][i].ToString() == SystemEdition)
+ {
+ now_os_index = i;
+ checked_os = SystemEdition;
+ }
+ if (jsonobj["OS"][i].ToString() == SystemEdition + OSVersionInfo.BuildVersion)
+ {
+ now_os_index = i;
+ checked_os = SystemEdition + OSVersionInfo.BuildVersion;
+ }
+ list.Add(freq);
+ }
+
+ actbtn.Dispatcher.Invoke(new Action(() =>
+ {
+ this.SystemEditionText.ItemsSource = list;//控件的ID
+
+ if (checked_os == "unknow")
+ {
+ this.SystemEditionText.SelectedIndex = 0;
+ this.DialogWithOKToCloseDialogTitle.Text = "Attention";
+ this.DialogWithOKToCloseDialogText.Text = "Unable to correctly identify your operating system, may be not be supported.\r\n(System edition: " + SystemEdition + OSVersionInfo.BuildVersion + ")";
+ this.DialogWithOKToCloseDialog.IsOpen = true;
+ }
+ else
+ {
+ this.SystemEditionText.SelectedIndex = now_os_index;
+ }
+ }));
+
+ //this.SystemEditionText.SelectedIndex = now_os_index;
+ // 在此点之下插入创建对象所需的代码。
+ }
+ catch
+ {
+ actbtn.Dispatcher.Invoke(new Action(() =>
+ {
+ DialogWithExit.IsOpen = true;
+ }));
+ }
+ actbtn.Dispatcher.Invoke(new Action(() =>
+ {
+ DialogWait.IsOpen = false;
+ }));
+
+ }
+ private void Button_Click(object sender, RoutedEventArgs e)
+ {
+ Thread actthread = new Thread(RunAct);
+ actthread.Start();
+
+ //RunAct();
+ //LoadOSList();
+
+ //MessageBox.Show(json);
+ //MessageBox.Show(rss["OS"][0].ToString());
+ //MessageBox.Show(SystemEdition);
+ }
+ private string GetHttpWebRequest(string url)
+ {
+ Uri uri = new Uri(url);
+ HttpWebRequest myReq = (HttpWebRequest)WebRequest.Create(uri);
+ myReq.UserAgent = "User-Agent:Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705";
+ myReq.Accept = "*/*";
+ myReq.KeepAlive = true;
+ myReq.Headers.Add("Accept-Language", "zh-cn,en-us;q=0.5");
+ HttpWebResponse result = (HttpWebResponse)myReq.GetResponse();
+ Stream receviceStream = result.GetResponseStream();
+ StreamReader readerOfStream = new StreamReader(receviceStream, System.Text.Encoding.GetEncoding("utf-8"));
+ string strHTML = readerOfStream.ReadToEnd();
+ readerOfStream.Close();
+ receviceStream.Close();
+ result.Close();
+ return strHTML;
+ }
+
+ private void Exit_Button_Click(object sender, RoutedEventArgs e)
+ {
+ Application.Current.Shutdown();
+ }
+
+ private void RunAct()
+ {
+ actbtn.Dispatcher.Invoke(new Action(() =>
+ {
+ this.DialogActProg.IsOpen = true;
+ this.activatingtext.Text = "Activating";
+ }));
+
+ Wow64EnableWow64FsRedirection(false);//关闭文件重定向
+
+ string code = "-0";
+ string key = "00000-00000-00000-00000-00000";
+ string sku = "0";
+ string msg = "Unknow Error!";
+ string system = "";
+ actbtn.Dispatcher.Invoke(new Action(() =>
+ {
+ system = this.SystemEditionText.Text;
+ }));
+
+
+ string slmgr = Environment.GetFolderPath(Environment.SpecialFolder.SystemX86) + "\\slmgr.vbs";
+ string slmgr_self = System.AppDomain.CurrentDomain.BaseDirectory + "slmgr.vbs";
+
+ string changepk = Environment.SystemDirectory + "\\changepk.exe";
+
+ actbtn.Dispatcher.Invoke(new Action(() =>
+ {
+ this.activatingtext.Text = "Getting Key";
+ }));
+
+ //获取密钥和SKU
+ try
+ {
+
+ string json = GetHttpWebRequest("https://kms.kumo.moe/api/digital?list=0");
+ JObject jsonobj = JObject.Parse(json);
+ List list = new List();
+ ositems = (JArray)jsonobj["OS"];
+ key = jsonobj[system]["key"].ToString();
+ sku = jsonobj[system]["sku"].ToString();
+ Console.WriteLine("Edition:" + system + "\r\nSKU:" + key + "\r\nSKU:" + sku);
+
+ }
+ catch
+ {
+ code = "-0";
+ msg = "激活Windows10需要网络获取产品密钥 :) \nActivate Windows 10 requires a network to gets the product key :)";
+ goto EndLine;
+ }
+ actbtn.Dispatcher.Invoke(new Action(() =>
+ {
+ this.activatingtext.Text = "Uninstalling old Key";
+ }));
+ //卸载
+ string runend = RunCScript(slmgr_self, "-upk").Trim();
+ Console.WriteLine(runend);
+ if (runend.EndsWith("successfully.") || runend.EndsWith("not found."))
+ {
+
+ RunCScript(slmgr_self, "-ckms").Trim();
+
+ //写入Win7特征
+ //ChangePKAction(changepk + " /ProductKey " + key);
+
+ actbtn.Dispatcher.Invoke(new Action(() =>
+ {
+ this.activatingtext.Text = "Writing feature of old Windows version";
+ }));
+
+ RunCMD(@"reg add ""HKLM\SYSTEM\Tokens"" /v ""Channel"" /t REG_SZ /d ""Retail"" /f");
+ RunCMD(@"reg add ""HKLM\SYSTEM\Tokens\Kernel"" /v ""Kernel-ProductInfo"" /t REG_DWORD /d " + sku + " /f");
+ RunCMD(@"reg add ""HKLM\SYSTEM\Tokens\Kernel"" /v ""Security-SPP-GenuineLocalStatus"" /t REG_DWORD /d 1 /f");
+ RunCMD(@"reg add ""HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers"" /v ""C:\gatherosstate.exe"" /d ""~ WIN7RTM"" /f");
+
+ actbtn.Dispatcher.Invoke(new Action(() =>
+ {
+ this.activatingtext.Text = "Installing Key";
+ }));
+
+ //安装数字权利升级密钥
+ if (RunCScript(slmgr_self, "-ipk " + key).Trim().EndsWith("successfully."))
+ {
+
+ actbtn.Dispatcher.Invoke(new Action(() =>
+ {
+ this.activatingtext.Text = "Getting free upgrade permissions";
+ }));
+
+ RunCMD(System.AppDomain.CurrentDomain.BaseDirectory + "gatherosstate.exe");
+
+ for (int i = 0; i < 3 || !File.Exists(System.AppDomain.CurrentDomain.BaseDirectory + "GenuineTicket.xml"); i++)
+ {
+ Thread.Sleep(3000);
+ }
+
+ if (File.Exists(System.AppDomain.CurrentDomain.BaseDirectory + "GenuineTicket.xml"))
+ {
+
+ actbtn.Dispatcher.Invoke(new Action(() =>
+ {
+ this.activatingtext.Text = "Cleaning changes";
+ }));
+
+ RunCMD(@"reg delete ""HKLM\SYSTEM\Tokens"" /f");
+ RunCMD(@"reg delete ""HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers"" /v ""C:\gatherosstate.exe"" /f");
+
+ actbtn.Dispatcher.Invoke(new Action(() =>
+ {
+ this.activatingtext.Text = "Getting digital license";
+ }));
+
+ Wow64EnableWow64FsRedirection(false);//关闭文件重定向
+ RunCMD(Environment.SystemDirectory + @"\ClipUp.exe -v -o -altto " + System.AppDomain.CurrentDomain.BaseDirectory);
+
+ actbtn.Dispatcher.Invoke(new Action(() =>
+ {
+ this.activatingtext.Text = "Activating";
+ }));
+
+ runend = RunCScript(slmgr_self, "-ato").Trim();
+ if (runend.EndsWith("060' to display the error text.") || runend.EndsWith("successfully.") || runend.EndsWith("to display the error text."))
+ {
+ code = "200";
+ }
+ else
+ {
+ code = "-4";
+ msg = "激活失败 :(\nActivation Failed. :(";
+ }
+ }
+ else
+ {
+ code = "-3";
+ msg = "执行超时,可能没有选择正确的版本 :(\nTime out, may be you choose a incorrect version. :(";
+ }
+ }
+ else
+ {
+ code = "-2";
+ msg = "无法安装密钥,可能没有选择正确的版本 :(\nCannot to install key, may be you choose a incorrect version. :(";
+ }
+ }
+ else
+ {
+ code = "-1";
+ msg = "无法卸载旧密钥 :(\nCannot to uninstall old key. :(";
+ }
+ //string runend = RunCScript(slmgr_self, "-upk").Trim();
+ EndLine:;
+ if (code != "200")
+ {
+ actbtn.Dispatcher.Invoke(new Action(() =>
+ {
+ this.DialogActProg.IsOpen = false;
+ this.activatingtext.Text = "Activating";
+ this.DialogWithOKToCloseDialog.IsOpen = true;
+ this.DialogWithOKToCloseDialogTitle.Text = "Error";
+ this.DialogWithOKToCloseDialogText.Text = msg + "\r\nCode:" + code;
+ }));
+ //MessageBox.Show(msg + "\r\nCode:" + code);
+ }
+ else
+ {
+ actbtn.Dispatcher.Invoke(new Action(() =>
+ {
+ this.DialogActProg.IsOpen = false;
+ this.activatingtext.Text = "Activating";
+ this.DialogWithOKToCloseDialogDonate.IsOpen = true;
+ //this.DialogWithOKToCloseDialogDonateTitle.Text = "Complete";
+ //this.DialogWithOKToCloseDialogDonateText.Text = "Congratulation!";
+ }));
+ //MessageBox.Show("Congratulation!");
+ }
+ }
+
+ private void RunCMD(string var)
+ {
+ Wow64EnableWow64FsRedirection(false);//关闭文件重定向
+ System.Diagnostics.Process p = new System.Diagnostics.Process();
+ p.StartInfo.FileName = "cmd.exe";//要执行的程序名称
+ p.StartInfo.WorkingDirectory = System.AppDomain.CurrentDomain.BaseDirectory;
+ p.StartInfo.UseShellExecute = false;
+ p.StartInfo.RedirectStandardInput = true;//可能接受来自调用程序的输入信息
+ p.StartInfo.RedirectStandardOutput = true;//由调用程序获取输出信息
+ p.StartInfo.CreateNoWindow = true;//不显示程序窗口
+ p.Start();//启动程序
+ //向CMD窗口发送输入信息:
+ p.StandardInput.WriteLine(var); //10秒后重启(C#中可不好做哦)
+ Console.WriteLine(var);
+ //Wow64EnableWow64FsRedirection(false);//关闭文件重定向
+ //System.Diagnostics.Process.Start(var);
+ }
+
+ public static string RunCScript(string path, string var = "")
+ {
+ Wow64EnableWow64FsRedirection(false);//关闭文件重定向
+ //执行命令行函数
+ try
+ {
+ System.Diagnostics.Process myProcess = new System.Diagnostics.Process();
+ System.Diagnostics.ProcessStartInfo myProcessStartInfo = new System.Diagnostics.ProcessStartInfo("CScript", "//Nologo \"" + path + "\" " + var);
+ myProcessStartInfo.UseShellExecute = false;
+ myProcessStartInfo.RedirectStandardOutput = true;
+ myProcessStartInfo.CreateNoWindow = true;
+ //myProcessStartInfo.Arguments = "/c chcp 65001 > nul && cmd /c \"" + PHPRuntimePath + "\" \"" + path + "\" " + var;
+ //myProcessStartInfo.Arguments = "/c " & Commands
+ myProcessStartInfo.StandardOutputEncoding = Encoding.UTF8;
+ myProcess.StartInfo = myProcessStartInfo;
+ myProcess.Start();
+ myProcess.WaitForExit(120 * 1000);
+ System.IO.StreamReader myStreamReader = myProcess.StandardOutput;
+ string myString = myStreamReader.ReadToEnd();
+ myProcess.Close();
+ return myString;
+ }
+ catch
+ {
+ return "Error";
+ }
+ }
+
+ private void Donate_Button_Click(object sender, RoutedEventArgs e)
+ {
+ System.Diagnostics.Process.Start("https://waxel.cloudmoe.com/donate/");
+ this.DialogWithOKToCloseDialogDonate.IsOpen = false;
+ }
+ }
+}
diff --git a/CMWTAT_DIGITAL/OSVersionInfoClass.cs b/CMWTAT_DIGITAL/OSVersionInfoClass.cs
new file mode 100644
index 0000000..8f292a8
--- /dev/null
+++ b/CMWTAT_DIGITAL/OSVersionInfoClass.cs
@@ -0,0 +1,1089 @@
+using Microsoft.Win32;
+using System;
+using System.Diagnostics;
+using System.Runtime.InteropServices;
+
+// http://www.codeproject.com/Articles/73000/Getting-Operating-System-Version-Info-Even-for-Win
+//https://en.wikipedia.org/wiki/List_of_Microsoft_Windows_versions
+
+//Thanks to Member 7861383, Scott Vickery for the Windows 8.1 update and workaround.
+//I have moved it to the beginning of the Name property, though...
+
+//Thakts to Brisingr Aerowing for help with the Windows 10 adapatation
+
+namespace OSVersionInfoClass
+{
+ ///
+ /// Provides detailed information about the host operating system.
+ ///
+ public static class OSVersionInfo
+ {
+ #region ENUMS
+ public enum SoftwareArchitecture
+ {
+ Unknown = 0,
+ Bit32 = 1,
+ Bit64 = 2
+ }
+
+ public enum ProcessorArchitecture
+ {
+ Unknown = 0,
+ Bit32 = 1,
+ Bit64 = 2,
+ Itanium64 = 3
+ }
+ #endregion ENUMS
+
+ #region DELEGATE DECLARATION
+ private delegate bool IsWow64ProcessDelegate([In] IntPtr handle, [Out] out bool isWow64Process);
+ #endregion DELEGATE DECLARATION
+
+ #region BITS
+ ///
+ /// Determines if the current application is 32 or 64-bit.
+ ///
+ static public SoftwareArchitecture ProgramBits
+ {
+ get
+ {
+ SoftwareArchitecture pbits = SoftwareArchitecture.Unknown;
+
+ System.Collections.IDictionary test = Environment.GetEnvironmentVariables();
+
+ switch (IntPtr.Size * 8)
+ {
+ case 64:
+ pbits = SoftwareArchitecture.Bit64;
+ break;
+
+ case 32:
+ pbits = SoftwareArchitecture.Bit32;
+ break;
+
+ default:
+ pbits = SoftwareArchitecture.Unknown;
+ break;
+ }
+
+ return pbits;
+ }
+ }
+
+ static public SoftwareArchitecture OSBits
+ {
+ get
+ {
+ SoftwareArchitecture osbits = SoftwareArchitecture.Unknown;
+
+ switch (IntPtr.Size * 8)
+ {
+ case 64:
+ osbits = SoftwareArchitecture.Bit64;
+ break;
+
+ case 32:
+ if (Is32BitProcessOn64BitProcessor())
+ osbits = SoftwareArchitecture.Bit64;
+ else
+ osbits = SoftwareArchitecture.Bit32;
+ break;
+
+ default:
+ osbits = SoftwareArchitecture.Unknown;
+ break;
+ }
+
+ return osbits;
+ }
+ }
+
+ ///
+ /// Determines if the current processor is 32 or 64-bit.
+ ///
+ static public ProcessorArchitecture ProcessorBits
+ {
+ get
+ {
+ ProcessorArchitecture pbits = ProcessorArchitecture.Unknown;
+
+ try
+ {
+ SYSTEM_INFO l_System_Info = new SYSTEM_INFO();
+ GetNativeSystemInfo(ref l_System_Info);
+
+ switch (l_System_Info.uProcessorInfo.wProcessorArchitecture)
+ {
+ case 9: // PROCESSOR_ARCHITECTURE_AMD64
+ pbits = ProcessorArchitecture.Bit64;
+ break;
+ case 6: // PROCESSOR_ARCHITECTURE_IA64
+ pbits = ProcessorArchitecture.Itanium64;
+ break;
+ case 0: // PROCESSOR_ARCHITECTURE_INTEL
+ pbits = ProcessorArchitecture.Bit32;
+ break;
+ default: // PROCESSOR_ARCHITECTURE_UNKNOWN
+ pbits = ProcessorArchitecture.Unknown;
+ break;
+ }
+ }
+ catch
+ {
+ // Ignore
+ }
+
+ return pbits;
+ }
+ }
+ #endregion BITS
+
+ #region EDITION
+ static private string s_Edition;
+ ///
+ /// Gets the edition of the operating system running on this computer.
+ ///
+ static public string Edition
+ {
+ get
+ {
+ if (s_Edition != null)
+ return s_Edition; //***** RETURN *****//
+
+ string edition = String.Empty;
+
+ OperatingSystem osVersion = Environment.OSVersion;
+ OSVERSIONINFOEX osVersionInfo = new OSVERSIONINFOEX();
+ osVersionInfo.dwOSVersionInfoSize = Marshal.SizeOf(typeof(OSVERSIONINFOEX));
+
+ if (GetVersionEx(ref osVersionInfo))
+ {
+ int majorVersion = osVersion.Version.Major;
+ int minorVersion = osVersion.Version.Minor;
+ byte productType = osVersionInfo.wProductType;
+ short suiteMask = osVersionInfo.wSuiteMask;
+
+ #region VERSION 4
+ if (majorVersion == 4)
+ {
+ if (productType == VER_NT_WORKSTATION)
+ {
+ // Windows NT 4.0 Workstation
+ edition = "Workstation";
+ }
+ else if (productType == VER_NT_SERVER)
+ {
+ if ((suiteMask & VER_SUITE_ENTERPRISE) != 0)
+ {
+ // Windows NT 4.0 Server Enterprise
+ edition = "Enterprise Server";
+ }
+ else
+ {
+ // Windows NT 4.0 Server
+ edition = "Standard Server";
+ }
+ }
+ }
+ #endregion VERSION 4
+
+ #region VERSION 5
+ else if (majorVersion == 5)
+ {
+ if (productType == VER_NT_WORKSTATION)
+ {
+ if ((suiteMask & VER_SUITE_PERSONAL) != 0)
+ {
+ edition = "Home";
+ }
+ else
+ {
+ if (GetSystemMetrics(86) == 0) // 86 == SM_TABLETPC
+ edition = "Professional";
+ else
+ edition = "Tablet Edition";
+ }
+ }
+ else if (productType == VER_NT_SERVER)
+ {
+ if (minorVersion == 0)
+ {
+ if ((suiteMask & VER_SUITE_DATACENTER) != 0)
+ {
+ // Windows 2000 Datacenter Server
+ edition = "Datacenter Server";
+ }
+ else if ((suiteMask & VER_SUITE_ENTERPRISE) != 0)
+ {
+ // Windows 2000 Advanced Server
+ edition = "Advanced Server";
+ }
+ else
+ {
+ // Windows 2000 Server
+ edition = "Server";
+ }
+ }
+ else
+ {
+ if ((suiteMask & VER_SUITE_DATACENTER) != 0)
+ {
+ // Windows Server 2003 Datacenter Edition
+ edition = "Datacenter";
+ }
+ else if ((suiteMask & VER_SUITE_ENTERPRISE) != 0)
+ {
+ // Windows Server 2003 Enterprise Edition
+ edition = "Enterprise";
+ }
+ else if ((suiteMask & VER_SUITE_BLADE) != 0)
+ {
+ // Windows Server 2003 Web Edition
+ edition = "Web Edition";
+ }
+ else
+ {
+ // Windows Server 2003 Standard Edition
+ edition = "Standard";
+ }
+ }
+ }
+ }
+ #endregion VERSION 5
+
+ #region VERSION 6
+ else if (majorVersion == 6)
+ {
+ int ed;
+ if (GetProductInfo(majorVersion, minorVersion,
+ osVersionInfo.wServicePackMajor, osVersionInfo.wServicePackMinor,
+ out ed))
+ {
+ switch (ed)
+ {
+ case PRODUCT_BUSINESS:
+ edition = "Business";
+ break;
+ case PRODUCT_BUSINESS_N:
+ edition = "Business N";
+ break;
+ case PRODUCT_CLUSTER_SERVER:
+ edition = "HPC Edition";
+ break;
+ case PRODUCT_CLUSTER_SERVER_V:
+ edition = "HPC Edition without Hyper-V";
+ break;
+ case PRODUCT_DATACENTER_SERVER:
+ edition = "Datacenter Server";
+ break;
+ case PRODUCT_DATACENTER_SERVER_CORE:
+ edition = "Datacenter Server (core installation)";
+ break;
+ case PRODUCT_DATACENTER_SERVER_V:
+ edition = "Datacenter Server without Hyper-V";
+ break;
+ case PRODUCT_DATACENTER_SERVER_CORE_V:
+ edition = "Datacenter Server without Hyper-V (core installation)";
+ break;
+ case PRODUCT_EMBEDDED:
+ edition = "Embedded";
+ break;
+ case PRODUCT_ENTERPRISE:
+ edition = "Enterprise";
+ break;
+ case PRODUCT_ENTERPRISE_N:
+ edition = "Enterprise N";
+ break;
+ case PRODUCT_ENTERPRISE_E:
+ edition = "Enterprise E";
+ break;
+ case PRODUCT_ENTERPRISE_SERVER:
+ edition = "Enterprise Server";
+ break;
+ case PRODUCT_ENTERPRISE_SERVER_CORE:
+ edition = "Enterprise Server (core installation)";
+ break;
+ case PRODUCT_ENTERPRISE_SERVER_CORE_V:
+ edition = "Enterprise Server without Hyper-V (core installation)";
+ break;
+ case PRODUCT_ENTERPRISE_SERVER_IA64:
+ edition = "Enterprise Server for Itanium-based Systems";
+ break;
+ case PRODUCT_ENTERPRISE_SERVER_V:
+ edition = "Enterprise Server without Hyper-V";
+ break;
+ case PRODUCT_ESSENTIALBUSINESS_SERVER_MGMT:
+ edition = "Essential Business Server MGMT";
+ break;
+ case PRODUCT_ESSENTIALBUSINESS_SERVER_ADDL:
+ edition = "Essential Business Server ADDL";
+ break;
+ case PRODUCT_ESSENTIALBUSINESS_SERVER_MGMTSVC:
+ edition = "Essential Business Server MGMTSVC";
+ break;
+ case PRODUCT_ESSENTIALBUSINESS_SERVER_ADDLSVC:
+ edition = "Essential Business Server ADDLSVC";
+ break;
+ case PRODUCT_HOME_BASIC:
+ edition = "Home Basic";
+ break;
+ case PRODUCT_HOME_BASIC_N:
+ edition = "Home Basic N";
+ break;
+ case PRODUCT_HOME_BASIC_E:
+ edition = "Home Basic E";
+ break;
+ case PRODUCT_HOME_PREMIUM:
+ edition = "Home Premium";
+ break;
+ case PRODUCT_HOME_PREMIUM_N:
+ edition = "Home Premium N";
+ break;
+ case PRODUCT_HOME_PREMIUM_E:
+ edition = "Home Premium E";
+ break;
+ case PRODUCT_HOME_PREMIUM_SERVER:
+ edition = "Home Premium Server";
+ break;
+ case PRODUCT_HYPERV:
+ edition = "Microsoft Hyper-V Server";
+ break;
+ case PRODUCT_MEDIUMBUSINESS_SERVER_MANAGEMENT:
+ edition = "Windows Essential Business Management Server";
+ break;
+ case PRODUCT_MEDIUMBUSINESS_SERVER_MESSAGING:
+ edition = "Windows Essential Business Messaging Server";
+ break;
+ case PRODUCT_MEDIUMBUSINESS_SERVER_SECURITY:
+ edition = "Windows Essential Business Security Server";
+ break;
+ case PRODUCT_PROFESSIONAL:
+ edition = "Professional";
+ break;
+ case PRODUCT_PROFESSIONAL_N:
+ edition = "Professional N";
+ break;
+ case PRODUCT_PROFESSIONAL_E:
+ edition = "Professional E";
+ break;
+ case PRODUCT_SB_SOLUTION_SERVER:
+ edition = "SB Solution Server";
+ break;
+ case PRODUCT_SB_SOLUTION_SERVER_EM:
+ edition = "SB Solution Server EM";
+ break;
+ case PRODUCT_SERVER_FOR_SB_SOLUTIONS:
+ edition = "Server for SB Solutions";
+ break;
+ case PRODUCT_SERVER_FOR_SB_SOLUTIONS_EM:
+ edition = "Server for SB Solutions EM";
+ break;
+ case PRODUCT_SERVER_FOR_SMALLBUSINESS:
+ edition = "Windows Essential Server Solutions";
+ break;
+ case PRODUCT_SERVER_FOR_SMALLBUSINESS_V:
+ edition = "Windows Essential Server Solutions without Hyper-V";
+ break;
+ case PRODUCT_SERVER_FOUNDATION:
+ edition = "Server Foundation";
+ break;
+ case PRODUCT_SMALLBUSINESS_SERVER:
+ edition = "Windows Small Business Server";
+ break;
+ case PRODUCT_SMALLBUSINESS_SERVER_PREMIUM:
+ edition = "Windows Small Business Server Premium";
+ break;
+ case PRODUCT_SMALLBUSINESS_SERVER_PREMIUM_CORE:
+ edition = "Windows Small Business Server Premium (core installation)";
+ break;
+ case PRODUCT_SOLUTION_EMBEDDEDSERVER:
+ edition = "Solution Embedded Server";
+ break;
+ case PRODUCT_SOLUTION_EMBEDDEDSERVER_CORE:
+ edition = "Solution Embedded Server (core installation)";
+ break;
+ case PRODUCT_STANDARD_SERVER:
+ edition = "Standard Server";
+ break;
+ case PRODUCT_STANDARD_SERVER_CORE:
+ edition = "Standard Server (core installation)";
+ break;
+ case PRODUCT_STANDARD_SERVER_SOLUTIONS:
+ edition = "Standard Server Solutions";
+ break;
+ case PRODUCT_STANDARD_SERVER_SOLUTIONS_CORE:
+ edition = "Standard Server Solutions (core installation)";
+ break;
+ case PRODUCT_STANDARD_SERVER_CORE_V:
+ edition = "Standard Server without Hyper-V (core installation)";
+ break;
+ case PRODUCT_STANDARD_SERVER_V:
+ edition = "Standard Server without Hyper-V";
+ break;
+ case PRODUCT_STARTER:
+ edition = "Starter";
+ break;
+ case PRODUCT_STARTER_N:
+ edition = "Starter N";
+ break;
+ case PRODUCT_STARTER_E:
+ edition = "Starter E";
+ break;
+ case PRODUCT_STORAGE_ENTERPRISE_SERVER:
+ edition = "Enterprise Storage Server";
+ break;
+ case PRODUCT_STORAGE_ENTERPRISE_SERVER_CORE:
+ edition = "Enterprise Storage Server (core installation)";
+ break;
+ case PRODUCT_STORAGE_EXPRESS_SERVER:
+ edition = "Express Storage Server";
+ break;
+ case PRODUCT_STORAGE_EXPRESS_SERVER_CORE:
+ edition = "Express Storage Server (core installation)";
+ break;
+ case PRODUCT_STORAGE_STANDARD_SERVER:
+ edition = "Standard Storage Server";
+ break;
+ case PRODUCT_STORAGE_STANDARD_SERVER_CORE:
+ edition = "Standard Storage Server (core installation)";
+ break;
+ case PRODUCT_STORAGE_WORKGROUP_SERVER:
+ edition = "Workgroup Storage Server";
+ break;
+ case PRODUCT_STORAGE_WORKGROUP_SERVER_CORE:
+ edition = "Workgroup Storage Server (core installation)";
+ break;
+ case PRODUCT_UNDEFINED:
+ edition = "Unknown product";
+ break;
+ case PRODUCT_ULTIMATE:
+ edition = "Ultimate";
+ break;
+ case PRODUCT_ULTIMATE_N:
+ edition = "Ultimate N";
+ break;
+ case PRODUCT_ULTIMATE_E:
+ edition = "Ultimate E";
+ break;
+ case PRODUCT_WEB_SERVER:
+ edition = "Web Server";
+ break;
+ case PRODUCT_WEB_SERVER_CORE:
+ edition = "Web Server (core installation)";
+ break;
+ }
+ }
+ }
+ #endregion VERSION 6
+ }
+
+ s_Edition = edition;
+ return edition;
+ }
+ }
+ #endregion EDITION
+
+ #region NAME
+ static private string s_Name;
+ ///
+ /// Gets the name of the operating system running on this computer.
+ ///
+ static public string Name
+ {
+ get
+ {
+ if (s_Name != null)
+ return s_Name; //***** RETURN *****//
+
+ string name = "unknown";
+
+ OperatingSystem osVersion = Environment.OSVersion;
+ OSVERSIONINFOEX osVersionInfo = new OSVERSIONINFOEX();
+ osVersionInfo.dwOSVersionInfoSize = Marshal.SizeOf(typeof(OSVERSIONINFOEX));
+
+ if (GetVersionEx(ref osVersionInfo))
+ {
+ int majorVersion = osVersion.Version.Major;
+ int minorVersion = osVersion.Version.Minor;
+
+ if (majorVersion == 6 && minorVersion == 2)
+ {
+ //The registry read workaround is by Scott Vickery. Thanks a lot for the help!
+
+ //http://msdn.microsoft.com/en-us/library/windows/desktop/ms724832(v=vs.85).aspx
+
+ // For applications that have been manifested for Windows 8.1 & Windows 10. Applications not manifested for 8.1 or 10 will return the Windows 8 OS version value (6.2).
+ // By reading the registry, we'll get the exact version - meaning we can even compare against Win 8 and Win 8.1.
+ string exactVersion = RegistryRead(@"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion", "CurrentVersion", "");
+ if (!string.IsNullOrEmpty(exactVersion))
+ {
+ string[] splitResult = exactVersion.Split('.');
+ majorVersion = Convert.ToInt32(splitResult[0]);
+ minorVersion = Convert.ToInt32(splitResult[1]);
+ }
+ if (IsWindows10())
+ {
+ majorVersion = 10;
+ minorVersion = 0;
+ }
+ }
+
+ switch (osVersion.Platform)
+ {
+ case PlatformID.Win32S:
+ name = "Windows 3.1";
+ break;
+ case PlatformID.WinCE:
+ name = "Windows CE";
+ break;
+ case PlatformID.Win32Windows:
+ {
+ if (majorVersion == 4)
+ {
+ string csdVersion = osVersionInfo.szCSDVersion;
+ switch (minorVersion)
+ {
+ case 0:
+ if (csdVersion == "B" || csdVersion == "C")
+ name = "Windows 95 OSR2";
+ else
+ name = "Windows 95";
+ break;
+ case 10:
+ if (csdVersion == "A")
+ name = "Windows 98 Second Edition";
+ else
+ name = "Windows 98";
+ break;
+ case 90:
+ name = "Windows Me";
+ break;
+ }
+ }
+ break;
+ }
+ case PlatformID.Win32NT:
+ {
+ byte productType = osVersionInfo.wProductType;
+
+ switch (majorVersion)
+ {
+ case 3:
+ name = "Windows NT 3.51";
+ break;
+ case 4:
+ switch (productType)
+ {
+ case 1:
+ name = "Windows NT 4.0";
+ break;
+ case 3:
+ name = "Windows NT 4.0 Server";
+ break;
+ }
+ break;
+ case 5:
+ switch (minorVersion)
+ {
+ case 0:
+ name = "Windows 2000";
+ break;
+ case 1:
+ name = "Windows XP";
+ break;
+ case 2:
+ name = "Windows Server 2003";
+ break;
+ }
+ break;
+ case 6:
+ switch (minorVersion)
+ {
+ case 0:
+ switch (productType)
+ {
+ case 1:
+ name = "Windows Vista";
+ break;
+ case 3:
+ name = "Windows Server 2008";
+ break;
+ }
+ break;
+
+ case 1:
+ switch (productType)
+ {
+ case 1:
+ name = "Windows 7";
+ break;
+ case 3:
+ name = "Windows Server 2008 R2";
+ break;
+ }
+ break;
+ case 2:
+ switch (productType)
+ {
+ case 1:
+ name = "Windows 8";
+ break;
+ case 3:
+ name = "Windows Server 2012";
+ break;
+ }
+ break;
+ case 3:
+ switch (productType)
+ {
+ case 1:
+ name = "Windows 8.1";
+ break;
+ case 3:
+ name = "Windows Server 2012 R2";
+ break;
+ }
+ break;
+ }
+ break;
+ case 10:
+ switch (minorVersion)
+ {
+ case 0:
+ switch (productType)
+ {
+ case 1:
+ name = "Windows 10";
+ break;
+ case 3:
+ name = "Windows Server 2016";
+ break;
+ }
+ break;
+ }
+ break;
+ }
+ break;
+ }
+ }
+ }
+
+ s_Name = name;
+ return name;
+ }
+ }
+ #endregion NAME
+
+ #region PINVOKE
+
+ #region GET
+ #region PRODUCT INFO
+ [DllImport("Kernel32.dll")]
+ internal static extern bool GetProductInfo(
+ int osMajorVersion,
+ int osMinorVersion,
+ int spMajorVersion,
+ int spMinorVersion,
+ out int edition);
+ #endregion PRODUCT INFO
+
+ #region VERSION
+ [DllImport("kernel32.dll")]
+ private static extern bool GetVersionEx(ref OSVERSIONINFOEX osVersionInfo);
+ #endregion VERSION
+
+ #region SYSTEMMETRICS
+ [DllImport("user32")]
+ public static extern int GetSystemMetrics(int nIndex);
+ #endregion SYSTEMMETRICS
+
+ #region SYSTEMINFO
+ [DllImport("kernel32.dll")]
+ public static extern void GetSystemInfo([MarshalAs(UnmanagedType.Struct)] ref SYSTEM_INFO lpSystemInfo);
+
+ [DllImport("kernel32.dll")]
+ public static extern void GetNativeSystemInfo([MarshalAs(UnmanagedType.Struct)] ref SYSTEM_INFO lpSystemInfo);
+ #endregion SYSTEMINFO
+
+ #endregion GET
+
+ #region OSVERSIONINFOEX
+ [StructLayout(LayoutKind.Sequential)]
+ private struct OSVERSIONINFOEX
+ {
+ public int dwOSVersionInfoSize;
+ public int dwMajorVersion;
+ public int dwMinorVersion;
+ public int dwBuildNumber;
+ public int dwPlatformId;
+ [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)]
+ public string szCSDVersion;
+ public short wServicePackMajor;
+ public short wServicePackMinor;
+ public short wSuiteMask;
+ public byte wProductType;
+ public byte wReserved;
+ }
+ #endregion OSVERSIONINFOEX
+
+ #region SYSTEM_INFO
+ [StructLayout(LayoutKind.Sequential)]
+ public struct SYSTEM_INFO
+ {
+ internal _PROCESSOR_INFO_UNION uProcessorInfo;
+ public uint dwPageSize;
+ public IntPtr lpMinimumApplicationAddress;
+ public IntPtr lpMaximumApplicationAddress;
+ public IntPtr dwActiveProcessorMask;
+ public uint dwNumberOfProcessors;
+ public uint dwProcessorType;
+ public uint dwAllocationGranularity;
+ public ushort dwProcessorLevel;
+ public ushort dwProcessorRevision;
+ }
+ #endregion SYSTEM_INFO
+
+ #region _PROCESSOR_INFO_UNION
+ [StructLayout(LayoutKind.Explicit)]
+ public struct _PROCESSOR_INFO_UNION
+ {
+ [FieldOffset(0)]
+ internal uint dwOemId;
+ [FieldOffset(0)]
+ internal ushort wProcessorArchitecture;
+ [FieldOffset(2)]
+ internal ushort wReserved;
+ }
+ #endregion _PROCESSOR_INFO_UNION
+
+ #region 64 BIT OS DETECTION
+ [DllImport("kernel32", SetLastError = true, CallingConvention = CallingConvention.Winapi)]
+ public extern static IntPtr LoadLibrary(string libraryName);
+
+ [DllImport("kernel32", SetLastError = true, CallingConvention = CallingConvention.Winapi)]
+ public extern static IntPtr GetProcAddress(IntPtr hwnd, string procedureName);
+ #endregion 64 BIT OS DETECTION
+
+ #region PRODUCT
+ private const int PRODUCT_UNDEFINED = 0x00000000;
+ private const int PRODUCT_ULTIMATE = 0x00000001;
+ private const int PRODUCT_HOME_BASIC = 0x00000002;
+ private const int PRODUCT_HOME_PREMIUM = 0x00000003;
+ private const int PRODUCT_ENTERPRISE = 0x00000004;
+ private const int PRODUCT_HOME_BASIC_N = 0x00000005;
+ private const int PRODUCT_BUSINESS = 0x00000006;
+ private const int PRODUCT_STANDARD_SERVER = 0x00000007;
+ private const int PRODUCT_DATACENTER_SERVER = 0x00000008;
+ private const int PRODUCT_SMALLBUSINESS_SERVER = 0x00000009;
+ private const int PRODUCT_ENTERPRISE_SERVER = 0x0000000A;
+ private const int PRODUCT_STARTER = 0x0000000B;
+ private const int PRODUCT_DATACENTER_SERVER_CORE = 0x0000000C;
+ private const int PRODUCT_STANDARD_SERVER_CORE = 0x0000000D;
+ private const int PRODUCT_ENTERPRISE_SERVER_CORE = 0x0000000E;
+ private const int PRODUCT_ENTERPRISE_SERVER_IA64 = 0x0000000F;
+ private const int PRODUCT_BUSINESS_N = 0x00000010;
+ private const int PRODUCT_WEB_SERVER = 0x00000011;
+ private const int PRODUCT_CLUSTER_SERVER = 0x00000012;
+ private const int PRODUCT_HOME_SERVER = 0x00000013;
+ private const int PRODUCT_STORAGE_EXPRESS_SERVER = 0x00000014;
+ private const int PRODUCT_STORAGE_STANDARD_SERVER = 0x00000015;
+ private const int PRODUCT_STORAGE_WORKGROUP_SERVER = 0x00000016;
+ private const int PRODUCT_STORAGE_ENTERPRISE_SERVER = 0x00000017;
+ private const int PRODUCT_SERVER_FOR_SMALLBUSINESS = 0x00000018;
+ private const int PRODUCT_SMALLBUSINESS_SERVER_PREMIUM = 0x00000019;
+ private const int PRODUCT_HOME_PREMIUM_N = 0x0000001A;
+ private const int PRODUCT_ENTERPRISE_N = 0x0000001B;
+ private const int PRODUCT_ULTIMATE_N = 0x0000001C;
+ private const int PRODUCT_WEB_SERVER_CORE = 0x0000001D;
+ private const int PRODUCT_MEDIUMBUSINESS_SERVER_MANAGEMENT = 0x0000001E;
+ private const int PRODUCT_MEDIUMBUSINESS_SERVER_SECURITY = 0x0000001F;
+ private const int PRODUCT_MEDIUMBUSINESS_SERVER_MESSAGING = 0x00000020;
+ private const int PRODUCT_SERVER_FOUNDATION = 0x00000021;
+ private const int PRODUCT_HOME_PREMIUM_SERVER = 0x00000022;
+ private const int PRODUCT_SERVER_FOR_SMALLBUSINESS_V = 0x00000023;
+ private const int PRODUCT_STANDARD_SERVER_V = 0x00000024;
+ private const int PRODUCT_DATACENTER_SERVER_V = 0x00000025;
+ private const int PRODUCT_ENTERPRISE_SERVER_V = 0x00000026;
+ private const int PRODUCT_DATACENTER_SERVER_CORE_V = 0x00000027;
+ private const int PRODUCT_STANDARD_SERVER_CORE_V = 0x00000028;
+ private const int PRODUCT_ENTERPRISE_SERVER_CORE_V = 0x00000029;
+ private const int PRODUCT_HYPERV = 0x0000002A;
+ private const int PRODUCT_STORAGE_EXPRESS_SERVER_CORE = 0x0000002B;
+ private const int PRODUCT_STORAGE_STANDARD_SERVER_CORE = 0x0000002C;
+ private const int PRODUCT_STORAGE_WORKGROUP_SERVER_CORE = 0x0000002D;
+ private const int PRODUCT_STORAGE_ENTERPRISE_SERVER_CORE = 0x0000002E;
+ private const int PRODUCT_STARTER_N = 0x0000002F;
+ private const int PRODUCT_PROFESSIONAL = 0x00000030;
+ private const int PRODUCT_PROFESSIONAL_N = 0x00000031;
+ private const int PRODUCT_SB_SOLUTION_SERVER = 0x00000032;
+ private const int PRODUCT_SERVER_FOR_SB_SOLUTIONS = 0x00000033;
+ private const int PRODUCT_STANDARD_SERVER_SOLUTIONS = 0x00000034;
+ private const int PRODUCT_STANDARD_SERVER_SOLUTIONS_CORE = 0x00000035;
+ private const int PRODUCT_SB_SOLUTION_SERVER_EM = 0x00000036;
+ private const int PRODUCT_SERVER_FOR_SB_SOLUTIONS_EM = 0x00000037;
+ private const int PRODUCT_SOLUTION_EMBEDDEDSERVER = 0x00000038;
+ private const int PRODUCT_SOLUTION_EMBEDDEDSERVER_CORE = 0x00000039;
+ //private const int ???? = 0x0000003A;
+ private const int PRODUCT_ESSENTIALBUSINESS_SERVER_MGMT = 0x0000003B;
+ private const int PRODUCT_ESSENTIALBUSINESS_SERVER_ADDL = 0x0000003C;
+ private const int PRODUCT_ESSENTIALBUSINESS_SERVER_MGMTSVC = 0x0000003D;
+ private const int PRODUCT_ESSENTIALBUSINESS_SERVER_ADDLSVC = 0x0000003E;
+ private const int PRODUCT_SMALLBUSINESS_SERVER_PREMIUM_CORE = 0x0000003F;
+ private const int PRODUCT_CLUSTER_SERVER_V = 0x00000040;
+ private const int PRODUCT_EMBEDDED = 0x00000041;
+ private const int PRODUCT_STARTER_E = 0x00000042;
+ private const int PRODUCT_HOME_BASIC_E = 0x00000043;
+ private const int PRODUCT_HOME_PREMIUM_E = 0x00000044;
+ private const int PRODUCT_PROFESSIONAL_E = 0x00000045;
+ private const int PRODUCT_ENTERPRISE_E = 0x00000046;
+ private const int PRODUCT_ULTIMATE_E = 0x00000047;
+ //private const int PRODUCT_UNLICENSED = 0xABCDABCD;
+ #endregion PRODUCT
+
+ #region VERSIONS
+ private const int VER_NT_WORKSTATION = 1;
+ private const int VER_NT_DOMAIN_CONTROLLER = 2;
+ private const int VER_NT_SERVER = 3;
+ private const int VER_SUITE_SMALLBUSINESS = 1;
+ private const int VER_SUITE_ENTERPRISE = 2;
+ private const int VER_SUITE_TERMINAL = 16;
+ private const int VER_SUITE_DATACENTER = 128;
+ private const int VER_SUITE_SINGLEUSERTS = 256;
+ private const int VER_SUITE_PERSONAL = 512;
+ private const int VER_SUITE_BLADE = 1024;
+ #endregion VERSIONS
+
+ #endregion PINVOKE
+
+ #region SERVICE PACK
+ ///
+ /// Gets the service pack information of the operating system running on this computer.
+ ///
+ static public string ServicePack
+ {
+ get
+ {
+ string servicePack = String.Empty;
+ OSVERSIONINFOEX osVersionInfo = new OSVERSIONINFOEX();
+
+ osVersionInfo.dwOSVersionInfoSize = Marshal.SizeOf(typeof(OSVERSIONINFOEX));
+
+ if (GetVersionEx(ref osVersionInfo))
+ {
+ servicePack = osVersionInfo.szCSDVersion;
+ }
+
+ return servicePack;
+ }
+ }
+ #endregion SERVICE PACK
+
+ #region VERSION
+ #region BUILD
+ ///
+ /// Gets the build version number of the operating system running on this computer.
+ ///
+ static public int BuildVersion
+ {
+ get
+ {
+ return int.Parse(RegistryRead(@"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion", "CurrentBuildNumber", "0"));
+ }
+ }
+ #endregion BUILD
+
+ #region FULL
+ #region STRING
+ ///
+ /// Gets the full version string of the operating system running on this computer.
+ ///
+ static public string VersionString
+ {
+ get
+ {
+ return Version.ToString();
+ }
+ }
+ #endregion STRING
+
+ #region VERSION
+ ///
+ /// Gets the full version of the operating system running on this computer.
+ ///
+ static public Version Version
+ {
+ get
+ {
+ return new Version(MajorVersion, MinorVersion, BuildVersion, RevisionVersion);
+ }
+ }
+ #endregion VERSION
+ #endregion FULL
+
+ #region MAJOR
+ ///
+ /// Gets the major version number of the operating system running on this computer.
+ ///
+ static public int MajorVersion
+ {
+ get
+ {
+ if(IsWindows10())
+ {
+ return 10;
+ }
+ string exactVersion = RegistryRead(@"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion", "CurrentVersion", "");
+ if(!string.IsNullOrEmpty(exactVersion))
+ {
+ string[] splitVersion = exactVersion.Split('.');
+ return int.Parse(splitVersion[0]);
+ }
+ return Environment.OSVersion.Version.Major;
+ }
+ }
+ #endregion MAJOR
+
+ #region MINOR
+ ///
+ /// Gets the minor version number of the operating system running on this computer.
+ ///
+ static public int MinorVersion
+ {
+ get
+ {
+ if (IsWindows10())
+ {
+ return 0;
+ }
+ string exactVersion = RegistryRead(@"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion", "CurrentVersion", "");
+ if (!string.IsNullOrEmpty(exactVersion))
+ {
+ string[] splitVersion = exactVersion.Split('.');
+ return int.Parse(splitVersion[1]);
+ }
+ return Environment.OSVersion.Version.Minor;
+ }
+ }
+ #endregion MINOR
+
+ #region REVISION
+ ///
+ /// Gets the revision version number of the operating system running on this computer.
+ ///
+ static public int RevisionVersion
+ {
+ get
+ {
+ if(IsWindows10())
+ {
+ return 0;
+ }
+ return Environment.OSVersion.Version.Revision;
+ }
+ }
+ #endregion REVISION
+ #endregion VERSION
+
+ #region 64 BIT OS DETECTION
+ private static IsWow64ProcessDelegate GetIsWow64ProcessDelegate()
+ {
+ IntPtr handle = LoadLibrary("kernel32");
+
+ if (handle != IntPtr.Zero)
+ {
+ IntPtr fnPtr = GetProcAddress(handle, "IsWow64Process");
+
+ if (fnPtr != IntPtr.Zero)
+ {
+ return (IsWow64ProcessDelegate)Marshal.GetDelegateForFunctionPointer((IntPtr)fnPtr, typeof(IsWow64ProcessDelegate));
+ }
+ }
+
+ return null;
+ }
+
+ private static bool Is32BitProcessOn64BitProcessor()
+ {
+ IsWow64ProcessDelegate fnDelegate = GetIsWow64ProcessDelegate();
+
+ if (fnDelegate == null)
+ {
+ return false;
+ }
+
+ bool isWow64;
+ bool retVal = fnDelegate.Invoke(Process.GetCurrentProcess().Handle, out isWow64);
+
+ if (retVal == false)
+ {
+ return false;
+ }
+
+ return isWow64;
+ }
+ #endregion 64 BIT OS DETECTION
+
+ #region Windows 10 Detection
+
+ private static bool IsWindows10()
+ {
+ string productName = RegistryRead(@"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion", "ProductName", "");
+ if (productName.StartsWith("Windows 10", StringComparison.OrdinalIgnoreCase))
+ {
+ return true;
+ }
+ return false;
+ }
+
+ #endregion
+
+ #region Registry Methods
+
+ private static string RegistryRead(string RegistryPath, string Field, string DefaultValue)
+ {
+ string rtn = "";
+ string backSlash = "";
+ string newRegistryPath = "";
+
+ try
+ {
+ RegistryKey OurKey = null;
+ string[] split_result = RegistryPath.Split('\\');
+
+ if (split_result.Length > 0)
+ {
+ split_result[0] = split_result[0].ToUpper(); // Make the first entry uppercase...
+
+ if (split_result[0] == "HKEY_CLASSES_ROOT") OurKey = Registry.ClassesRoot;
+ else if (split_result[0] == "HKEY_CURRENT_USER") OurKey = Registry.CurrentUser;
+ else if (split_result[0] == "HKEY_LOCAL_MACHINE") OurKey = Registry.LocalMachine;
+ else if (split_result[0] == "HKEY_USERS") OurKey = Registry.Users;
+ else if (split_result[0] == "HKEY_CURRENT_CONFIG") OurKey = Registry.CurrentConfig;
+
+ if (OurKey != null)
+ {
+ for (int i = 1; i < split_result.Length; i++)
+ {
+ newRegistryPath += backSlash + split_result[i];
+ backSlash = "\\";
+ }
+
+ if (newRegistryPath != "")
+ {
+ //rtn = (string)Registry.GetValue(RegistryPath, "CurrentVersion", DefaultValue);
+
+ OurKey = OurKey.OpenSubKey(newRegistryPath);
+ rtn = (string)OurKey.GetValue(Field, DefaultValue);
+ OurKey.Close();
+ }
+ }
+ }
+ }
+ catch { }
+
+ return rtn;
+ }
+
+ #endregion Registry Methods
+ }
+}
diff --git a/CMWTAT_DIGITAL/Properties/AssemblyInfo.cs b/CMWTAT_DIGITAL/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..c82a4a5
--- /dev/null
+++ b/CMWTAT_DIGITAL/Properties/AssemblyInfo.cs
@@ -0,0 +1,55 @@
+using System.Reflection;
+using System.Resources;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+using System.Windows;
+
+// 有关程序集的一般信息由以下
+// 控制。更改这些特性值可修改
+// 与程序集关联的信息。
+[assembly: AssemblyTitle("CMWTAT Digital Edition V2")]
+[assembly: AssemblyDescription("CloudMoe Windows 10 Activation Toolkit V2")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("CloudMoe Network")]
+[assembly: AssemblyProduct("CMWTAT Digital Edition V2")]
+[assembly: AssemblyCopyright("Copyright © CloudMoe Saltfish Studio 2017")]
+[assembly: AssemblyTrademark("CloudMoe Saltfish Studio")]
+[assembly: AssemblyCulture("")]
+
+// 将 ComVisible 设置为 false 会使此程序集中的类型
+//对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型
+//请将此类型的 ComVisible 特性设置为 true。
+[assembly: ComVisible(false)]
+
+//若要开始生成可本地化的应用程序,请设置
+//.csproj 文件中的 CultureYouAreCodingWith
+//例如,如果您在源文件中使用的是美国英语,
+//使用的是美国英语,请将 设置为 en-US。 然后取消
+//对以下 NeutralResourceLanguage 特性的注释。 更新
+//以下行中的“en-US”以匹配项目文件中的 UICulture 设置。
+
+//[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)]
+
+
+[assembly: ThemeInfo(
+ ResourceDictionaryLocation.None, //主题特定资源词典所处位置
+ //(未在页面中找到资源时使用,
+ //或应用程序资源字典中找到时使用)
+ ResourceDictionaryLocation.SourceAssembly //常规资源词典所处位置
+ //(未在页面中找到资源时使用,
+ //、应用程序或任何主题专用资源字典中找到时使用)
+)]
+
+
+// 程序集的版本信息由下列四个值组成:
+//
+// 主版本
+// 次版本
+// 生成号
+// 修订号
+//
+// 可以指定所有值,也可以使用以下所示的 "*" 预置版本号和修订号
+// 方法是按如下所示使用“*”: :
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("2.0.0.0")]
+[assembly: AssemblyFileVersion("2.0.0.0")]
diff --git a/CMWTAT_DIGITAL/Properties/Resources.Designer.cs b/CMWTAT_DIGITAL/Properties/Resources.Designer.cs
new file mode 100644
index 0000000..4db105a
--- /dev/null
+++ b/CMWTAT_DIGITAL/Properties/Resources.Designer.cs
@@ -0,0 +1,63 @@
+//------------------------------------------------------------------------------
+//
+// 此代码由工具生成。
+// 运行时版本:4.0.30319.42000
+//
+// 对此文件的更改可能会导致不正确的行为,并且如果
+// 重新生成代码,这些更改将会丢失。
+//
+//------------------------------------------------------------------------------
+
+namespace CMWTAT_DIGITAL.Properties {
+ using System;
+
+
+ ///
+ /// 一个强类型的资源类,用于查找本地化的字符串等。
+ ///
+ // 此类是由 StronglyTypedResourceBuilder
+ // 类通过类似于 ResGen 或 Visual Studio 的工具自动生成的。
+ // 若要添加或移除成员,请编辑 .ResX 文件,然后重新运行 ResGen
+ // (以 /str 作为命令选项),或重新生成 VS 项目。
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "15.0.0.0")]
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+ internal class Resources {
+
+ private static global::System.Resources.ResourceManager resourceMan;
+
+ private static global::System.Globalization.CultureInfo resourceCulture;
+
+ [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
+ internal Resources() {
+ }
+
+ ///
+ /// 返回此类使用的缓存的 ResourceManager 实例。
+ ///
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ internal static global::System.Resources.ResourceManager ResourceManager {
+ get {
+ if (object.ReferenceEquals(resourceMan, null)) {
+ global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("CMWTAT_DIGITAL.Properties.Resources", typeof(Resources).Assembly);
+ resourceMan = temp;
+ }
+ return resourceMan;
+ }
+ }
+
+ ///
+ /// 使用此强类型资源类,为所有资源查找
+ /// 重写当前线程的 CurrentUICulture 属性。
+ ///
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ internal static global::System.Globalization.CultureInfo Culture {
+ get {
+ return resourceCulture;
+ }
+ set {
+ resourceCulture = value;
+ }
+ }
+ }
+}
diff --git a/CMWTAT_DIGITAL/Properties/Resources.resx b/CMWTAT_DIGITAL/Properties/Resources.resx
new file mode 100644
index 0000000..af7dbeb
--- /dev/null
+++ b/CMWTAT_DIGITAL/Properties/Resources.resx
@@ -0,0 +1,117 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/CMWTAT_DIGITAL/Properties/Settings.Designer.cs b/CMWTAT_DIGITAL/Properties/Settings.Designer.cs
new file mode 100644
index 0000000..bacea9b
--- /dev/null
+++ b/CMWTAT_DIGITAL/Properties/Settings.Designer.cs
@@ -0,0 +1,26 @@
+//------------------------------------------------------------------------------
+//
+// 此代码由工具生成。
+// 运行时版本:4.0.30319.42000
+//
+// 对此文件的更改可能会导致不正确的行为,并且如果
+// 重新生成代码,这些更改将会丢失。
+//
+//------------------------------------------------------------------------------
+
+namespace CMWTAT_DIGITAL.Properties {
+
+
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "15.5.0.0")]
+ internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
+
+ private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
+
+ public static Settings Default {
+ get {
+ return defaultInstance;
+ }
+ }
+ }
+}
diff --git a/CMWTAT_DIGITAL/Properties/Settings.settings b/CMWTAT_DIGITAL/Properties/Settings.settings
new file mode 100644
index 0000000..033d7a5
--- /dev/null
+++ b/CMWTAT_DIGITAL/Properties/Settings.settings
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/CMWTAT_DIGITAL/app.config b/CMWTAT_DIGITAL/app.config
new file mode 100644
index 0000000..51278a4
--- /dev/null
+++ b/CMWTAT_DIGITAL/app.config
@@ -0,0 +1,3 @@
+
+
+
diff --git a/CMWTAT_DIGITAL/app.manifest b/CMWTAT_DIGITAL/app.manifest
new file mode 100644
index 0000000..2b17b0a
--- /dev/null
+++ b/CMWTAT_DIGITAL/app.manifest
@@ -0,0 +1,74 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ true
+
+
+
+
+
+
+
diff --git a/CMWTAT_DIGITAL/packages.config b/CMWTAT_DIGITAL/packages.config
new file mode 100644
index 0000000..da55b4b
--- /dev/null
+++ b/CMWTAT_DIGITAL/packages.config
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/README.md b/README.md
index e95fa3d..65fc53d 100644
--- a/README.md
+++ b/README.md
@@ -1 +1,3 @@
-# CMWTAT_Digital_Edition
+# CloudMoe Windows 10 Activation Toolkit Digital Edition
+This toolkit can activation your windows 10 use digital license.
+*Thanks for s1ave77