aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/PPC/Tango.PPC.Common/OS/DefaultOperationSystemManager.cs
diff options
context:
space:
mode:
authorRoy Ben-Shabat <Roy@Twine-s.com>2018-12-24 19:01:11 +0200
committerRoy Ben-Shabat <Roy@Twine-s.com>2018-12-24 19:01:11 +0200
commit2f85568170b4c11c6c5876b7fac9e662a004d47f (patch)
tree587b0a30e8de36322583a10b136c7d43b25edd34 /Software/Visual_Studio/PPC/Tango.PPC.Common/OS/DefaultOperationSystemManager.cs
parent7a9e8e8721e895b30a2652e2aaaeb6401b72250e (diff)
downloadTango-2f85568170b4c11c6c5876b7fac9e662a004d47f.tar.gz
Tango-2f85568170b4c11c6c5876b7fac9e662a004d47f.zip
Implemented PPC time zone modification !
Diffstat (limited to 'Software/Visual_Studio/PPC/Tango.PPC.Common/OS/DefaultOperationSystemManager.cs')
-rw-r--r--Software/Visual_Studio/PPC/Tango.PPC.Common/OS/DefaultOperationSystemManager.cs115
1 files changed, 115 insertions, 0 deletions
diff --git a/Software/Visual_Studio/PPC/Tango.PPC.Common/OS/DefaultOperationSystemManager.cs b/Software/Visual_Studio/PPC/Tango.PPC.Common/OS/DefaultOperationSystemManager.cs
new file mode 100644
index 000000000..5e6b9c156
--- /dev/null
+++ b/Software/Visual_Studio/PPC/Tango.PPC.Common/OS/DefaultOperationSystemManager.cs
@@ -0,0 +1,115 @@
+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 System.Collections.ObjectModel;
+ 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.IOperationSystemManager" />
+ public class DefaultOperationSystemManager : IOperationSystemManager
+ {
+ #region Win32
+
+ 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);
+
+ #endregion
+
+ /// <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("cscript", $"C:\\Windows\\System32\\slmgr.vbs -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.");
+ }
+
+ /// <summary>
+ /// Gets the available time zones.
+ /// </summary>
+ /// <returns></returns>
+ public ReadOnlyCollection<TimeZoneInfo> GetAvailableTimeZones()
+ {
+ return TimeZoneInfo.GetSystemTimeZones();
+ }
+
+ /// <summary>
+ /// Changes the operation system time zone.
+ /// </summary>
+ /// <param name="timeZone">The time zone.</param>
+ /// <returns></returns>
+ public async Task ChangeTimeZone(TimeZoneInfo timeZone)
+ {
+ CmdCommand cmd = new CmdCommand("tzutil", $"/s \"{timeZone.StandardName}\"");
+ await cmd.Run();
+ }
+ }
+}