using System; using System.Collections.Generic; using System.Linq; using System.Text; using Intel.Management.Wsman; namespace Intel.Management.PSModule.Amt { class ClockService : DriveContainer { public ClockService( DriveItem parent) : base("Clock", parent) { } public override void GetChildItems(ChildWriter writer) { DateTime standardTime = new DateTime(1970, 1, 1); IWsmanConnection conn = ((AmtRootService)GetRoot()).Connection; IManagedReference refToClock = conn.NewReference("AMT_TimeSynchronizationService"); IManagedInstance inputObj = refToClock.CreateMethodInput("GetLowAccuracyTimeSynch"); IManagedInstance outObj = refToClock.InvokeMethod(inputObj); uint ta0 = uint.Parse( outObj.GetProperty("Ta0").ToString()); DateTime time = standardTime.AddSeconds(ta0); writer.Add(new DriveEntry("LocalTime", time.ToLocalTime(), this)); writer.Add(new DriveEntry("UniversalTime", time, this)); } public override void Invoke(DriveProvider provider) { DateTime standardTime = new DateTime(1970, 1, 1); IWsmanConnection conn = ((AmtRootService)GetRoot()).Connection; IManagedReference refToClock = conn.NewReference("AMT_TimeSynchronizationService"); IManagedInstance inputObj = refToClock.CreateMethodInput("GetLowAccuracyTimeSynch"); IManagedInstance outObj = refToClock.InvokeMethod(inputObj); if (!outObj.GetProperty("ReturnValue").ToString().Equals("0")) AmtException.ThrowInvokeError(outObj); uint ta0 = uint.Parse(outObj.GetProperty("Ta0").ToString()); uint tm1 =(uint)DateTime.UtcNow.Subtract(standardTime).TotalSeconds; inputObj = refToClock.CreateMethodInput("SetHighAccuracyTimeSynch"); inputObj.SetProperty("Ta0", ta0.ToString()); inputObj.SetProperty("Tm1", tm1.ToString()); inputObj.SetProperty("Tm2", tm1.ToString()); outObj = refToClock.InvokeMethod(inputObj); switch (outObj.GetProperty("ReturnValue").ToString()) { case "0": break; case "1": throw new WsmanInvokeException("Internal Error"); case "36": throw new WsmanInvokeException("Invalid Parameter"); case "38": throw new WsmanInvokeException("Flash write limit exceeded"); default: throw new WsmanInvokeException("AMT error " + outObj.GetProperty("ReturnValue").ToString()); } _items = null; } public override object GetReturnObject() { return new NameValuePairItem(Name, Value); } } }