diff options
| author | Roy Ben-Shabat <Roy@Twine-s.com> | 2018-12-18 13:29:22 +0200 |
|---|---|---|
| committer | Roy Ben-Shabat <Roy@Twine-s.com> | 2018-12-18 13:29:22 +0200 |
| commit | 45ac8eaf0e03d87c2f9728b2b7c84922c6f6a37d (patch) | |
| tree | f2cd9f1a268c0ef224279bae1d5e817dcaef1d75 /Software/Visual_Studio/PPC/Tango.PPC.Common/OS | |
| parent | 79f12332efed3507c2316eef9698e5766be31ff8 (diff) | |
| download | Tango-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.cs | 90 | ||||
| -rw-r--r-- | Software/Visual_Studio/PPC/Tango.PPC.Common/OS/IWindowsActivationManager.cs | 33 |
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(); + } +} |
