diff options
| author | Roy Ben-Shabat <Roy@Twine-s.com> | 2018-12-24 19:01:11 +0200 |
|---|---|---|
| committer | Roy Ben-Shabat <Roy@Twine-s.com> | 2018-12-24 19:01:11 +0200 |
| commit | 2f85568170b4c11c6c5876b7fac9e662a004d47f (patch) | |
| tree | 587b0a30e8de36322583a10b136c7d43b25edd34 /Software/Visual_Studio/PPC/Tango.PPC.Common/OS/DefaultOperationSystemManager.cs | |
| parent | 7a9e8e8721e895b30a2652e2aaaeb6401b72250e (diff) | |
| download | Tango-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.cs | 115 |
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(); + } + } +} |
