public static Common.ImgInfo StartCheck(string file, ref Stopwatch sw)
{
_checkID = 0;
var fi = new FileInfo(file);
var checkckount = 0;
var ret = new Common.ImgInfo();
var checkdata = Common.Types[fi.Length];
var data = new byte[fi.Length];
#region Statistics check
if (checkdata.Statlist.Value.Count > 0)
{
Logger.WriteLine("Statistics check started...");
checkckount++;
if (!CheckStatisticsList(GetStatisticsAndFillData(fi, ref data), data.Length))
{
Common.AddBad(ref ret);
}
Common.SendStatus("Statistics check Done!");
}
else
{
Common.SendStatus("Skipping Statistics check (nothing to check) Instead: Reading image into memory...");
data = File.ReadAllBytes(fi.FullName);
Logger.WriteLine(string.Format("{0,-50} (nothing to check)", "Statistics check skipped!"));
}
#endregion Statistics check
#region Binary check
if (checkdata.Bincheck.Value.Count > 0)
{
Logger.WriteLine("Binary check Started!");
foreach (var key in checkdata.Bincheck.Value.Keys)
{
checkckount++;
Common.SendStatus(string.Format("Parsing Image... Checking Binary for: {0}", key));
var bintmp = string.Format("Binary check for {0} Started...", key);
Logger.Write(string.Format("{0,-50} Result: ", bintmp));
if (!checkdata.Bincheck.Value[key].Value.IsMulti)
{
if (!CheckBinPart(ref data, key, ref ret.Reversed))
{
Common.AddBad(ref ret);
}
}
else if (!CheckBinPart(ref data, key))
{
Common.AddBad(ref ret);
}
GC.Collect();
}
}
else
{
Logger.WriteLine(string.Format("{0,-50} (nothing to check)", "Binary check skipped!"));
}
Common.SendStatus("Binary check(s) Done!");
#endregion Binary check
#region Data check
if (checkdata.DataCheckList.Value.Count > 0)
{
Logger.WriteLine("Data check Started!");
foreach (var key in checkdata.DataCheckList.Value)
{
checkckount++;
Common.SendStatus(string.Format("Parsing Image... Checking Data Statistics for: {0}", key));
var datatmp = string.Format("Data check for {0} Started...", key);
Logger.Write(string.Format("{0,-50} Result: ", datatmp));
if (!CheckDataPart(ref data, key, ret.Reversed))
{
Common.AddBad(ref ret);
}
GC.Collect();
}
}
else
{
Logger.WriteLine(string.Format("{0,-50} (nothing to check)", "Data check skipped!"));
}
Common.SendStatus("Data check(s) Done!");
#endregion Data check
#region SKU List check
if (checkdata.SKUList.Value.Count > 0)
{
Logger.WriteLine("SKU List check Started!");
Common.SendStatus("Checking SKU List...");
var skuCheckDataList = GetSKUCheckData(ret.Reversed, ref data, ref checkdata);
var skuEntryList = new List <Common.SKUEntry>(checkdata.SKUList.Value);
foreach (var entry in skuCheckDataList)
{
if (skuEntryList.Count < skuCheckDataList.Count)
{
break;
}
var tmplist = GetFilterList(skuEntryList, entry);
var tmplist2 = new List <Common.SKUEntry>(skuEntryList);
skuEntryList.Clear();
foreach (var skuEntry in tmplist2)
{
foreach (var tmpentry in tmplist)
{
if (skuEntry.SKUKey == tmpentry.SKUKey)
{
skuEntryList.Add(skuEntry);
}
}
}
}
var datamsg = "";
foreach (var entry in skuCheckDataList)
{
datamsg += entry.Type.Equals("bootldrsize",
StringComparison.CurrentCultureIgnoreCase)
? string.Format("{0} = {1:X4}{2}",
entry.Type,
entry.Size,
Environment.NewLine)
: string.Format("{0} = {1}{2}",
entry.Type,
entry.Data,
Environment.NewLine);
}
if (skuEntryList.Count == skuCheckDataList.Count)
{
ret.SKUModel = skuEntryList[0].Name;
ret.MinVer = skuEntryList[0].MinVer;
Logger.WriteLine(string.Format("SKU Model: {0}", ret.SKUModel));
var msg = "";
if (skuEntryList[0].Warn)
{
foreach (var entry in skuEntryList)
{
if (string.IsNullOrEmpty(entry.WarnMsg))
{
continue;
}
msg = entry.WarnMsg;
break;
}
MessageBox.Show(msg, Resources.WARNING, MessageBoxButtons.OK, MessageBoxIcon.Warning);
Logger.WriteLine(msg);
datamsg += string.Format("{0}{1}", Environment.NewLine, msg);
}
}
else
{
Common.AddBad(ref ret);
ret.SKUModel = null;
ret.MinVer = null;
Logger.WriteLine("No matching SKU model found!");
foreach (var entry in skuCheckDataList)
{
Logger.WriteLine(entry.Type.Equals("bootldrsize", StringComparison.CurrentCultureIgnoreCase) ? string.Format("{0} = {1:X4}", entry.Type, entry.Size) : string.Format("{0} = {1}", entry.Type, entry.Data));
}
}
AddItem(new Common.PartsObject
{
Name = "SKUIdentity Data",
ActualString = datamsg.Trim(),
ExpectedString = "",
Result = (skuEntryList.Count == skuCheckDataList.Count),
});
}
else
{
Logger.WriteLine(string.Format("{0,-50} (nothing to check)", "SKU List check skipped!"));
}
#endregion SKU List check
#region Final Output
Common.SendStatus(string.Format("All checks ({3} Checks) have been completed after {0} Minutes {1} Seconds and {2} Milliseconds", sw.Elapsed.Minutes, sw.Elapsed.Seconds, sw.Elapsed.Milliseconds, checkckount));
Logger.WriteLine(string.Format("All checks ({3} Checks) have been completed after {0} Minutes {1} Seconds and {2} Milliseconds", sw.Elapsed.Minutes, sw.Elapsed.Seconds, sw.Elapsed.Milliseconds, checkckount));
ret.IsOk = ret.BadCount == 0;
ret.Status = ret.IsOk ? "Dump has been validated!" : "Dump is bad!";
if (!ret.IsOk)
{
MessageBox.Show(string.Format("ERROR: Your dump failed on {0} of {1} Checks\nPlease check the log for more information!", ret.BadCount, checkckount), Resources.Checks_StartCheck_ERROR___Bad_dump, MessageBoxButtons.OK, MessageBoxIcon.Error);
}
var tmp = ret.IsOk ? "Pass!" : "Failed!";
var outtmp = ret.IsOk ? string.Format("Tests done: {0}", checkckount) : string.Format("Bad count: {0} of {1} Tests", ret.BadCount, checkckount);
Logger.WriteLine2(string.Format("{0,-50} Check result: {1}", outtmp, tmp));
sw.Stop();
#endregion Final Output
return(ret);
}