aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/PPC/Tango.PPC.Common/OS
diff options
context:
space:
mode:
authorRoy Ben-Shabat <Roy@Twine-s.com>2018-12-18 13:29:22 +0200
committerRoy Ben-Shabat <Roy@Twine-s.com>2018-12-18 13:29:22 +0200
commit45ac8eaf0e03d87c2f9728b2b7c84922c6f6a37d (patch)
treef2cd9f1a268c0ef224279bae1d5e817dcaef1d75 /Software/Visual_Studio/PPC/Tango.PPC.Common/OS
parent79f12332efed3507c2316eef9698e5766be31ff8 (diff)
downloadTango-45ac8eaf0e03d87c2f9728b2b7c84922c6f6a37d.tar.gz
Tango-45ac8eaf0e03d87c2f9728b2b7c84922c6f6a37d.zip
Implemented OS activation + UWF.
Added OSKey to MACHINES table and machine service.
Diffstat (limited to 'Software/Visual_Studio/PPC/Tango.PPC.Common/OS')
-rw-r--r--Software/Visual_Studio/PPC/Tango.PPC.Common/OS/DefaultWindowsActivationManager.cs90
-rw-r--r--Software/Visual_Studio/PPC/Tango.PPC.Common/OS/IWindowsActivationManager.cs33
2 files changed, 123 insertions, 0 deletions
diff --git a/Software/Visual_Studio/PPC/Tango.PPC.Common/OS/DefaultWindowsActivationManager.cs b/Software/Visual_Studio/PPC/Tango.PPC.Common/OS/DefaultWindowsActivationManager.cs
new file mode 100644
index 000000000..2305e24ff
--- /dev/null
+++ b/Software/Visual_Studio/PPC/Tango.PPC.Common/OS/DefaultWindowsActivationManager.cs
@@ -0,0 +1,90 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Management;
+using System.Runtime.InteropServices;
+using System.Text;
+using System.Threading.Tasks;
+using Tango.PPC.Common.Scripting;
+
+namespace Tango.PPC.Common.OS
+{
+ using SLID = Guid; //SLID id declaration as typedef GUID SLID; in slpublic.h
+
+ /// <summary>
+ /// Represents the default windows activation manager.
+ /// </summary>
+ /// <seealso cref="Tango.PPC.Common.OS.IWindowsActivationManager" />
+ public class DefaultWindowsActivationManager : IWindowsActivationManager
+ {
+ private enum SL_GENUINE_STATE
+ {
+ SL_GEN_STATE_IS_GENUINE = 0,
+ SL_GEN_STATE_INVALID_LICENSE = 1,
+ SL_GEN_STATE_TAMPERED = 2,
+ SL_GEN_STATE_OFFLINE = 3,
+ SL_GEN_STATE_LAST = 4
+ }
+
+ [DllImportAttribute("Slwga.dll", EntryPoint = "SLIsGenuineLocal", CharSet = CharSet.None, ExactSpelling = false, SetLastError = false, PreserveSig = true, CallingConvention = CallingConvention.Winapi, BestFitMapping = false, ThrowOnUnmappableChar = false)]
+ [PreserveSigAttribute()]
+ private static extern uint SLIsGenuineLocal(ref SLID slid, [In, Out] ref SL_GENUINE_STATE genuineState, IntPtr val3);
+
+ /// <summary>
+ /// Determines whether the OS is activated.
+ /// </summary>
+ /// <returns></returns>
+ public Task<bool> IsActivated()
+ {
+ return Task.Factory.StartNew<bool>(() =>
+ {
+ Guid ApplicationID = new Guid("55c92734-d682-4d71-983e-d6ec3f16059f"); //Application ID GUID http://technet.microsoft.com/en-us/library/dd772270.aspx
+ SLID windowsSlid = (Guid)ApplicationID;
+ try
+ {
+ SL_GENUINE_STATE genuineState = SL_GENUINE_STATE.SL_GEN_STATE_LAST;
+ uint ResultInt = SLIsGenuineLocal(ref windowsSlid, ref genuineState, IntPtr.Zero);
+ if (ResultInt == 0)
+ {
+ return (genuineState == SL_GENUINE_STATE.SL_GEN_STATE_IS_GENUINE);
+ }
+ else
+ {
+ throw new InvalidOperationException("An error occurred while trying to get the OS activation status.");
+ }
+
+ }
+ catch (Exception ex)
+ {
+ throw ex;
+ }
+ });
+ }
+
+ /// <summary>
+ /// Activates the OS using the specified activation key.
+ /// </summary>
+ /// <param name="activationKey">The activation key.</param>
+ /// <returns></returns>
+ public async Task Activate(string activationKey)
+ {
+ CmdCommand command = new CmdCommand("slmgr", $"-ipk {activationKey}");
+ await command.Run();
+
+ if (!await IsActivated())
+ {
+ throw new ApplicationException("The activation was completed but activation status returned a false response.");
+ }
+ }
+
+ /// <summary>
+ /// Deactivates the OS license.
+ /// </summary>
+ /// <returns></returns>
+ /// <exception cref="System.NotImplementedException"></exception>
+ public Task Deactivate()
+ {
+ throw new NotImplementedException("Deactivating windows license is not supported.");
+ }
+ }
+}
diff --git a/Software/Visual_Studio/PPC/Tango.PPC.Common/OS/IWindowsActivationManager.cs b/Software/Visual_Studio/PPC/Tango.PPC.Common/OS/IWindowsActivationManager.cs
new file mode 100644
index 000000000..2fc79e5bb
--- /dev/null
+++ b/Software/Visual_Studio/PPC/Tango.PPC.Common/OS/IWindowsActivationManager.cs
@@ -0,0 +1,33 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Tango.PPC.Common.OS
+{
+ /// <summary>
+ /// Represents a windows license activation manager.
+ /// </summary>
+ public interface IWindowsActivationManager
+ {
+ /// <summary>
+ /// Determines whether the OS is activated.
+ /// </summary>
+ /// <returns></returns>
+ Task<bool> IsActivated();
+
+ /// <summary>
+ /// Activates the OS using the specified activation key.
+ /// </summary>
+ /// <param name="activationKey">The activation key.</param>
+ /// <returns></returns>
+ Task Activate(String activationKey);
+
+ /// <summary>
+ /// Deactivates the OS license.
+ /// </summary>
+ /// <returns></returns>
+ Task Deactivate();
+ }
+}