Code update

- WPinternals is now a .NET Core 3.0 application
- Implemented new unlock process for Spec A devices
- Updated logic for unlocking Spec B devices
- Implemented MMOS support for Spec B devices
- Implemented battery status in Flash Mode
- Implemented Fuse configuration information in Flash Mode
- Implemented Reboot from mass storage for Spec A and some Spec B devices
- Implemented shutdown from flash mode (preliminary)
- Fixed label mode support for Spec B
This commit is contained in:
Gus
2019-07-26 17:15:20 +02:00
parent b062efab52
commit 5dae1da560
58 changed files with 5522 additions and 66864 deletions
+334
View File
@@ -0,0 +1,334 @@
## Ignore Visual Studio temporary files, build results, and
## files generated by popular Visual Studio add-ons.
##
## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore
# User-specific files
*.rsuser
*.suo
# *.user
*.userosscache
*.sln.docstates
# User-specific files (MonoDevelop/Xamarin Studio)
*.userprefs
# Build results
[Dd]ebug/
[Dd]ebugPublic/
[Rr]elease/
[Rr]eleases/
x64/
x86/
bld/
[Bb]in/
[Oo]bj/
[Ll]og/
# Visual Studio 2015/2017 cache/options directory
.vs/
# Uncomment if you have tasks that create the project's static files in wwwroot
#wwwroot/
# Visual Studio 2017 auto generated files
Generated\ Files/
# MSTest test Results
[Tt]est[Rr]esult*/
[Bb]uild[Ll]og.*
# NUNIT
*.VisualState.xml
TestResult.xml
# Build Results of an ATL Project
[Dd]ebugPS/
[Rr]eleasePS/
dlldata.c
# Benchmark Results
BenchmarkDotNet.Artifacts/
# .NET Core
project.lock.json
project.fragment.lock.json
artifacts/
# StyleCop
StyleCopReport.xml
# Files built by Visual Studio
*_i.c
*_p.c
*_h.h
*.ilk
*.meta
*.obj
*.iobj
*.pch
*.pdb
*.ipdb
*.pgc
*.pgd
*.rsp
*.sbr
*.tlb
*.tli
*.tlh
*.tmp
*.tmp_proj
*_wpftmp.csproj
*.log
*.vspscc
*.vssscc
.builds
*.pidb
*.svclog
*.scc
# Chutzpah Test files
_Chutzpah*
# Visual C++ cache files
ipch/
*.aps
*.ncb
*.opendb
*.opensdf
*.sdf
*.cachefile
*.VC.db
*.VC.VC.opendb
# Visual Studio profiler
*.psess
*.vsp
*.vspx
*.sap
# Visual Studio Trace Files
*.e2e
# TFS 2012 Local Workspace
$tf/
# Guidance Automation Toolkit
*.gpState
# ReSharper is a .NET coding add-in
_ReSharper*/
*.[Rr]e[Ss]harper
*.DotSettings.user
# JustCode is a .NET coding add-in
.JustCode
# TeamCity is a build add-in
_TeamCity*
# DotCover is a Code Coverage Tool
*.dotCover
# AxoCover is a Code Coverage Tool
.axoCover/*
!.axoCover/settings.json
# Visual Studio code coverage results
*.coverage
*.coveragexml
# NCrunch
_NCrunch_*
.*crunch*.local.xml
nCrunchTemp_*
# MightyMoose
*.mm.*
AutoTest.Net/
# Web workbench (sass)
.sass-cache/
# Installshield output folder
[Ee]xpress/
# DocProject is a documentation generator add-in
DocProject/buildhelp/
DocProject/Help/*.HxT
DocProject/Help/*.HxC
DocProject/Help/*.hhc
DocProject/Help/*.hhk
DocProject/Help/*.hhp
DocProject/Help/Html2
DocProject/Help/html
# Click-Once directory
publish/
# Publish Web Output
*.[Pp]ublish.xml
*.azurePubxml
# Note: Comment the next line if you want to checkin your web deploy settings,
# but database connection strings (with potential passwords) will be unencrypted
*.pubxml
*.publishproj
# Microsoft Azure Web App publish settings. Comment the next line if you want to
# checkin your Azure Web App publish settings, but sensitive information contained
# in these scripts will be unencrypted
PublishScripts/
# NuGet Packages
*.nupkg
# The packages folder can be ignored because of Package Restore
**/[Pp]ackages/*
# except build/, which is used as an MSBuild target.
!**/[Pp]ackages/build/
# Uncomment if necessary however generally it will be regenerated when needed
#!**/[Pp]ackages/repositories.config
# NuGet v3's project.json files produces more ignorable files
*.nuget.props
*.nuget.targets
# Microsoft Azure Build Output
csx/
*.build.csdef
# Microsoft Azure Emulator
ecf/
rcf/
# Windows Store app package directories and files
AppPackages/
BundleArtifacts/
Package.StoreAssociation.xml
_pkginfo.txt
*.appx
# Visual Studio cache files
# files ending in .cache can be ignored
*.[Cc]ache
# but keep track of directories ending in .cache
!*.[Cc]ache/
# Others
ClientBin/
~$*
*~
*.dbmdl
*.dbproj.schemaview
*.jfm
*.pfx
*.publishsettings
orleans.codegen.cs
# Including strong name files can present a security risk
# (https://github.com/github/gitignore/pull/2483#issue-259490424)
#*.snk
# Since there are multiple workflows, uncomment next line to ignore bower_components
# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
#bower_components/
# RIA/Silverlight projects
Generated_Code/
# Backup & report files from converting an old project file
# to a newer Visual Studio version. Backup files are not needed,
# because we have git ;-)
_UpgradeReport_Files/
Backup*/
UpgradeLog*.XML
UpgradeLog*.htm
ServiceFabricBackup/
*.rptproj.bak
# SQL Server files
*.mdf
*.ldf
*.ndf
# Business Intelligence projects
*.rdl.data
*.bim.layout
*.bim_*.settings
*.rptproj.rsuser
# Microsoft Fakes
FakesAssemblies/
# GhostDoc plugin setting file
*.GhostDoc.xml
# Node.js Tools for Visual Studio
.ntvs_analysis.dat
node_modules/
# Visual Studio 6 build log
*.plg
# Visual Studio 6 workspace options file
*.opt
# Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
*.vbw
# Visual Studio LightSwitch build output
**/*.HTMLClient/GeneratedArtifacts
**/*.DesktopClient/GeneratedArtifacts
**/*.DesktopClient/ModelManifest.xml
**/*.Server/GeneratedArtifacts
**/*.Server/ModelManifest.xml
_Pvt_Extensions
# Paket dependency manager
.paket/paket.exe
paket-files/
# FAKE - F# Make
.fake/
# JetBrains Rider
.idea/
*.sln.iml
# CodeRush personal settings
.cr/personal
# Python Tools for Visual Studio (PTVS)
__pycache__/
*.pyc
# Cake - Uncomment if you are using it
# tools/**
# !tools/packages.config
# Tabs Studio
*.tss
# Telerik's JustMock configuration file
*.jmconfig
# BizTalk build output
*.btp.cs
*.btm.cs
*.odx.cs
*.xsd.cs
# OpenCover UI analysis results
OpenCover/
# Azure Stream Analytics local run output
ASALocalRun/
# MSBuild Binary and Structured Log
*.binlog
# NVidia Nsight GPU debugger configuration file
*.nvuser
# MFractors (Xamarin productivity tool) working folder
.mfractor/
# Local History for Visual Studio
.localhistory/
+41 -7
View File
@@ -217,7 +217,7 @@ namespace WPinternals
Notifier = new PhoneNotifierViewModel();
UIContext.Send(s => Notifier.Start(), null);
FlashModel = (NokiaFlashModel)(await SwitchModeViewModel.SwitchTo(Notifier, PhoneInterfaces.Lumia_Flash));
byte[] GptChunk = LumiaV2UnlockBootViewModel.GetGptChunk(FlashModel, 0x20000);
byte[] GptChunk = LumiaUnlockBootloaderViewModel.GetGptChunk(FlashModel, 0x20000);
GPT GPT = new GPT(GptChunk);
string Xml = File.ReadAllText(args[2]);
GPT.MergePartitions(Xml, false);
@@ -436,13 +436,47 @@ namespace WPinternals
break;
case "relockphone":
Notifier = new PhoneNotifierViewModel();
UIContext.Send(s => Notifier.Start(), null);
try
{
UIContext.Send(s => Notifier.Start(), null);
FlashModel = (NokiaFlashModel)(await SwitchModeViewModel.SwitchTo(Notifier, PhoneInterfaces.Lumia_Flash));
Info = FlashModel.ReadPhoneInfo();
Info.Log(LogType.ConsoleOnly);
if (args.Length > 2)
await LumiaV2UnlockBootViewModel.LumiaV2RelockPhone(Notifier, args[2]);
else
await LumiaV2UnlockBootViewModel.LumiaV2RelockPhone(Notifier, null);
FFU ProfileFFU = null;
FFU CurrentFFU;
for (int i = 2; i <= 3; i++)
{
if (args.Length > i)
{
CurrentFFU = new FFU(args[i]);
string CurrentVersion = CurrentFFU.GetOSVersion();
string PlatformID = CurrentFFU.PlatformID;
// Check if the current FFU matches the connected phone, so that the FFU can be used for profiling.
if (Info.PlatformID.StartsWith(PlatformID, StringComparison.OrdinalIgnoreCase))
ProfileFFU = CurrentFFU;
}
}
if (ProfileFFU == null)
{
List<FFUEntry> FFUs = App.Config.FFURepository.Where(e => (Info.PlatformID.StartsWith(e.PlatformID, StringComparison.OrdinalIgnoreCase) && e.Exists())).ToList();
if (FFUs.Count() > 0)
ProfileFFU = new FFU(FFUs[0].Path);
else
throw new WPinternalsException("Profile FFU missing");
}
LogFile.Log("Profile FFU: " + ProfileFFU.Path);
UIContext.Send(s => Notifier.Start(), null);
await LumiaUnlockBootloaderViewModel.LumiaRelockUEFI(Notifier, ProfileFFU.Path);
}
catch (Exception Ex)
{
LogFile.LogException(Ex);
}
Notifier.Stop();
break;
case "addffu":
@@ -580,7 +614,7 @@ namespace WPinternals
throw new WPinternalsException("No donor-FFU found with supported OS version");
}
await LumiaV2UnlockBootViewModel.LumiaV2UnlockBootloader(Notifier, ProfileFFU.Path, null, SupportedFFU.Path);
await LumiaUnlockBootloaderViewModel.LumiaUnlockUEFI(Notifier, ProfileFFU.Path, null, SupportedFFU.Path);
Notifier.Stop();
}
+7 -227
View File
@@ -4,7 +4,6 @@
using System;
using System.Windows.Forms;
using System.Reflection;
namespace WPinternals
{
@@ -79,48 +78,14 @@ namespace WPinternals
/// <returns>True if the user presses OK else false</returns>
public bool ShowDialog(IntPtr hWndOwner)
{
bool flag = false;
var fbd = new FolderBrowserDialog();
fbd.Description = this.Title;
fbd.SelectedPath = this.InitialDirectory;
fbd.ShowNewFolderButton = false;
if (fbd.ShowDialog(new WindowWrapper(hWndOwner)) != DialogResult.OK) return false;
ofd.FileName = fbd.SelectedPath;
if (Environment.OSVersion.Version.Major >= 6)
{
var r = new Reflector("System.Windows.Forms");
uint num = 0;
Type typeIFileDialog = r.GetType("FileDialogNative.IFileDialog");
object dialog = r.Call(ofd, "CreateVistaDialog");
r.Call(ofd, "OnBeforeVistaDialog", dialog);
uint options = (uint)r.CallAs(typeof(System.Windows.Forms.FileDialog), ofd, "GetOptions");
options |= (uint)r.GetEnum("FileDialogNative.FOS", "FOS_PICKFOLDERS");
r.CallAs(typeIFileDialog, dialog, "SetOptions", options);
object pfde = r.New("FileDialog.VistaDialogEvents", ofd);
object[] parameters = new object[] { pfde, num };
r.CallAs2(typeIFileDialog, dialog, "Advise", parameters);
num = (uint)parameters[1];
try
{
int num2 = (int)r.CallAs(typeIFileDialog, dialog, "Show", hWndOwner);
flag = 0 == num2;
}
finally
{
r.CallAs(typeIFileDialog, dialog, "Unadvise", num);
GC.KeepAlive(pfde);
}
}
else
{
var fbd = new FolderBrowserDialog();
fbd.Description = this.Title;
fbd.SelectedPath = this.InitialDirectory;
fbd.ShowNewFolderButton = false;
if (fbd.ShowDialog(new WindowWrapper(hWndOwner)) != DialogResult.OK) return false;
ofd.FileName = fbd.SelectedPath;
flag = true;
}
return flag;
return true;
}
#endregion
@@ -150,189 +115,4 @@ namespace WPinternals
private IntPtr _hwnd;
}
/// <summary>
/// This class is from the Front-End for Dosbox and is used to present a 'vista' dialog box to select folders.
/// Being able to use a vista style dialog box to select folders is much better then using the shell folder browser.
/// http://code.google.com/p/fed/
///
/// Example:
/// var r = new Reflector("System.Windows.Forms");
/// </summary>
public class Reflector
{
#region variables
string m_ns;
Assembly m_asmb;
#endregion
#region Constructors
/// <summary>
/// Constructor
/// </summary>
/// <param name="ns">The namespace containing types to be used</param>
public Reflector(string ns)
: this(ns, ns)
{ }
/// <summary>
/// Constructor
/// </summary>
/// <param name="an">A specific assembly name (used if the assembly name does not tie exactly with the namespace)</param>
/// <param name="ns">The namespace containing types to be used</param>
public Reflector(string an, string ns)
{
m_ns = ns;
m_asmb = null;
foreach (AssemblyName aN in Assembly.GetExecutingAssembly().GetReferencedAssemblies())
{
if (aN.FullName.StartsWith(an))
{
m_asmb = Assembly.Load(aN);
break;
}
}
}
#endregion
#region Methods
/// <summary>
/// Return a Type instance for a type 'typeName'
/// </summary>
/// <param name="typeName">The name of the type</param>
/// <returns>A type instance</returns>
public Type GetType(string typeName)
{
Type type = null;
string[] names = typeName.Split('.');
if (names.Length > 0)
type = m_asmb.GetType(m_ns + "." + names[0]);
for (int i = 1; i < names.Length; ++i)
{
type = type.GetNestedType(names[i], BindingFlags.NonPublic);
}
return type;
}
/// <summary>
/// Create a new object of a named type passing along any params
/// </summary>
/// <param name="name">The name of the type to create</param>
/// <param name="parameters"></param>
/// <returns>An instantiated type</returns>
public object New(string name, params object[] parameters)
{
Type type = GetType(name);
ConstructorInfo[] ctorInfos = type.GetConstructors();
foreach (ConstructorInfo ci in ctorInfos)
{
try
{
return ci.Invoke(parameters);
}
catch { }
}
return null;
}
/// <summary>
/// Calls method 'func' on object 'obj' passing parameters 'parameters'
/// </summary>
/// <param name="obj">The object on which to excute function 'func'</param>
/// <param name="func">The function to execute</param>
/// <param name="parameters">The parameters to pass to function 'func'</param>
/// <returns>The result of the function invocation</returns>
public object Call(object obj, string func, params object[] parameters)
{
return Call2(obj, func, parameters);
}
/// <summary>
/// Calls method 'func' on object 'obj' passing parameters 'parameters'
/// </summary>
/// <param name="obj">The object on which to excute function 'func'</param>
/// <param name="func">The function to execute</param>
/// <param name="parameters">The parameters to pass to function 'func'</param>
/// <returns>The result of the function invocation</returns>
public object Call2(object obj, string func, object[] parameters)
{
return CallAs2(obj.GetType(), obj, func, parameters);
}
/// <summary>
/// Calls method 'func' on object 'obj' which is of type 'type' passing parameters 'parameters'
/// </summary>
/// <param name="type">The type of 'obj'</param>
/// <param name="obj">The object on which to excute function 'func'</param>
/// <param name="func">The function to execute</param>
/// <param name="parameters">The parameters to pass to function 'func'</param>
/// <returns>The result of the function invocation</returns>
public object CallAs(Type type, object obj, string func, params object[] parameters)
{
return CallAs2(type, obj, func, parameters);
}
/// <summary>
/// Calls method 'func' on object 'obj' which is of type 'type' passing parameters 'parameters'
/// </summary>
/// <param name="type">The type of 'obj'</param>
/// <param name="obj">The object on which to excute function 'func'</param>
/// <param name="func">The function to execute</param>
/// <param name="parameters">The parameters to pass to function 'func'</param>
/// <returns>The result of the function invocation</returns>
public object CallAs2(Type type, object obj, string func, object[] parameters)
{
MethodInfo methInfo = type.GetMethod(func, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
return methInfo.Invoke(obj, parameters);
}
/// <summary>
/// Returns the value of property 'prop' of object 'obj'
/// </summary>
/// <param name="obj">The object containing 'prop'</param>
/// <param name="prop">The property name</param>
/// <returns>The property value</returns>
public object Get(object obj, string prop)
{
return GetAs(obj.GetType(), obj, prop);
}
/// <summary>
/// Returns the value of property 'prop' of object 'obj' which has type 'type'
/// </summary>
/// <param name="type">The type of 'obj'</param>
/// <param name="obj">The object containing 'prop'</param>
/// <param name="prop">The property name</param>
/// <returns>The property value</returns>
public object GetAs(Type type, object obj, string prop)
{
PropertyInfo propInfo = type.GetProperty(prop, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
return propInfo.GetValue(obj, null);
}
/// <summary>
/// Returns an enum value
/// </summary>
/// <param name="typeName">The name of enum type</param>
/// <param name="name">The name of the value</param>
/// <returns>The enum value</returns>
public object GetEnum(string typeName, string name)
{
Type type = GetType(typeName);
FieldInfo fieldInfo = type.GetField(name);
return fieldInfo.GetValue(null);
}
#endregion
}
}
+355
View File
@@ -30,6 +30,7 @@ using System.Net.Http;
using System.Net.Http.Headers;
using System.IO;
using System.Xml;
using System.Xml.Serialization;
namespace WPinternals
{
@@ -144,6 +145,148 @@ namespace WPinternals
return FfuUrl;
}
internal static string SearchENOSW(string ProductType, string PhoneFirmwareRevision)
{
if (ProductType == "")
ProductType = null;
if (ProductType != null)
{
ProductType = ProductType.ToUpper();
if (ProductType.StartsWith("RM") && !ProductType.StartsWith("RM-"))
ProductType = "RM-" + ProductType.Substring(2);
}
DiscoveryQueryParameters DiscoveryQueryParams = new DiscoveryQueryParameters
{
manufacturerName = "Microsoft",
manufacturerProductLine = "Lumia",
packageType = "Test Mode",
packageClass = "Public",
manufacturerHardwareModel = ProductType
};
DiscoveryParameters DiscoveryParams = new DiscoveryParameters
{
query = DiscoveryQueryParams
};
DataContractJsonSerializer Serializer1 = new DataContractJsonSerializer(typeof(DiscoveryParameters));
MemoryStream JsonStream1 = new MemoryStream();
Serializer1.WriteObject(JsonStream1, DiscoveryParams);
JsonStream1.Seek(0L, SeekOrigin.Begin);
string JsonContent = new StreamReader(JsonStream1).ReadToEnd();
Uri RequestUri = new Uri("https://api.swrepository.com/rest-api/discovery/1/package");
HttpClient HttpClient = new HttpClient();
HttpClient.DefaultRequestHeaders.UserAgent.TryParseAdd("SoftwareRepository");
HttpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
Task<HttpResponseMessage> HttpPostTask = HttpClient.PostAsync(RequestUri, new StringContent(JsonContent, Encoding.UTF8, "application/json"));
HttpPostTask.Wait();
HttpResponseMessage Response = HttpPostTask.Result;
string JsonResultString = "";
if (Response.StatusCode == HttpStatusCode.OK)
{
Task<string> ReadResponseTask = Response.Content.ReadAsStringAsync();
ReadResponseTask.Wait();
JsonResultString = ReadResponseTask.Result;
}
SoftwarePackage Package = null;
using (MemoryStream JsonStream2 = new MemoryStream(Encoding.UTF8.GetBytes(JsonResultString)))
{
DataContractJsonSerializer Serializer2 = new DataContractJsonSerializer(typeof(SoftwarePackages));
SoftwarePackages SoftwarePackages = (SoftwarePackages)Serializer2.ReadObject(JsonStream2);
if (SoftwarePackages != null)
{
foreach (SoftwarePackage pkg in SoftwarePackages.softwarePackages)
Package = SoftwarePackages.softwarePackages.FirstOrDefault<SoftwarePackage>();
}
}
if (Package == null)
throw new WPinternalsException("ENOSW package not found");
SoftwareFile FileInfo = Package.files.Where(f => f.fileName.EndsWith(".secwim", StringComparison.OrdinalIgnoreCase)).First();
SoftwareFile DPLF = Package.files.Where(f => f.fileName.EndsWith(".dpl", StringComparison.OrdinalIgnoreCase)).First();
Uri DPLUri = new Uri("https://api.swrepository.com/rest-api/discovery/fileurl/1/" + Package.id + "/" + DPLF.fileName);
Task<string> GetDPLTask = HttpClient.GetStringAsync(DPLUri);
GetDPLTask.Wait();
string DPLString = GetDPLTask.Result;
string DPLUrl = "";
FileUrlResult FileUrlDPL = null;
using (MemoryStream JsonStream3 = new MemoryStream(Encoding.UTF8.GetBytes(DPLString)))
{
DataContractJsonSerializer Serializer3 = new DataContractJsonSerializer(typeof(FileUrlResult));
FileUrlDPL = (FileUrlResult)Serializer3.ReadObject(JsonStream3);
if (FileUrlDPL != null)
{
DPLUrl = FileUrlDPL.url;
}
}
if (DPLUrl == "")
throw new WPinternalsException("DPL not found");
Task<string> GetDPLStrTask = HttpClient.GetStringAsync(DPLUrl);
GetDPLStrTask.Wait();
string DPLStrString = GetDPLStrTask.Result;
DPL.Package dpl;
XmlSerializer serializer = new XmlSerializer(typeof(DPL.Package));
using (StringReader reader = new StringReader(DPLStrString.Replace("ft:", "").Replace("dpl:", "").Replace("typedes:", "")))
{
dpl = (DPL.Package)serializer.Deserialize(reader);
}
foreach (DPL.File file in dpl.Content.Files.File)
{
string name = file.Name;
DPL.Range range = file.Extensions.MmosWimFile.UseCaseCompatibilities.Compatibility.FirstOrDefault().Range;
if (IsFirmwareBetween(PhoneFirmwareRevision, range.From, range.To))
FileInfo = Package.files.Where(f => f.fileName.EndsWith(name, StringComparison.OrdinalIgnoreCase)).First();
}
Uri FileInfoUri = new Uri("https://api.swrepository.com/rest-api/discovery/fileurl/1/" + Package.id + "/" + FileInfo.fileName);
Task<string> GetFileInfoTask = HttpClient.GetStringAsync(FileInfoUri);
GetFileInfoTask.Wait();
string FileInfoString = GetFileInfoTask.Result;
string ENOSWUrl = "";
FileUrlResult FileUrl = null;
using (MemoryStream JsonStream3 = new MemoryStream(Encoding.UTF8.GetBytes(FileInfoString)))
{
DataContractJsonSerializer Serializer3 = new DataContractJsonSerializer(typeof(FileUrlResult));
FileUrl = (FileUrlResult)Serializer3.ReadObject(JsonStream3);
if (FileUrl != null)
{
ENOSWUrl = FileUrl.url;
}
}
HttpClient.Dispose();
return ENOSWUrl;
}
private static bool IsFirmwareBetween(string PhoneFirmwareRevision, string Limit1, string Limit2)
{
var version = new Version(PhoneFirmwareRevision);
var version1 = new Version(Limit1);
var version2 = new Version(Limit2);
var result = version.CompareTo(version1);
var result2 = version.CompareTo(version2);
return result >= 0 && result2 <= 0;
}
internal static string[] SearchEmergencyFiles(string ProductType)
{
ProductType = ProductType.ToUpper();
@@ -475,4 +618,216 @@ namespace WPinternals
[DataMember]
public string fileType;
}
public static class DPL
{
[XmlRoot(ElementName = "BasicProductCodes")]
public class BasicProductCodes
{
[XmlElement(ElementName = "BasicProductCode")]
public List<string> BasicProductCode { get; set; }
}
[XmlRoot(ElementName = "Identification")]
public class Identification
{
[XmlElement(ElementName = "TypeDesignator")]
public string TypeDesignator { get; set; }
[XmlElement(ElementName = "BasicProductCodes")]
public BasicProductCodes BasicProductCodes { get; set; }
[XmlElement(ElementName = "Purpose")]
public string Purpose { get; set; }
}
[XmlRoot(ElementName = "Extensions")]
public class Extensions
{
[XmlElement(ElementName = "PackageType")]
public string PackageType { get; set; }
[XmlElement(ElementName = "Identification")]
public Identification Identification { get; set; }
[XmlElement(ElementName = "FileType")]
public string FileType { get; set; }
[XmlElement(ElementName = "MmosWimFile")]
public MmosWimFile MmosWimFile { get; set; }
}
[XmlRoot(ElementName = "PackageDescription")]
public class PackageDescription
{
[XmlElement(ElementName = "Identifier")]
public string Identifier { get; set; }
[XmlElement(ElementName = "Revision")]
public string Revision { get; set; }
[XmlElement(ElementName = "Extensions")]
public Extensions Extensions { get; set; }
}
[XmlRoot(ElementName = "Digest")]
public class Digest
{
[XmlAttribute(AttributeName = "method")]
public string Method { get; set; }
[XmlAttribute(AttributeName = "encoding")]
public string Encoding { get; set; }
[XmlText]
public string Text { get; set; }
}
[XmlRoot(ElementName = "Digests")]
public class Digests
{
[XmlElement(ElementName = "Digest")]
public List<Digest> Digest { get; set; }
}
[XmlRoot(ElementName = "Range")]
public class Range
{
[XmlAttribute(AttributeName = "from")]
public string From { get; set; }
[XmlAttribute(AttributeName = "to")]
public string To { get; set; }
}
[XmlRoot(ElementName = "Compatibility")]
public class Compatibility
{
[XmlElement(ElementName = "Range")]
public Range Range { get; set; }
[XmlAttribute(AttributeName = "useCase")]
public string UseCase { get; set; }
}
[XmlRoot(ElementName = "UseCaseCompatibilities")]
public class UseCaseCompatibilities
{
[XmlElement(ElementName = "Compatibility")]
public List<Compatibility> Compatibility { get; set; }
}
[XmlRoot(ElementName = "MmosWimFile")]
public class MmosWimFile
{
[XmlElement(ElementName = "UseCaseCompatibilities")]
public UseCaseCompatibilities UseCaseCompatibilities { get; set; }
}
[XmlRoot(ElementName = "File")]
public class File
{
[XmlElement(ElementName = "Name")]
public string Name { get; set; }
[XmlElement(ElementName = "Digests")]
public Digests Digests { get; set; }
[XmlElement(ElementName = "Revision")]
public string Revision { get; set; }
[XmlElement(ElementName = "Extensions")]
public Extensions Extensions { get; set; }
}
[XmlRoot(ElementName = "Files")]
public class Files
{
[XmlElement(ElementName = "File")]
public List<File> File { get; set; }
}
[XmlRoot(ElementName = "Content")]
public class Content
{
[XmlElement(ElementName = "PackageDescription")]
public PackageDescription PackageDescription { get; set; }
[XmlElement(ElementName = "Files")]
public Files Files { get; set; }
}
[XmlRoot(ElementName = "CanonicalizationMethod", Namespace = "http://www.w3.org/2000/09/xmldsig#")]
public class CanonicalizationMethod
{
[XmlAttribute(AttributeName = "Algorithm")]
public string Algorithm { get; set; }
}
[XmlRoot(ElementName = "SignatureMethod", Namespace = "http://www.w3.org/2000/09/xmldsig#")]
public class SignatureMethod
{
[XmlAttribute(AttributeName = "Algorithm")]
public string Algorithm { get; set; }
}
[XmlRoot(ElementName = "Transform", Namespace = "http://www.w3.org/2000/09/xmldsig#")]
public class Transform
{
[XmlAttribute(AttributeName = "Algorithm")]
public string Algorithm { get; set; }
}
[XmlRoot(ElementName = "Transforms", Namespace = "http://www.w3.org/2000/09/xmldsig#")]
public class Transforms
{
[XmlElement(ElementName = "Transform", Namespace = "http://www.w3.org/2000/09/xmldsig#")]
public Transform Transform { get; set; }
}
[XmlRoot(ElementName = "DigestMethod", Namespace = "http://www.w3.org/2000/09/xmldsig#")]
public class DigestMethod
{
[XmlAttribute(AttributeName = "Algorithm")]
public string Algorithm { get; set; }
}
[XmlRoot(ElementName = "Reference", Namespace = "http://www.w3.org/2000/09/xmldsig#")]
public class Reference
{
[XmlElement(ElementName = "Transforms", Namespace = "http://www.w3.org/2000/09/xmldsig#")]
public Transforms Transforms { get; set; }
[XmlElement(ElementName = "DigestMethod", Namespace = "http://www.w3.org/2000/09/xmldsig#")]
public DigestMethod DigestMethod { get; set; }
[XmlElement(ElementName = "DigestValue", Namespace = "http://www.w3.org/2000/09/xmldsig#")]
public string DigestValue { get; set; }
[XmlAttribute(AttributeName = "URI")]
public string URI { get; set; }
}
[XmlRoot(ElementName = "SignedInfo", Namespace = "http://www.w3.org/2000/09/xmldsig#")]
public class SignedInfo
{
[XmlElement(ElementName = "CanonicalizationMethod", Namespace = "http://www.w3.org/2000/09/xmldsig#")]
public CanonicalizationMethod CanonicalizationMethod { get; set; }
[XmlElement(ElementName = "SignatureMethod", Namespace = "http://www.w3.org/2000/09/xmldsig#")]
public SignatureMethod SignatureMethod { get; set; }
[XmlElement(ElementName = "Reference", Namespace = "http://www.w3.org/2000/09/xmldsig#")]
public Reference Reference { get; set; }
}
[XmlRoot(ElementName = "KeyInfo", Namespace = "http://www.w3.org/2000/09/xmldsig#")]
public class KeyInfo
{
[XmlElement(ElementName = "KeyName", Namespace = "http://www.w3.org/2000/09/xmldsig#")]
public string KeyName { get; set; }
}
[XmlRoot(ElementName = "Signature", Namespace = "http://www.w3.org/2000/09/xmldsig#")]
public class Signature
{
[XmlElement(ElementName = "SignedInfo", Namespace = "http://www.w3.org/2000/09/xmldsig#")]
public SignedInfo SignedInfo { get; set; }
[XmlElement(ElementName = "SignatureValue", Namespace = "http://www.w3.org/2000/09/xmldsig#")]
public string SignatureValue { get; set; }
[XmlElement(ElementName = "KeyInfo", Namespace = "http://www.w3.org/2000/09/xmldsig#")]
public KeyInfo KeyInfo { get; set; }
[XmlAttribute(AttributeName = "xmlns")]
public string Xmlns { get; set; }
}
[XmlRoot(ElementName = "Package")]
public class Package
{
[XmlElement(ElementName = "Content")]
public Content Content { get; set; }
[XmlElement(ElementName = "Signature", Namespace = "http://www.w3.org/2000/09/xmldsig#")]
public Signature Signature { get; set; }
}
}
}
+33
View File
@@ -35,6 +35,8 @@ namespace WPinternals
internal IntPtr hDrive = (IntPtr)(-1);
private bool OpenWithWriteAccess;
private QualcommSerial Serial;
internal MassStorage(string DevicePath): base(DevicePath)
{
try
@@ -71,6 +73,37 @@ namespace WPinternals
catch { }
}
internal void AttachQualcommSerial(string DevicePath)
{
try
{
Serial = new QualcommSerial(DevicePath);
Serial.EncodeCommands = false;
}
catch { }
}
internal bool DoesDeviceSupportReboot()
{
return Serial != null;
}
internal void Reboot()
{
if (Serial == null)
return;
try
{
// This will succeed on new models
Serial.SendData(new byte[] { 0x7, 0x0, 0x0, 0x0, 0x8, 0x0, 0x0, 0x0 });
// This will succeed on old models
Serial.SendData(new byte[] { 0x7E, 0xA, 0x0, 0x0, 0xB6, 0xB5, 0x7E });
}
catch { }
}
protected override void Dispose(bool disposing)
{
if (Disposed)
+106
View File
@@ -75,6 +75,36 @@ namespace WPinternals
return System.Text.ASCIIEncoding.ASCII.GetString(Bytes).Trim(new char[] { '\0' });
}
[Flags]
internal enum Fuse
{
SecureBoot = 1,
FfuVerify = 2,
Jtag = 4,
Shk = 8,
Simlock = 16,
ProductionDone = 32,
Rkh = 64,
PublicId = 128,
Dak = 256,
SecGen = 512,
OemId = 1024,
FastBoot = 2048,
SpdmSecMode = 4096,
RpmWdog = 8192,
Ssm = 16384
}
public bool? ReadFuseStatus(Fuse fuse)
{
uint? flags = ReadSecurityFlags();
if (!flags.HasValue)
return null;
var finalconfig = (Fuse)flags.Value;
return finalconfig.HasFlag(fuse);
}
public uint? ReadSecurityFlags()
{
byte[] Response = ReadParam("FCS");
@@ -84,6 +114,24 @@ namespace WPinternals
return (UInt32)((Response[0] << 24) | (Response[1] << 16) | (Response[2] << 8) | Response[3]);
}
public uint? ReadCurrentChargeLevel()
{
byte[] Response = ReadParam("CS");
if ((Response == null) || (Response.Length != 8)) return null;
// This value is in big endian
return (UInt32)((Response[0] << 24) | (Response[1] << 16) | (Response[2] << 8) | Response[3]) + 1;
}
public uint? ReadCurrentChargeCurrent()
{
byte[] Response = ReadParam("CS");
if ((Response == null) || (Response.Length != 8)) return null;
// This value is in big endian and needs to be XOR'd with 0xFFFFFFFF
return ((UInt32)((Response[4] << 24) | (Response[5] << 16) | (Response[6] << 8) | Response[7]) ^ 0xFFFFFFFF) + 1;
}
public UefiSecurityStatusResponse ReadSecurityStatus()
{
if (_SecurityStatus != null)
@@ -320,7 +368,18 @@ namespace WPinternals
if (ResultCode != 0)
ThrowFlashError(ResultCode);
}
internal void SwitchToMmosContext()
{
byte[] Request = new byte[7];
ByteOperations.WriteAsciiString(Request, 0, "NOKXCBA");
ExecuteRawVoidMethod(Request);
ResetDevice();
Dispose(true);
}
private void ThrowFlashError(int ErrorCode)
{
string SubMessage;
@@ -451,6 +510,53 @@ namespace WPinternals
LogFile.EndAction("FlashFFU");
}
public void FlashMMOS(string MMOSPath, ProgressUpdater UpdaterPerChunk)
{
LogFile.BeginAction("FlashMMOS");
ProgressUpdater Progress = UpdaterPerChunk;
PhoneInfo Info = ReadPhoneInfo();
if (!Info.MmosOverUsbSupported)
throw new WPinternalsException("Flash failed!", "Protocols not supported");
FileInfo info = new FileInfo(MMOSPath);
uint length = uint.Parse(info.Length.ToString());
int offset = 0;
int maximumbuffersize = 0x00240000;
uint totalcounts = (uint)Math.Truncate((decimal)length / maximumbuffersize);
using (System.IO.FileStream MMOSFile = new System.IO.FileStream(MMOSPath, System.IO.FileMode.Open, System.IO.FileAccess.Read))
{
for (int i = 1; i <= (uint)Math.Truncate((decimal)length / maximumbuffersize); i++)
{
Progress.IncreaseProgress(1);
byte[] data = new byte[maximumbuffersize];
MMOSFile.Read(data, 0, maximumbuffersize);
LoadMmosBinary(length, (uint)offset, false, data);
offset += maximumbuffersize;
}
if (length - offset != 0)
{
Progress.IncreaseProgress(1);
byte[] data = new byte[length - offset];
MMOSFile.Read(data, 0, (int)(length - offset));
LoadMmosBinary(length, (uint)offset, false, data);
}
SwitchToMmosContext();
ResetPhone();
}
LogFile.EndAction("FlashMMOS");
}
public void FlashSectors(UInt32 StartSector, byte[] Data, int Progress = 0)
{
// Start sector is in UInt32, so max size of eMMC is 2 TB.
+13
View File
@@ -302,6 +302,19 @@ namespace WPinternals
}
}
public void ResetDevice()
{
try
{
foreach (var pipe in Device.Pipes)
{
pipe.Abort();
pipe.Reset();
}
}
catch { }
}
/// <summary>
/// Disposes the UsbDevice including all unmanaged WinUSB handles. This function
/// should be called when the UsbDevice object is no longer in use, otherwise
+4 -6
View File
@@ -427,18 +427,17 @@ namespace WPinternals
}
// Backup original owner and ACL
OriginalACL = File.GetAccessControl(FilePath);
OriginalACL = new FileSecurity(FilePath, AccessControlSections.Owner | AccessControlSections.Group | AccessControlSections.Access);
// And take the original security to create new security rules.
FileSecurity NewACL = File.GetAccessControl(FilePath);
FileSecurity NewACL = new FileSecurity(FilePath, AccessControlSections.Owner | AccessControlSections.Group | AccessControlSections.Access);
// Take ownership
NewACL.SetOwner(WindowsIdentity.GetCurrent().User);
File.SetAccessControl(FilePath, NewACL);
// And create a new access rule
NewACL.SetAccessRule(new FileSystemAccessRule(WindowsIdentity.GetCurrent().User, FileSystemRights.FullControl, AccessControlType.Allow));
File.SetAccessControl(FilePath, NewACL);
// Open the file for patching
Stream = new FileStream(FilePath, FileMode.Open, FileAccess.ReadWrite);
@@ -460,9 +459,8 @@ namespace WPinternals
{
// Restore original owner and access rules.
// The OriginalACL cannot be reused directly.
FileSecurity NewACL = File.GetAccessControl(FilePath);
FileSecurity NewACL = new FileSecurity(FilePath, AccessControlSections.Owner | AccessControlSections.Group | AccessControlSections.Access);
NewACL.SetSecurityDescriptorBinaryForm(OriginalACL.GetSecurityDescriptorBinaryForm());
File.SetAccessControl(FilePath, NewACL);
// Revert to self
RestorePrivilege.Revert();
+258
View File
@@ -3997,6 +3997,264 @@ DEALINGS IN THE SOFTWARE.
</TargetVersion>
</TargetVersions>
</PatchDefinition>
<PatchDefinition Name="SecureBootHack-V1.1-EFIESP">
<TargetVersions>
<TargetVersion Description="10.0.10240.16384">
<TargetFiles>
<TargetFile Path="Windows\System32\boot\mobilestartup.efi" HashOriginal="240B7F0B6BC5CD923CBEAEE85DBBA1F240C96C3B" HashPatched="14EE38E1229C8D770493A09A8CDC6B044A694720">
<Patches>
<Patch Address="0x00065514" OriginalBytes="2DE930480DF1080B9BF7B6FAADF50B7D0023039304932C4B0DF1220040F206221B8800210024ADF820309CF76DF900238DF80830012305932149204802AB009305AB06AA9DF7A6F9002805DB059B012B02D19DF8083053BB08A800F037F80446002C24DB03AA04A908A800F097F80446039D002C04DA134B9C4214D1002412E0049B0095C6F794FA0446002C0BDB01238DF8083002AB0A4908480093012303229DF7BCF9044615B12846CFF74FF820460DF50B7D9BF76CFA" PatchedBytes="0020704778462549A0EB010070B481B00446234B04EB0300224B04EB030103220023009343F2315604EB0605A8471E4904EB0105A8470646012E04D001201B4904EB0105A8471A4804EB00010968D1F8AC500EA000216A46A847009D6D68002D01D1009DAD68A847012E04D030460F4904EB0105A8470F4E04EB0605A84742F6C72604EB060001B070BC00479D5B08F90493FB408FE04AEE3B1A784B1C61060098E30A00847F0A00BD2E0800652E0800A47B0E0081D40600" />
<Patch Address="0x00000138" OriginalBytes="E5280C00" PatchedBytes="41FE0C00" />
<Patch Address="0x000733D8" OriginalBytes="2DE9F048" PatchedBytes="00207047" />
<Patch Address="0x000285F8" OriginalBytes="2DE9F04F" PatchedBytes="00207047" />
<Patch Address="0x000AC198" OriginalBytes="4D00610073007300530074006F00720061006700650046006C00610067000000" PatchedBytes="4800650061007400680063006C00690066006600370034004D0053004D000000" />
<Patch Address="0x00001EBC" OriginalBytes="03D1" PatchedBytes="00BF" />
<Patch Address="0x00001EC2" OriginalBytes="6AF0DDFC" PatchedBytes="63F029BB" />
</Patches>
<Obsolete />
</TargetFile>
</TargetFiles>
</TargetVersion>
<TargetVersion Description="10.0.10011.16384">
<TargetFiles>
<TargetFile Path="Windows\System32\boot\mobilestartup.efi" HashOriginal="240B7F0B6BC5CD923CBEAEE85DBBA1F240C96C3B" HashPatched="14EE38E1229C8D770493A09A8CDC6B044A694720">
<Patches>
<Patch Address="0x00065514" OriginalBytes="2DE930480DF1080B9BF7B6FAADF50B7D0023039304932C4B0DF1220040F206221B8800210024ADF820309CF76DF900238DF80830012305932149204802AB009305AB06AA9DF7A6F9002805DB059B012B02D19DF8083053BB08A800F037F80446002C24DB03AA04A908A800F097F80446039D002C04DA134B9C4214D1002412E0049B0095C6F794FA0446002C0BDB01238DF8083002AB0A4908480093012303229DF7BCF9044615B12846CFF74FF820460DF50B7D9BF76CFA" PatchedBytes="0020704778462549A0EB010070B481B00446234B04EB0300224B04EB030103220023009343F2315604EB0605A8471E4904EB0105A8470646012E04D001201B4904EB0105A8471A4804EB00010968D1F8AC500EA000216A46A847009D6D68002D01D1009DAD68A847012E04D030460F4904EB0105A8470F4E04EB0605A84742F6C72604EB060001B070BC00479D5B08F90493FB408FE04AEE3B1A784B1C61060098E30A00847F0A00BD2E0800652E0800A47B0E0081D40600" />
<Patch Address="0x00000138" OriginalBytes="E5280C00" PatchedBytes="41FE0C00" />
<Patch Address="0x000733D8" OriginalBytes="2DE9F048" PatchedBytes="00207047" />
<Patch Address="0x000285F8" OriginalBytes="2DE9F04F" PatchedBytes="00207047" />
<Patch Address="0x000AC198" OriginalBytes="4D00610073007300530074006F00720061006700650046006C00610067000000" PatchedBytes="4800650061007400680063006C00690066006600370034004D0053004D000000" />
<Patch Address="0x00001EBC" OriginalBytes="03D1" PatchedBytes="00BF" />
<Patch Address="0x00001EC2" OriginalBytes="6AF0DDFC" PatchedBytes="63F029BB" />
</Patches>
<Obsolete />
</TargetFile>
</TargetFiles>
</TargetVersion>
<TargetVersion Description="10.0.10586.107">
<TargetFiles>
<TargetFile Path="Windows\System32\boot\mobilestartup.efi" HashOriginal="B758EE117AEF2E6ED3DC6C0F07BC65CBCF944D6A" HashPatched="85CEB6E5D5258C1312E809BB73B3ACFA14CCA4EB">
<Patches>
<Patch Address="0x00068188" OriginalBytes="2DE930480DF1080BADF50A7D002303932D4B0DF1220040F206221B880021ADF8203099F737FB002304938DF80830012305932249204802AB009305AB06AA00249AF76CFB002805DB059B012B02D19DF8083063BB08A800F039F80446002C26DB03AA04A908A800F093F80446039D002C04DA144B9C4216D1002414E01048049B03220095C4F730F90446002C0BDB01238DF8083002AB094907480093012303229AF780FB044615B12846CEF7EDF820460DF50A7DBDE83088" PatchedBytes="0020704778462549A0EB010070B481B00446234B04EB0300224B04EB030103220023009343F22D5604EB0605A8471E4904EB0105A8470646012E04D001201B4904EB0105A8471A4804EB00010968D1F8AC500EA000216A46A847009D6D68002D01D1009DAD68A847012E04D030460F4904EB0105A8470F4E04EB0605A84742F6C12604EB060001B070BC00479D5B08F90493FB408FE04AEE3B1A784B908D060028120B0048120B00A187070049870700C4CF0E001DFF0600" />
<Patch Address="0x000710D4" OriginalBytes="2DE9F048" PatchedBytes="00207047" />
<Patch Address="0x00028A04" OriginalBytes="2DE9F04F" PatchedBytes="00207047" />
<Patch Address="0x000AF828" OriginalBytes="4D00610073007300530074006F00720061006700650046006C00610067000000" PatchedBytes="4800650061007400680063006C00690066006600370034004D0053004D000000" />
<Patch Address="0x00001EB6" OriginalBytes="03D1" PatchedBytes="00BF" />
<Patch Address="0x00001EBC" OriginalBytes="6DF02EFA" PatchedBytes="66F066B9" />
<Patch Address="0x00000138" OriginalBytes="178C0C00" PatchedBytes="67850C00" />
</Patches>
<Obsolete />
</TargetFile>
</TargetFiles>
</TargetVersion>
<TargetVersion Description="10.0.15063.0">
<TargetFiles>
<TargetFile Path="Windows\System32\Boot\mobilestartup.efi" HashOriginal="1B6436EC18CB0FDF541CB382DA2CCD615E4379A6" HashPatched="456E632E8FA39D3820169E485573F221A2663FCE">
<Patches>
<Patch Address="0x0006D374" OriginalBytes="2DE930480DF1080BADF50A7D002304932D4B0DF1220040F206221B880021ADF8203094F74DFA002305938DF80830012303932249204802AB009303AB06AA002495F720F9002805DB039B012B02D19DF8083063BB08A800F039F80446002C26DB04AA05A908A800F08BF80446049D002C04DA144B9C4216D1002414E01048059B03220095BCF732FA0446002C0BDB01238DF8083002AB0949074800930123032295F734F9044615B12846CCF7E1FB20460DF50A7DBDE83088" PatchedBytes="0020704778462549A0EB010070B481B00446234B04EB0300224B04EB030103220023009343F2812604EB0605A8471E4904EB0105A8470646012E04D001201B4904EB0105A8471A4804EB00010968D1F8AC500EA000216A46A847009D6D68002D01D1009DAD68A847012E04D030460F4904EB0105A8470F4E04EB0605A84742F6AD4604EB060001B070BC00479D5B08F90493FB408FE04AEE3B1A784B7CDF06003C320C0084320C0045980800ED970800488C1E0079520700" />
<Patch Address="0x00000138" OriginalBytes="EFA81C00" PatchedBytes="C9791C00" />
<Patch Address="0x0002BC08" OriginalBytes="2DE9F04F" PatchedBytes="00207047" />
<Patch Address="0x000C0E3C" OriginalBytes="4D00610073007300530074006F00720061006700650046006C00610067000000" PatchedBytes="4800650061007400680063006C00690066006600370034004D0053004D000000" />
<Patch Address="0x0007465E" OriginalBytes="01D0" PatchedBytes="01E0" />
<Patch Address="0x000020A8" OriginalBytes="72F0E6FA" PatchedBytes="6BF066B9" />
<Patch Address="0x000020C4" OriginalBytes="2DE91848" PatchedBytes="01207047" />
</Patches>
<Obsolete />
</TargetFile>
</TargetFiles>
</TargetVersion>
<TargetVersion Description="10.0.15063.297">
<TargetFiles>
<TargetFile Path="Windows\System32\Boot\mobilestartup.efi" HashOriginal="1B6436EC18CB0FDF541CB382DA2CCD615E4379A6" HashPatched="456E632E8FA39D3820169E485573F221A2663FCE">
<Patches>
<Patch Address="0x0002BC08" OriginalBytes="2DE9F04F" PatchedBytes="00207047" />
<Patch Address="0x00000138" OriginalBytes="EFA81C00" PatchedBytes="C9791C00" />
<Patch Address="0x000C0E3C" OriginalBytes="4D00610073007300530074006F00720061006700650046006C00610067000000" PatchedBytes="4800650061007400680063006C00690066006600370034004D0053004D000000" />
<Patch Address="0x0007465E" OriginalBytes="01D0" PatchedBytes="01E0" />
<Patch Address="0x000020A8" OriginalBytes="72F0E6FA" PatchedBytes="6BF066B9" />
<Patch Address="0x0006D374" OriginalBytes="2DE930480DF1080BADF50A7D002304932D4B0DF1220040F206221B880021ADF8203094F74DFA002305938DF80830012303932249204802AB009303AB06AA002495F720F9002805DB039B012B02D19DF8083063BB08A800F039F80446002C26DB04AA05A908A800F08BF80446049D002C04DA144B9C4216D1002414E01048059B03220095BCF732FA0446002C0BDB01238DF8083002AB0949074800930123032295F734F9044615B12846CCF7E1FB20460DF50A7DBDE83088" PatchedBytes="0020704778462549A0EB010070B481B00446234B04EB0300224B04EB030103220023009343F2812604EB0605A8471E4904EB0105A8470646012E04D001201B4904EB0105A8471A4804EB00010968D1F8AC500EA000216A46A847009D6D68002D01D1009DAD68A847012E04D030460F4904EB0105A8470F4E04EB0605A84742F6AD4604EB060001B070BC00479D5B08F90493FB408FE04AEE3B1A784B7CDF06003C320C0084320C0045980800ED970800488C1E0079520700" />
<Patch Address="0x000020C4" OriginalBytes="2DE91848" PatchedBytes="01207047" />
</Patches>
<Obsolete />
</TargetFile>
</TargetFiles>
</TargetVersion>
<TargetVersion Description="10.0.10586.318">
<TargetFiles>
<TargetFile Path="Windows\System32\boot\mobilestartup.efi" HashOriginal="8E71D1F0255E8C71BDE6F8D3780C4827C244375B" HashPatched="619484E25618AFE34A651741921430520CF51DDD">
<Patches>
<Patch Address="0x000681A8" OriginalBytes="2DE930480DF1080BADF50A7D002303932D4B0DF1220040F206221B880021ADF8203099F727FB002304938DF80830012305932249204802AB009305AB06AA00249AF75CFB002805DB059B012B02D19DF8083063BB08A800F039F80446002C26DB03AA04A908A800F095F80446039D002C04DA144B9C4216D1002414E01048049B03220095C4F71AF90446002C0BDB01238DF8083002AB094907480093012303229AF770FB044615B12846CEF7EDF820460DF50A7DBDE83088" PatchedBytes="0020704778462549A0EB010070B481B00446234B04EB0300224B04EB030103220023009343F22D5604EB0605A8471E4904EB0105A8470646012E04D001201B4904EB0105A8471A4804EB00010968D1F8AC500EA000216A46A847009D6D68002D01D1009DAD68A847012E04D030460F4904EB0105A8470F4E04EB0605A84742F6C12604EB060001B070BC00479D5B08F90493FB408FE04AEE3B1A784BB08D060028120B0048120B00C58707006D870700C4CF0E0041FF0600" />
<Patch Address="0x00000138" OriginalBytes="DABE0C00" PatchedBytes="F8B80C00" />
<Patch Address="0x000710F8" OriginalBytes="2DE9F048" PatchedBytes="00207047" />
<Patch Address="0x00028A2C" OriginalBytes="2DE9F04F" PatchedBytes="00207047" />
<Patch Address="0x000AF828" OriginalBytes="4D00610073007300530074006F00720061006700650046006C00610067000000" PatchedBytes="4800650061007400680063006C00690066006600370034004D0053004D000000" />
<Patch Address="0x00001EB6" OriginalBytes="03D1" PatchedBytes="00BF" />
<Patch Address="0x00001EBC" OriginalBytes="6DF040FA" PatchedBytes="66F076B9" />
</Patches>
<Obsolete />
</TargetFile>
</TargetFiles>
</TargetVersion>
<TargetVersion Description="10.0.10586.494">
<TargetFiles>
<TargetFile Path="Windows\System32\boot\mobilestartup.efi" HashOriginal="B03EA0984975D4025960C87527E8760B58C504F3" HashPatched="ED4CE6DD96EF4FA440B6898EFD4AE9EB1025D10A">
<Patches>
<Patch Address="0x000681A8" OriginalBytes="2DE930480DF1080BADF50A7D002303932D4B0DF1220040F206221B880021ADF8203099F727FB002304938DF80830012305932249204802AB009305AB06AA00249AF75CFB002805DB059B012B02D19DF8083063BB08A800F039F80446002C26DB03AA04A908A800F095F80446039D002C04DA144B9C4216D1002414E01048049B03220095C4F71AF90446002C0BDB01238DF8083002AB094907480093012303229AF770FB044615B12846CEF7EDF820460DF50A7DBDE83088" PatchedBytes="0020704778462549A0EB010070B481B00446234B04EB0300224B04EB030103220023009343F22D5604EB0605A8471E4904EB0105A8470646012E04D001201B4904EB0105A8471A4804EB00010968D1F8AC500EA000216A46A847009D6D68002D01D1009DAD68A847012E04D030460F4904EB0105A8470F4E04EB0605A84742F6C12604EB060001B070BC00479D5B08F90493FB408FE04AEE3B1A784BB08D060028120B0048120B00C58707006D870700C4CF0E0041FF0600" />
<Patch Address="0x00000138" OriginalBytes="21730C00" PatchedBytes="3F6D0C00" />
<Patch Address="0x000710F8" OriginalBytes="2DE9F048" PatchedBytes="00207047" />
<Patch Address="0x00028A2C" OriginalBytes="2DE9F04F" PatchedBytes="00207047" />
<Patch Address="0x000AF828" OriginalBytes="4D00610073007300530074006F00720061006700650046006C00610067000000" PatchedBytes="4800650061007400680063006C00690066006600370034004D0053004D000000" />
<Patch Address="0x00001EB6" OriginalBytes="03D1" PatchedBytes="00BF" />
<Patch Address="0x00001EBC" OriginalBytes="6DF040FA" PatchedBytes="66F076B9" />
</Patches>
<Obsolete />
</TargetFile>
</TargetFiles>
</TargetVersion>
<TargetVersion Description="10.0.15254.1">
<TargetFiles>
<TargetFile Path="Windows\System32\Boot\mobilestartup.efi" HashOriginal="F27A93F8E597B8C270E0308F4ED59245A0FAD534" HashPatched="034E15A4E8553337E617D167440EE7DD7E633467">
<Patches>
<Patch Address="0x0002BBBC" OriginalBytes="2DE9F04F" PatchedBytes="00207047" />
<Patch Address="0x00000138" OriginalBytes="F0181C00" PatchedBytes="E0ED1B00" />
<Patch Address="0x000C1054" OriginalBytes="4D00610073007300530074006F00720061006700650046006C00610067000000" PatchedBytes="4800650061007400680063006C00690066006600370034004D0053004D000000" />
<Patch Address="0x000746F2" OriginalBytes="01D0" PatchedBytes="01E0" />
<Patch Address="0x000020A8" OriginalBytes="72F030FB" PatchedBytes="6BF0B0B9" />
<Patch Address="0x0006D408" OriginalBytes="2DE930480DF1080BADF50A7D002304932D4B0DF1220040F206221B880021ADF8203094F703FA002305938DF80830012303932249204802AB009303AB06AA002495F7D6F8002805DB039B012B02D19DF8083063BB08A800F039F80446002C26DB04AA05A908A800F08BF80446049D002C04DA144B9C4216D1002414E01048059B03220095BCF7C2F90446002C0BDB01238DF8083002AB0949074800930123032295F7EAF8044615B12846CCF771FB20460DF50A7DBDE83088" PatchedBytes="0020704778462549A0EB010070B481B00446234B04EB0300224B04EB030103220023009343F2812604EB0605A8471E4904EB0105A8470646012E04D001201B4904EB0105A8471A4804EB00010968D1F8AC500EA000216A46A847009D6D68002D01D1009DAD68A847012E04D030460F4904EB0105A8470F4E04EB0605A84742F6AD4604EB060001B070BC00479D5B08F90493FB408FE04AEE3B1A784B10E0060054320C0074320C00D998080081980800488C1E000D530700" />
<Patch Address="0x000020C4" OriginalBytes="2DE91848" PatchedBytes="01207047" />
</Patches>
<Obsolete />
</TargetFile>
</TargetFiles>
</TargetVersion>
<TargetVersion Description="10.0.15254.12">
<TargetFiles>
<TargetFile Path="Windows\System32\boot\mobilestartup.efi" HashOriginal="5A9B06CB5E49D8D8E062DDD3D7E3492144E85BB2" HashPatched="54BFB9319C2937FF6DB5BEAA3F7831DEB119B06B">
<Patches>
<Patch Address="0x0002BBBC" OriginalBytes="2DE9F04F" PatchedBytes="00207047" />
<Patch Address="0x000C1054" OriginalBytes="4D00610073007300530074006F00720061006700650046006C00610067000000" PatchedBytes="4800650061007400680063006C00690066006600370034004D0053004D000000" />
<Patch Address="0x000746F2" OriginalBytes="01D0" PatchedBytes="01E0" />
<Patch Address="0x000020A8" OriginalBytes="72F030FB" PatchedBytes="6BF0B0B9" />
<Patch Address="0x0006D408" OriginalBytes="2DE930480DF1080BADF50A7D002304932D4B0DF1220040F206221B880021ADF8203094F703FA002305938DF80830012303932249204802AB009303AB06AA002495F7D6F8002805DB039B012B02D19DF8083063BB08A800F039F80446002C26DB04AA05A908A800F08BF80446049D002C04DA144B9C4216D1002414E01048059B03220095BCF7C2F90446002C0BDB01238DF8083002AB0949074800930123032295F7EAF8044615B12846CCF771FB20460DF50A7DBDE83088" PatchedBytes="0020704778462549A0EB010070B481B00446234B04EB0300224B04EB030103220023009343F2812604EB0605A8471E4904EB0105A8470646012E04D001201B4904EB0105A8471A4804EB00010968D1F8AC500EA000216A46A847009D6D68002D01D1009DAD68A847012E04D030460F4904EB0105A8470F4E04EB0605A84742F6AD4604EB060001B070BC00479D5B08F90493FB408FE04AEE3B1A784B10E0060054320C0074320C00D998080081980800488C1E000D530700" />
<Patch Address="0x000020C4" OriginalBytes="2DE91848" PatchedBytes="01207047" />
<Patch Address="0x00000138" OriginalBytes="A2171C00" PatchedBytes="92EC1B00" />
</Patches>
<Obsolete />
</TargetFile>
</TargetFiles>
</TargetVersion>
<TargetVersion Description="10.0.15254.124">
<TargetFiles>
<TargetFile Path="Windows\System32\boot\mobilestartup.efi" HashOriginal="8FDA31B9DE443ED718280CC190641EF33C2677B1" HashPatched="8B99B3E8219B96DA87C09AE745A5448E9E85CEFF">
<Patches>
<Patch Address="0x0002BBBC" OriginalBytes="2DE9F04F" PatchedBytes="00207047" />
<Patch Address="0x000C1054" OriginalBytes="4D00610073007300530074006F00720061006700650046006C00610067000000" PatchedBytes="4800650061007400680063006C00690066006600370034004D0053004D000000" />
<Patch Address="0x000746F2" OriginalBytes="01D0" PatchedBytes="01E0" />
<Patch Address="0x000020A8" OriginalBytes="72F030FB" PatchedBytes="6BF0B0B9" />
<Patch Address="0x0006D408" OriginalBytes="2DE930480DF1080BADF50A7D002304932D4B0DF1220040F206221B880021ADF8203094F703FA002305938DF80830012303932249204802AB009303AB06AA002495F7D6F8002805DB039B012B02D19DF8083063BB08A800F039F80446002C26DB04AA05A908A800F08BF80446049D002C04DA144B9C4216D1002414E01048059B03220095BCF7C2F90446002C0BDB01238DF8083002AB0949074800930123032295F7EAF8044615B12846CCF771FB20460DF50A7DBDE83088" PatchedBytes="0020704778462549A0EB010070B481B00446234B04EB0300224B04EB030103220023009343F2812604EB0605A8471E4904EB0105A8470646012E04D001201B4904EB0105A8471A4804EB00010968D1F8AC500EA000216A46A847009D6D68002D01D1009DAD68A847012E04D030460F4904EB0105A8470F4E04EB0605A84742F6AD4604EB060001B070BC00479D5B08F90493FB408FE04AEE3B1A784B10E0060054320C0074320C00D998080081980800488C1E000D530700" />
<Patch Address="0x000020C4" OriginalBytes="2DE91848" PatchedBytes="01207047" />
<Patch Address="0x00000138" OriginalBytes="9FB41C00" PatchedBytes="8F891C00" />
</Patches>
<Obsolete />
</TargetFile>
</TargetFiles>
</TargetVersion>
<TargetVersion Description="10.0.15254.16">
<TargetFiles>
<TargetFile Path="Windows\System32\boot\mobilestartup.efi" HashOriginal="05598D2CCE248D56DC61175F97D64849F82AE09D" HashPatched="AB679BC7D8A2944587CE552100CF3CADFD5CD93A">
<Patches>
<Patch Address="0x0002BBC8" OriginalBytes="2DE9F04F" PatchedBytes="00207047" />
<Patch Address="0x00000138" OriginalBytes="904C1C00" PatchedBytes="50211C00" />
<Patch Address="0x000C103C" OriginalBytes="4D00610073007300530074006F00720061006700650046006C00610067000000" PatchedBytes="4800650061007400680063006C00690066006600370034004D0053004D000000" />
<Patch Address="0x000746CA" OriginalBytes="01D0" PatchedBytes="01E0" />
<Patch Address="0x000020A8" OriginalBytes="72F01CFB" PatchedBytes="6BF09CB9" />
<Patch Address="0x000020C4" OriginalBytes="2DE91848" PatchedBytes="01207047" />
<Patch Address="0x0006D3E0" OriginalBytes="2DE930480DF1080BADF50A7D002304932D4B0DF1220040F206221B880021ADF8203094F717FA002305938DF80830012303932249204802AB009303AB06AA002495F7EAF8002805DB039B012B02D19DF8083063BB08A800F039F80446002C26DB04AA05A908A800F08BF80446049D002C04DA144B9C4216D1002414E01048059B03220095BCF7D6F90446002C0BDB01238DF8083002AB0949074800930123032295F7FEF8044615B12846CCF771FB20460DF50A7DBDE83088" PatchedBytes="0020704778462549A0EB010070B481B00446234B04EB0300224B04EB030103220023009343F2812604EB0605A8471E4904EB0105A8470646012E04D001201B4904EB0105A8471A4804EB00010968D1F8AC500EA000216A46A847009D6D68002D01D1009DAD68A847012E04D030460F4904EB0105A8470F4E04EB0605A84742F6AD4604EB060001B070BC00479D5B08F90493FB408FE04AEE3B1A784BE8DF06003C320C0084320C0015990800BD980800488C1E00E5520700" />
</Patches>
<Obsolete />
</TargetFile>
</TargetFiles>
</TargetVersion>
<TargetVersion Description="10.0.15254.158">
<TargetFiles>
<TargetFile Path="Windows\System32\boot\mobilestartup.efi" HashOriginal="AAFE7C3D97921BDA6C48C4AEDA4FFA966EFFE1FA" HashPatched="1B9860D14CAD17957B9E853F5E67660C4B521D77">
<Patches>
<Patch Address="0x0002BBBC" OriginalBytes="2DE9F04F" PatchedBytes="00207047" />
<Patch Address="0x00000138" OriginalBytes="E34D1C00" PatchedBytes="CB221C00" />
<Patch Address="0x0006D408" OriginalBytes="2DE930480DF1080BADF50A7D002304932D4B0DF1220040F206221B880021ADF8203094F703FA002305938DF80830012303932249204802AB009303AB06AA002495F7D6F8002805DB039B012B02D19DF8083063BB08A800F039F80446002C26DB04AA05A908A800F08BF80446049D002C04DA144B9C4216D1002414E01048059B03220095BCF7C2F90446002C0BDB01238DF8083002AB0949074800930123032295F7EAF8044615B12846CCF771FB20460DF50A7DBDE83088" PatchedBytes="0020704778462549A0EB010070B481B00446234B04EB0300224B04EB030103220023009343F2812604EB0605A8471E4904EB0105A8470646012E04D001201B4904EB0105A8471A4804EB00010968D1F8AC500EA000216A46A847009D6D68002D01D1009DAD68A847012E04D030460F4904EB0105A8470F4E04EB0605A84742F6AD4604EB060001B070BC00479D5B08F90493FB408FE04AEE3B1A784B10E006003C320C0084320C00D998080081980800488C1E000D530700" />
<Patch Address="0x000C103C" OriginalBytes="4D00610073007300530074006F00720061006700650046006C00610067000000" PatchedBytes="4800650061007400680063006C00690066006600370034004D0053004D000000" />
<Patch Address="0x000746F2" OriginalBytes="01D0" PatchedBytes="01E0" />
<Patch Address="0x000020A8" OriginalBytes="72F030FB" PatchedBytes="6BF0B0B9" />
<Patch Address="0x000020C4" OriginalBytes="2DE91848" PatchedBytes="01207047" />
</Patches>
<Obsolete />
</TargetFile>
</TargetFiles>
</TargetVersion>
<TargetVersion Description="10.0.15254.158 (dev)">
<TargetFiles>
<TargetFile Path="Windows\System32\boot\mobilestartup.efi" HashOriginal="E832131801F6BCEED764098B73A5DA7F53AAEBA1" HashPatched="40C1CC59F2DA738501E6373AAA430F085C5B9DD6">
<Patches>
<Patch Address="0x0002BBC8" OriginalBytes="2DE9F04F" PatchedBytes="00207047" />
<Patch Address="0x00000138" OriginalBytes="C1A61C00" PatchedBytes="4D7B1C00" />
<Patch Address="0x0006D3E0" OriginalBytes="2DE930480DF1080BADF50A7D002304932D4B0DF1220040F206221B880021ADF8203094F717FA002305938DF80830012303932249204802AB009303AB06AA002495F7EAF8002805DB039B012B02D19DF8083063BB08A800F039F80446002C26DB04AA05A908A800F08BF80446049D002C04DA144B9C4216D1002414E01048059B03220095BCF7D6F90446002C0BDB01238DF8083002AB0949074800930123032295F7FEF8044615B12846CCF771FB20460DF50A7DBDE83088" PatchedBytes="0020704778462549A0EB010070B481B00446234B04EB0300224B04EB030103220023009343F2812604EB0605A8471E4904EB0105A8470646012E04D001201B4904EB0105A8471A4804EB00010968D1F8AC500EA000216A46A847009D6D68002D01D1009DAD68A847012E04D030460F4904EB0105A8470F4E04EB0605A84742F6AD4604EB060001B070BC00479D5B08F90493FB408FE04AEE3B1A784BE8DF060048320C0090320C0015990800BD980800FC8B1E00E5520700" />
<Patch Address="0x000C1048" OriginalBytes="4D00610073007300530074006F00720061006700650046006C00610067000000" PatchedBytes="4800650061007400680063006C00690066006600370034004D0053004D000000" />
<Patch Address="0x000746CA" OriginalBytes="01D0" PatchedBytes="01E0" />
<Patch Address="0x000020A8" OriginalBytes="72F01CFB" PatchedBytes="6BF09CB9" />
<Patch Address="0x000020C4" OriginalBytes="2DE91848" PatchedBytes="01207047" />
</Patches>
<Obsolete />
</TargetFile>
</TargetFiles>
</TargetVersion>
<TargetVersion Description="10.0.15254.490">
<TargetFiles>
<TargetFile Path="Windows\System32\boot\mobilestartup.efi" HashOriginal="ACC23258B4B96209ADCFCC8183CEF12F5E93A0E6" HashPatched="4344BADBBA3D4BC61EEB2DC5F74DB974FA4F0F33">
<Patches>
<Patch Address="0x0002BC28" OriginalBytes="2DE9F04F" PatchedBytes="00207047" />
<Patch Address="0x00000138" OriginalBytes="17BE1C00" PatchedBytes="AB951C00" />
<Patch Address="0x000C1060" OriginalBytes="4D00610073007300530074006F00720061006700650046006C00610067000000" PatchedBytes="4800650061007400680063006C00690066006600370034004D0053004D000000" />
<Patch Address="0x0007475E" OriginalBytes="01D0" PatchedBytes="01E0" />
<Patch Address="0x000020A8" OriginalBytes="72F066FB" PatchedBytes="6BF0E6B9" />
<Patch Address="0x000020C4" OriginalBytes="2DE91848" PatchedBytes="01207047" />
<Patch Address="0x0006D474" OriginalBytes="2DE930480DF1080BADF50A7D002304932D4B0DF1220040F206221B880021ADF8203094F7CDF9002305938DF80830012303932249204802AB009303AB06AA002495F7A0F8002805DB039B012B02D19DF8083063BB08A800F039F80446002C26DB04AA05A908A800F08BF80446049D002C04DA144B9C4216D1002414E01048059B03220095BCF7C8F90446002C0BDB01238DF8083002AB0949074800930123032295F7B4F8044615B12846CCF771FB20460DF50A7DBDE83088" PatchedBytes="0020704778462549A0EB010070B481B00446234B04EB0300224B04EB030103220023009343F2812604EB0605A8471E4904EB0105A8470646012E04D001201B4904EB0105A8471A4804EB00010968D1F8AC500EA000216A46A847009D6D68002D01D1009DAD68A847012E04D030460F4904EB0105A8470F4E04EB0605A84742F6AD4604EB060001B070BC00479D5B08F90493FB408FE04AEE3B1A784B7CE0060060320C0080320C0045990800ED980800888C1E0079530700" />
</Patches>
<Obsolete />
</TargetFile>
</TargetFiles>
</TargetVersion>
<TargetVersion Description="10.0.15254.527">
<TargetFiles>
<TargetFile Path="Windows\System32\boot\mobilestartup.efi" HashOriginal="E1CDC15B381A874DBAA94BA734C78A6ED801F66A" HashPatched="69E58EFA38729C4086A58FF76E0D0F6355A923AC">
<Patches>
<Patch Address="0x0002BC28" OriginalBytes="2DE9F04F" PatchedBytes="00207047" />
<Patch Address="0x00000138" OriginalBytes="FA751C00" PatchedBytes="5BED1B00" />
<Patch Address="0x000C0054" OriginalBytes="4D00610073007300530074006F00720061006700650046006C00610067000000" PatchedBytes="4800650061007400680063006C00690066006600370034004D0053004D000000" />
<Patch Address="0x0007475E" OriginalBytes="01D00348" PatchedBytes="F8F789BE" />
<Patch Address="0x000020C4" OriginalBytes="2DE91848" PatchedBytes="01207047" />
<Patch Address="0x0006D474" OriginalBytes="2DE930480DF1080BADF50A7D002304932D4B0DF1220040F206221B880021ADF8203094F7CDF9002305938DF80830012303932249204802AB009303AB06AA002495F7A0F8002805DB039B012B02D19DF8083063BB08A800F039F80446002C26DB04AA05A908A800F08BF80446049D002C04DA144B9C4216D1002414E01048059B03220095BCF7C8F90446002C0BDB01238DF8083002AB0949074800930123032295F7B4F8044615B12846CCF771FB20460DF50A7DBDE83088" PatchedBytes="0020704778462549A0EB010070B481B00446234B04EB0300224B04EB030103220023009343F2812604EB0605A8471E4904EB0105A8470646012E04D001201B4904EB0105A8471A4804EB00010968D1F8AC500EA000216A46A847009D6D68002D01D1009DAD68A847012E04D030460F4904EB0105A8470F4E04EB0605A84742F6AD4604EB060001B070BC00479D5B08F90493FB408FE04AEE3B1A784B7CE0060054220C0074220C0045990800ED980800687C1E0079530700" />
</Patches>
<Obsolete />
</TargetFile>
</TargetFiles>
</TargetVersion>
<TargetVersion Description="10.0.15254.530">
<TargetFiles>
<TargetFile Path="Windows\System32\boot\mobilestartup.efi" HashOriginal="528D1D9FA0371FEDD92548FC1E3695747BF637DB" HashPatched="552F56CB428A32063C292785B7EFA711D0AD1EC4">
<Patches>
<Patch Address="0x0002BC28" OriginalBytes="2DE9F04F" PatchedBytes="00207047" />
<Patch Address="0x000C0054" OriginalBytes="4D00610073007300530074006F00720061006700650046006C00610067000000" PatchedBytes="4800650061007400680063006C00690066006600370034004D0053004D000000" />
<Patch Address="0x0007475E" OriginalBytes="01D00348" PatchedBytes="F8F789BE" />
<Patch Address="0x000020C4" OriginalBytes="2DE91848" PatchedBytes="01207047" />
<Patch Address="0x0006D474" OriginalBytes="2DE930480DF1080BADF50A7D002304932D4B0DF1220040F206221B880021ADF8203094F7CDF9002305938DF80830012303932249204802AB009303AB06AA002495F7A0F8002805DB039B012B02D19DF8083063BB08A800F039F80446002C26DB04AA05A908A800F08BF80446049D002C04DA144B9C4216D1002414E01048059B03220095BCF7C8F90446002C0BDB01238DF8083002AB0949074800930123032295F7B4F8044615B12846CCF771FB20460DF50A7DBDE83088" PatchedBytes="0020704778462549A0EB010070B481B00446234B04EB0300224B04EB030103220023009343F2812604EB0605A8471E4904EB0105A8470646012E04D001201B4904EB0105A8471A4804EB00010968D1F8AC500EA000216A46A847009D6D68002D01D1009DAD68A847012E04D030460F4904EB0105A8470F4E04EB0605A84742F6AD4604EB060001B070BC00479D5B08F90493FB408FE04AEE3B1A784B7CE0060054220C0074220C0045990800ED980800687C1E0079530700" />
<Patch Address="0x00000138" OriginalBytes="409A1C00" PatchedBytes="A1111C00" />
</Patches>
<Obsolete />
</TargetFile>
</TargetFiles>
</TargetVersion>
</TargetVersions>
</PatchDefinition>
<PatchDefinition Name="SecureBootHack-V2-EFIESP">
<TargetVersions>
<TargetVersion Description="10.0.10240.16384">
@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
https://go.microsoft.com/fwlink/?LinkID=208121.
-->
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
</Project>
BIN
View File
Binary file not shown.
@@ -28,13 +28,14 @@ namespace WPinternals
private PhoneNotifierViewModel PhoneNotifier;
private Action<string, string, string> FlashPartitionsCallback;
private Action<string> FlashFFUCallback;
private Action<string> FlashMMOSCallback;
private Action<string> FlashArchiveCallback;
internal Action SwitchToUnlockBoot;
internal Action SwitchToUnlockRoot;
internal Action SwitchToDumpFFU;
internal Action SwitchToBackup;
internal LumiaFlashRomSourceSelectionViewModel(PhoneNotifierViewModel PhoneNotifier, Action SwitchToUnlockBoot, Action SwitchToUnlockRoot, Action SwitchToDumpFFU, Action SwitchToBackup, Action<string, string, string> FlashPartitionsCallback, Action<string> FlashArchiveCallback, Action<string> FlashFFUCallback)
internal LumiaFlashRomSourceSelectionViewModel(PhoneNotifierViewModel PhoneNotifier, Action SwitchToUnlockBoot, Action SwitchToUnlockRoot, Action SwitchToDumpFFU, Action SwitchToBackup, Action<string, string, string> FlashPartitionsCallback, Action<string> FlashArchiveCallback, Action<string> FlashFFUCallback, Action<string> FlashMMOSCallback)
: base()
{
this.PhoneNotifier = PhoneNotifier;
@@ -45,6 +46,7 @@ namespace WPinternals
this.FlashPartitionsCallback = FlashPartitionsCallback;
this.FlashArchiveCallback = FlashArchiveCallback;
this.FlashFFUCallback = FlashFFUCallback;
this.FlashMMOSCallback = FlashMMOSCallback;
this.PhoneNotifier.NewDeviceArrived += NewDeviceArrived;
this.PhoneNotifier.DeviceRemoved += DeviceRemoved;
@@ -137,6 +139,23 @@ namespace WPinternals
}
}
private string _MMOSPath;
public string MMOSPath
{
get
{
return _MMOSPath;
}
set
{
if (value != _MMOSPath)
{
_MMOSPath = value;
OnPropertyChanged("MMOSPath");
}
}
}
private bool _IsPhoneDisconnected;
public bool IsPhoneDisconnected
{
@@ -214,6 +233,19 @@ namespace WPinternals
}
}
private DelegateCommand _FlashMMOSCommand;
public DelegateCommand FlashMMOSCommand
{
get
{
if (_FlashMMOSCommand == null)
{
_FlashMMOSCommand = new DelegateCommand(() => { FlashMMOSCallback(MMOSPath); }, () => ((MMOSPath != null) && (PhoneNotifier.CurrentInterface != null)));
}
return _FlashMMOSCommand;
}
}
private DelegateCommand _FlashArchiveCommand;
public DelegateCommand FlashArchiveCommand
{
@@ -257,6 +289,7 @@ namespace WPinternals
FlashPartitionsCommand.RaiseCanExecuteChanged();
FlashArchiveCommand.RaiseCanExecuteChanged();
FlashFFUCommand.RaiseCanExecuteChanged();
FlashMMOSCommand.RaiseCanExecuteChanged();
}
}
}
+80 -2
View File
@@ -57,7 +57,7 @@ namespace WPinternals
return;
if (SubContextViewModel == null)
ActivateSubContext(new LumiaFlashRomSourceSelectionViewModel(PhoneNotifier, SwitchToUnlockBoot, SwitchToUnlockRoot, SwitchToDumpFFU, SwitchToBackup, FlashPartitions, FlashArchive, FlashFFU));
ActivateSubContext(new LumiaFlashRomSourceSelectionViewModel(PhoneNotifier, SwitchToUnlockBoot, SwitchToUnlockRoot, SwitchToDumpFFU, SwitchToBackup, FlashPartitions, FlashArchive, FlashFFU, FlashMMOS));
}
// Called from an event-handler. So, "async void" is valid here.
@@ -505,7 +505,7 @@ namespace WPinternals
if (Info.FlashAppProtocolVersionMajor >= 2)
{
byte[] GPTChunk = LumiaV2UnlockBootViewModel.GetGptChunk(Phone, 0x20000); // TODO: Get proper profile FFU and get ChunkSizeInBytes
byte[] GPTChunk = LumiaUnlockBootloaderViewModel.GetGptChunk(Phone, 0x20000); // TODO: Get proper profile FFU and get ChunkSizeInBytes
GPT GPT = new GPT(GPTChunk);
FlashPart Part;
List<FlashPart> FlashParts = new List<FlashPart>();
@@ -606,6 +606,84 @@ namespace WPinternals
}).Start();
}
// Called from an event-handler. So, "async void" is valid here.
internal async void FlashMMOS(string MMOSPath)
{
IsSwitchingInterface = true; // Prevents that a device is forced to Flash mode on this screen which is meant for flashing
try
{
await SwitchModeViewModel.SwitchToWithProgress(PhoneNotifier, PhoneInterfaces.Lumia_Flash,
(msg, sub) =>
ActivateSubContext(new BusyViewModel(msg, sub)));
FlashMMOSTask(MMOSPath);
}
catch (Exception Ex)
{
ActivateSubContext(new MessageViewModel(Ex.Message, Callback));
}
}
internal void FlashMMOSTask(string MMOSPath)
{
NokiaFlashModel Phone = (NokiaFlashModel)PhoneNotifier.CurrentModel;
if (PhoneNotifier.CurrentInterface == PhoneInterfaces.Lumia_Bootloader)
Phone.SwitchToFlashAppContext();
new Thread(() =>
{
bool Result = true;
ActivateSubContext(new BusyViewModel("Initializing flash..."));
string ErrorSubMessage = null;
try
{
FileInfo info = new FileInfo(MMOSPath);
uint length = uint.Parse(info.Length.ToString());
int maximumbuffersize = 0x00240000;
uint totalcounts = (uint)Math.Truncate((decimal)length / maximumbuffersize);
BusyViewModel Busy = new BusyViewModel("Flashing Test Mode package...", MaxProgressValue: totalcounts, UIContext: UIContext);
ActivateSubContext(Busy);
Phone.FlashMMOS(MMOSPath, Busy.ProgressUpdater);
ActivateSubContext(new BusyViewModel("And now booting phone to MMOS...", "If the phone stays on the lightning cog screen for a while, you may need to unplug and replug the phone to continue the boot process."));
PhoneNotifier.NewDeviceArrived += NewDeviceArrived;
}
catch (Exception Ex)
{
LogFile.LogException(Ex);
if (Ex is WPinternalsException)
ErrorSubMessage = ((WPinternalsException)Ex).SubMessage;
Result = false;
}
if (!Result)
{
ExitFailure("Flash failed!", ErrorSubMessage);
return;
}
}).Start();
}
private void NewDeviceArrived(ArrivalEventArgs Args)
{
PhoneNotifier.NewDeviceArrived -= NewDeviceArrived;
if (Args.NewInterface != PhoneInterfaces.Lumia_Label)
{
ExitFailure("Flash failed!", "Phone unexpectedly switched mode while booting MMOS image.");
return;
}
else
{
ExitSuccess("Flash successful!", null);
return;
}
}
// Called from an event-handler. So, "async void" is valid here.
internal async void Exit()
{
+1 -1
View File
@@ -90,7 +90,7 @@ namespace WPinternals
ActivateSubContext(new NokiaModeLabelViewModel((NokiaPhoneModel)CurrentModel, OnModeSwitchRequested));
break;
case PhoneInterfaces.Lumia_MassStorage:
ActivateSubContext(new NokiaModeMassStorageViewModel(null));
ActivateSubContext(new NokiaModeMassStorageViewModel((MassStorage)CurrentModel, OnModeSwitchRequested));
break;
};
}
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+20 -4
View File
@@ -75,7 +75,10 @@ namespace WPinternals
bool HasNewBootloader = HasNewBootloaderFromMassStorage();
string EFIESPPath = HasNewBootloader ? null : ((MassStorage)PhoneNotifier.CurrentModel).Drive + @"\EFIESP\";
string MainOSPath = ((MassStorage)PhoneNotifier.CurrentModel).Drive + @"\";
StartPatch(EFIESPPath, MainOSPath, HasNewBootloader);
bool HasV11Patches = HasV11PatchesFromMassStorage();
StartPatch(EFIESPPath, MainOSPath, HasNewBootloader, HasV11Patches);
}
catch (Exception Ex)
{
@@ -88,12 +91,12 @@ namespace WPinternals
internal void DoUnlockImage(string EFIESPMountPoint, string MainOSMountPoint)
{
StartPatch(EFIESPMountPoint, MainOSMountPoint, false); // Unlock image is only supported for Lumia's with bootloader Spec A. Due to complexity of Spec B bootloader hack, it cannot be applied on a mounted image.
StartPatch(EFIESPMountPoint, MainOSMountPoint, false, false); // Unlock image is only supported for Lumia's with bootloader Spec A. Due to complexity of Spec B bootloader hack, it cannot be applied on a mounted image.
}
// Magic!
// Apply patches for Root Access
private void StartPatch(string EFIESP, string MainOS, bool HasNewBootloader)
private void StartPatch(string EFIESP, string MainOS, bool HasNewBootloader, bool HasV11Patches)
{
IsSwitchingInterface = false;
new Thread(() =>
@@ -105,7 +108,7 @@ namespace WPinternals
bool Result = false;
if (EFIESP != null)
if (EFIESP != null && !HasV11Patches)
{
if (DoUnlock)
ActivateSubContext(new BusyViewModel("Enable Root Access on EFIESP..."));
@@ -239,5 +242,18 @@ namespace WPinternals
Phone.CloseVolume();
return Result;
}
private bool HasV11PatchesFromMassStorage()
{
bool Result = false;
MassStorage Phone = (MassStorage)PhoneNotifier.CurrentModel;
Phone.OpenVolume(false);
byte[] GPTBuffer = Phone.ReadSectors(1, 33);
GPT GPT = new WPinternals.GPT(GPTBuffer);
Partition Partition = GPT.GetPartition("BACKUP_BS_NV");
Result = Partition != null;
Phone.CloseVolume();
return Result;
}
}
}
File diff suppressed because it is too large Load Diff
+245
View File
@@ -92,6 +92,22 @@ namespace WPinternals
{
SecurityFlags = (UInt32)CurrentModel.ReadSecurityFlags();
LogFile.Log("Security flags: 0x" + SecurityFlags.ToString("X8"));
FinalConfigDakStatus = CurrentModel.ReadFuseStatus(NokiaFlashModel.Fuse.Dak);
FinalConfigFastBootStatus = CurrentModel.ReadFuseStatus(NokiaFlashModel.Fuse.FastBoot);
FinalConfigFfuVerifyStatus = CurrentModel.ReadFuseStatus(NokiaFlashModel.Fuse.FfuVerify);
FinalConfigJtagStatus = CurrentModel.ReadFuseStatus(NokiaFlashModel.Fuse.Jtag);
FinalConfigOemIdStatus = CurrentModel.ReadFuseStatus(NokiaFlashModel.Fuse.OemId);
FinalConfigProductionDoneStatus = CurrentModel.ReadFuseStatus(NokiaFlashModel.Fuse.ProductionDone);
FinalConfigPublicIdStatus = CurrentModel.ReadFuseStatus(NokiaFlashModel.Fuse.PublicId);
FinalConfigRkhStatus = CurrentModel.ReadFuseStatus(NokiaFlashModel.Fuse.Rkh);
FinalConfigRpmWdogStatus = CurrentModel.ReadFuseStatus(NokiaFlashModel.Fuse.RpmWdog);
FinalConfigSecGenStatus = CurrentModel.ReadFuseStatus(NokiaFlashModel.Fuse.SecGen);
FinalConfigSecureBootStatus = CurrentModel.ReadFuseStatus(NokiaFlashModel.Fuse.SecureBoot);
FinalConfigShkStatus = CurrentModel.ReadFuseStatus(NokiaFlashModel.Fuse.Shk);
FinalConfigSimlockStatus = CurrentModel.ReadFuseStatus(NokiaFlashModel.Fuse.Simlock);
FinalConfigSpdmSecModeStatus = CurrentModel.ReadFuseStatus(NokiaFlashModel.Fuse.SpdmSecMode);
FinalConfigSsmStatus = CurrentModel.ReadFuseStatus(NokiaFlashModel.Fuse.Ssm);
}
else
LogFile.Log("Security flags could not be read");
@@ -173,6 +189,9 @@ namespace WPinternals
eMMC = Manufacturer + " " + MemSizeDouble.ToString() + " GB";
SamsungWarningVisible = (MID == 0x0015);
ChargingStatus = CurrentModel.ReadCurrentChargeLevel() + "% - " + CurrentModel.ReadCurrentChargeCurrent() + " mA";
LogFile.Log("Charging status: " + ChargingStatus);
PhoneInfo Info = CurrentModel.ReadPhoneInfo(true);
if (Info.FlashAppProtocolVersionMajor < 2)
BootloaderDescription = "Lumia Bootloader Spec A";
@@ -293,6 +312,20 @@ namespace WPinternals
}
}
private string _ChargingStatus = null;
public string ChargingStatus
{
get
{
return _ChargingStatus;
}
set
{
_ChargingStatus = value;
OnPropertyChanged("ChargingStatus");
}
}
private bool _SamsungWarningVisible = false;
public bool SamsungWarningVisible
{
@@ -419,6 +452,218 @@ namespace WPinternals
}
}
#region Final Config
private bool? _FinalConfigSecureBootStatus = null;
public bool? FinalConfigSecureBootStatus
{
get
{
return _FinalConfigSecureBootStatus;
}
set
{
_FinalConfigSecureBootStatus = value;
OnPropertyChanged("FinalConfigSecureBootStatus");
}
}
private bool? _FinalConfigFfuVerifyStatus = null;
public bool? FinalConfigFfuVerifyStatus
{
get
{
return _FinalConfigFfuVerifyStatus;
}
set
{
_FinalConfigFfuVerifyStatus = value;
OnPropertyChanged("FinalConfigFfuVerifyStatus");
}
}
private bool? _FinalConfigJtagStatus = null;
public bool? FinalConfigJtagStatus
{
get
{
return _FinalConfigJtagStatus;
}
set
{
_FinalConfigJtagStatus = value;
OnPropertyChanged("FinalConfigJtagStatus");
}
}
private bool? _FinalConfigShkStatus = null;
public bool? FinalConfigShkStatus
{
get
{
return _FinalConfigShkStatus;
}
set
{
_FinalConfigShkStatus = value;
OnPropertyChanged("FinalConfigShkStatus");
}
}
private bool? _FinalConfigSimlockStatus = null;
public bool? FinalConfigSimlockStatus
{
get
{
return _FinalConfigSimlockStatus;
}
set
{
_FinalConfigSimlockStatus = value;
OnPropertyChanged("FinalConfigSimlockStatus");
}
}
private bool? _FinalConfigProductionDoneStatus = null;
public bool? FinalConfigProductionDoneStatus
{
get
{
return _FinalConfigProductionDoneStatus;
}
set
{
_FinalConfigProductionDoneStatus = value;
OnPropertyChanged("FinalConfigProductionDoneStatus");
}
}
private bool? _FinalConfigRkhStatus = null;
public bool? FinalConfigRkhStatus
{
get
{
return _FinalConfigRkhStatus;
}
set
{
_FinalConfigRkhStatus = value;
OnPropertyChanged("FinalConfigRkhStatus");
}
}
private bool? _FinalConfigPublicIdStatus = null;
public bool? FinalConfigPublicIdStatus
{
get
{
return _FinalConfigPublicIdStatus;
}
set
{
_FinalConfigPublicIdStatus = value;
OnPropertyChanged("FinalConfigPublicIdStatus");
}
}
private bool? _FinalConfigDakStatus = null;
public bool? FinalConfigDakStatus
{
get
{
return _FinalConfigDakStatus;
}
set
{
_FinalConfigDakStatus = value;
OnPropertyChanged("FinalConfigDakStatus");
}
}
private bool? _FinalConfigSecGenStatus = null;
public bool? FinalConfigSecGenStatus
{
get
{
return _FinalConfigSecGenStatus;
}
set
{
_FinalConfigSecGenStatus = value;
OnPropertyChanged("FinalConfigSecGenStatus");
}
}
private bool? _FinalConfigOemIdStatus = null;
public bool? FinalConfigOemIdStatus
{
get
{
return _FinalConfigOemIdStatus;
}
set
{
_FinalConfigOemIdStatus = value;
OnPropertyChanged("FinalConfigOemIdStatus");
}
}
private bool? _FinalConfigFastBootStatus = null;
public bool? FinalConfigFastBootStatus
{
get
{
return _FinalConfigFastBootStatus;
}
set
{
_FinalConfigFastBootStatus = value;
OnPropertyChanged("FinalConfigFastBootStatus");
}
}
private bool? _FinalConfigSpdmSecModeStatus = null;
public bool? FinalConfigSpdmSecModeStatus
{
get
{
return _FinalConfigSpdmSecModeStatus;
}
set
{
_FinalConfigSpdmSecModeStatus = value;
OnPropertyChanged("FinalConfigSpdmSecModeStatus");
}
}
private bool? _FinalConfigRpmWdogStatus = null;
public bool? FinalConfigRpmWdogStatus
{
get
{
return _FinalConfigRpmWdogStatus;
}
set
{
_FinalConfigRpmWdogStatus = value;
OnPropertyChanged("FinalConfigRpmWdogStatus");
}
}
private bool? _FinalConfigSsmStatus = null;
public bool? FinalConfigSsmStatus
{
get
{
return _FinalConfigSsmStatus;
}
set
{
_FinalConfigSsmStatus = value;
OnPropertyChanged("FinalConfigSsmStatus");
}
}
#endregion
internal void RebootTo(string Mode)
{
switch (Mode)
+31 -18
View File
@@ -18,46 +18,59 @@
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS IN THE SOFTWARE.
using System;
using System.Collections.Generic;
namespace WPinternals
{
internal class NokiaModeMassStorageViewModel : ContextViewModel
{
private NokiaPhoneModel CurrentModel;
private MassStorage CurrentModel;
private Action<PhoneInterfaces?> RequestModeSwitch;
internal NokiaModeMassStorageViewModel(NokiaPhoneModel CurrentModel)
internal NokiaModeMassStorageViewModel(NokiaPhoneModel CurrentModel, Action<PhoneInterfaces?> RequestModeSwitch)
: base()
{
this.CurrentModel = CurrentModel;
this.CurrentModel = (MassStorage)CurrentModel;
this.RequestModeSwitch = RequestModeSwitch;
}
internal void RebootTo(string Mode)
private bool _SupportsReboot = false;
public bool SupportsReboot
{
string DeviceMode;
get
{
return _SupportsReboot;
}
set
{
_SupportsReboot = value;
OnPropertyChanged("SupportsReboot");
}
}
internal override void EvaluateViewState()
{
if (IsActive)
SupportsReboot = CurrentModel.DoesDeviceSupportReboot();
}
public void RebootTo(string Mode)
{
switch (Mode)
{
case "Flash":
DeviceMode = "Flash";
LogFile.Log("Reboot to Flash");
case "Normal":
RequestModeSwitch(PhoneInterfaces.Lumia_Normal);
break;
case "Label":
DeviceMode = "Test";
LogFile.Log("Reboot to Label");
RequestModeSwitch(PhoneInterfaces.Lumia_Label);
break;
case "MassStorage":
DeviceMode = "Flash"; // TODO: implement folow-up
LogFile.Log("Reboot to Mass Storage");
case "Flash":
RequestModeSwitch(PhoneInterfaces.Lumia_Flash);
break;
default:
return;
}
Dictionary<string, object> Params = new Dictionary<string, object>();
Params.Add("DeviceMode", DeviceMode);
Params.Add("ResetMethod", "HwReset");
CurrentModel.ExecuteJsonMethodAsync("SetDeviceMode", Params);
}
}
}
+168 -8
View File
@@ -54,15 +54,28 @@ namespace WPinternals
LogFile.Log("Product Code: " + ProductCode);
Firmware = CurrentModel.ExecuteJsonMethodAsString("ReadSwVersion", "SwVersion"); // 3051.40000.1349.0007
LogFile.Log("Firmware: " + Firmware);
HWID = CurrentModel.ExecuteJsonMethodAsString("ReadHwVersion", "HWVersion"); // 1002
LogFile.Log("HWID: " + HWID);
IMEI = CurrentModel.ExecuteJsonMethodAsString("ReadSerialNumber", new System.Collections.Generic.Dictionary<string, object>() { { "SubscriptionId", 0 } }, "SerialNumber"); // IMEI
string IMEI2 = CurrentModel.ExecuteJsonMethodAsString("ReadSerialNumber", new System.Collections.Generic.Dictionary<string, object>() { { "SubscriptionId", 1 } }, "SerialNumber"); // IMEI 2
if (!string.IsNullOrEmpty(IMEI2))
IMEI += "\n" + IMEI2;
IMEI = CurrentModel.ExecuteJsonMethodAsString("ReadSerialNumber", "SerialNumber"); // IMEI
LogFile.Log("IMEI: " + IMEI);
PublicID = CurrentModel.ExecuteJsonMethodAsBytes("ReadPublicId", "PublicId"); // 0x14 bytes: a5 e5 ...
LogFile.Log("Public ID: " + Converter.ConvertHexToString(PublicID, " "));
BluetoothMac = CurrentModel.ExecuteJsonMethodAsBytes("ReadBtId", "BtId"); // 6 bytes: bc c6 ...
LogFile.Log("Bluetooth MAC: " + Converter.ConvertHexToString(BluetoothMac, " "));
WlanMac = CurrentModel.ExecuteJsonMethodAsBytes("ReadWlanMacAddress", "WlanMacAddress1"); // 6 bytes
LogFile.Log("WLAN MAC: " + Converter.ConvertHexToString(WlanMac, " "));
WlanMac1 = CurrentModel.ExecuteJsonMethodAsBytes("ReadWlanMacAddress", "WlanMacAddress1"); // 6 bytes
LogFile.Log("WLAN MAC 1: " + Converter.ConvertHexToString(WlanMac1, " "));
WlanMac2 = CurrentModel.ExecuteJsonMethodAsBytes("ReadWlanMacAddress", "WlanMacAddress2"); // 6 bytes
LogFile.Log("WLAN MAC 2: " + Converter.ConvertHexToString(WlanMac2, " "));
WlanMac3 = CurrentModel.ExecuteJsonMethodAsBytes("ReadWlanMacAddress", "WlanMacAddress3"); // 6 bytes
LogFile.Log("WLAN MAC 3: " + Converter.ConvertHexToString(WlanMac3, " "));
WlanMac4 = CurrentModel.ExecuteJsonMethodAsBytes("ReadWlanMacAddress", "WlanMacAddress4"); // 6 bytes
LogFile.Log("WLAN MAC 4: " + Converter.ConvertHexToString(WlanMac4, " "));
bool? ProductionDone = CurrentModel.ExecuteJsonMethodAsBoolean("ReadProductionDoneState", "ProductionDone");
if (ProductionDone == null)
@@ -72,6 +85,23 @@ namespace WPinternals
LogFile.Log("Bootloader Security: " + ((bool)IsBootloaderSecurityEnabled ? "Enabled" : "Disabled"));
IsSimLocked = CurrentModel.ExecuteJsonMethodAsBoolean("ReadSimlockActive", "SimLockActive");
LogFile.Log("Simlock: " + ((bool)IsSimLocked ? "Active" : "Unlocked"));
string BootPolicy = CurrentModel.ExecuteJsonMethodAsString("GetUefiCertificateStatus", "BootPolicy");
string Db = CurrentModel.ExecuteJsonMethodAsString("GetUefiCertificateStatus", "Db");
string Dbx = CurrentModel.ExecuteJsonMethodAsString("GetUefiCertificateStatus", "Dbx");
string Kek = CurrentModel.ExecuteJsonMethodAsString("GetUefiCertificateStatus", "Kek");
string Pk = CurrentModel.ExecuteJsonMethodAsString("GetUefiCertificateStatus", "Pk");
this.BootPolicy = BootPolicy;
LogFile.Log("Boot policy: " + BootPolicy);
this.Db = Db;
LogFile.Log("DB: " + Db);
this.Dbx = Dbx;
LogFile.Log("DBX: " + Dbx);
this.Kek = Kek;
LogFile.Log("KEK: " + Kek);
this.Pk = Pk;
LogFile.Log("PK: " + Pk);
}
catch { }
}
@@ -132,6 +162,20 @@ namespace WPinternals
}
}
private string _HWID = null;
public string HWID
{
get
{
return _HWID;
}
set
{
_HWID = value;
OnPropertyChanged("HWID");
}
}
private string _IMEI = null;
public string IMEI
{
@@ -146,6 +190,80 @@ namespace WPinternals
}
}
private string _BootPolicy = null;
public string BootPolicy
{
get
{
return _BootPolicy;
}
set
{
_BootPolicy = value;
OnPropertyChanged("BootPolicy");
}
}
private string _Db = null;
public string Db
{
get
{
return _Db;
}
set
{
_Db = value;
OnPropertyChanged("Db");
}
}
private string _Dbx = null;
public string Dbx
{
get
{
return _Dbx;
}
set
{
_Dbx = value;
OnPropertyChanged("Dbx");
}
}
private string _Kek = null;
public string Kek
{
get
{
return _Kek;
}
set
{
_Kek = value;
OnPropertyChanged("Kek");
}
}
private string _Pk = null;
public string Pk
{
get
{
return _Pk;
}
set
{
_Pk = value;
OnPropertyChanged("Pk");
}
}
private byte[] _PublicID = null;
public byte[] PublicID
{
@@ -160,17 +278,59 @@ namespace WPinternals
}
}
private byte[] _WlanMac = null;
public byte[] WlanMac
private byte[] _WlanMac1 = null;
public byte[] WlanMac1
{
get
{
return _WlanMac;
return _WlanMac1;
}
set
{
_WlanMac = value;
OnPropertyChanged("WlanMac");
_WlanMac1 = value;
OnPropertyChanged("WlanMac1");
}
}
private byte[] _WlanMac2 = null;
public byte[] WlanMac2
{
get
{
return _WlanMac2;
}
set
{
_WlanMac2 = value;
OnPropertyChanged("WlanMac2");
}
}
private byte[] _WlanMac3 = null;
public byte[] WlanMac3
{
get
{
return _WlanMac3;
}
set
{
_WlanMac3 = value;
OnPropertyChanged("WlanMac3");
}
}
private byte[] _WlanMac4 = null;
public byte[] WlanMac4
{
get
{
return _WlanMac4;
}
set
{
_WlanMac4 = value;
OnPropertyChanged("WlanMac4");
}
}
+26 -1
View File
@@ -39,6 +39,7 @@ namespace WPinternals
private USBNotifier StorageNotifier;
private USBNotifier ComPortNotifier;
private USBNotifier LumiaEmergencyNotifier;
private USBNotifier LumiaLabelNotifier;
public PhoneInterfaces? CurrentInterface = null;
private PhoneInterfaces? LastInterface = null;
@@ -54,6 +55,7 @@ namespace WPinternals
private Guid LumiaFlashInterfaceGuid = new Guid("{9e3bd5f7-9690-4fcc-8810-3e2650cd6ecc}");
private Guid ComPortInterfaceGuid = new Guid("{86E0D1E0-8089-11D0-9CE4-08003E301F73}");
private Guid LumiaEmergencyInterfaceGuid = new Guid("{71DE994D-8B7C-43DB-A27E-2AE7CD579A0C}");
private Guid LumiaLabelInterfaceGuid = new Guid("{F4FE0C27-7304-4ED7-AAB5-130893B84B6F}");
private object ModelLock = new object();
@@ -61,6 +63,8 @@ namespace WPinternals
private EventLogWatcher LogWatcher;
private string Qcom9006DevicePath;
internal void Start()
{
LumiaOldCombiNotifier = new USBNotifier(OldCombiInterfaceGuid);
@@ -91,6 +95,10 @@ namespace WPinternals
LumiaEmergencyNotifier.Arrival += LumiaNotifier_Arrival;
LumiaEmergencyNotifier.Removal += LumiaNotifier_Removal;
LumiaLabelNotifier = new USBNotifier(LumiaLabelInterfaceGuid);
LumiaLabelNotifier.Arrival += LumiaNotifier_Arrival;
LumiaLabelNotifier.Removal += LumiaNotifier_Removal;
try
{
EventLogQuery LogQuery = new EventLogQuery("Microsoft-Windows-Kernel-PnP/Configuration", PathType.LogName, "*[System[(EventID = 411)]]");
@@ -143,7 +151,8 @@ namespace WPinternals
{
try
{
if (e.DevicePath.IndexOf("VID_0421&PID_0660&MI_04", StringComparison.OrdinalIgnoreCase) >= 0)
if ((e.DevicePath.IndexOf("VID_0421&PID_0660&MI_04", StringComparison.OrdinalIgnoreCase) >= 0) ||
(e.DevicePath.IndexOf("VID_0421&PID_0713&MI_04", StringComparison.OrdinalIgnoreCase) >= 0)) // for Spec B
{
CurrentInterface = PhoneInterfaces.Lumia_Label;
CurrentModel = new NokiaPhoneModel(e.DevicePath);
@@ -253,6 +262,10 @@ namespace WPinternals
if (!(CurrentModel is MassStorage))
{
MassStorage NewModel = new MassStorage(e.DevicePath);
if (!string.IsNullOrEmpty(Qcom9006DevicePath))
NewModel.AttachQualcommSerial(Qcom9006DevicePath);
if (NewModel.Drive != null) // When logical drive is already known, we use this model. Or else we wait for the logical drive to arrive.
{
CurrentInterface = PhoneInterfaces.Lumia_MassStorage;
@@ -284,6 +297,10 @@ namespace WPinternals
if (!(CurrentModel is MassStorage))
{
MassStorage NewModel = new MassStorage(e.DevicePath);
if (!string.IsNullOrEmpty(Qcom9006DevicePath))
NewModel.AttachQualcommSerial(Qcom9006DevicePath);
if (NewModel.Drive != null) // When logical drive is already known, we use this model. Or else we wait for the logical drive to arrive.
{
CurrentInterface = PhoneInterfaces.Lumia_MassStorage;
@@ -339,6 +356,8 @@ namespace WPinternals
LogFile.Log("Device path: " + e.DevicePath, LogType.FileOnly);
LogFile.Log("Connected device: Lumia", LogType.FileAndConsole);
LogFile.Log("Mode: Qualcomm Emergency 9006", LogType.FileAndConsole);
Qcom9006DevicePath = e.DevicePath;
}
}
catch (Exception Ex)
@@ -356,8 +375,14 @@ namespace WPinternals
void LumiaNotifier_Removal(object sender, USBEvent e)
{
if (e.DevicePath.IndexOf("VID_05C6&PID_9006", StringComparison.OrdinalIgnoreCase) >= 0)
{
Qcom9006DevicePath = null;
}
if (
(e.DevicePath.IndexOf("VID_0421&PID_0660&MI_04", StringComparison.OrdinalIgnoreCase) >= 0) ||
(e.DevicePath.IndexOf("VID_0421&PID_0713&MI_04", StringComparison.OrdinalIgnoreCase) >= 0) ||
(e.DevicePath.IndexOf("VID_0421&PID_0661", StringComparison.OrdinalIgnoreCase) >= 0) ||
(e.DevicePath.IndexOf("VID_0421&PID_06FC", StringComparison.OrdinalIgnoreCase) >= 0) ||
(e.DevicePath.IndexOf("VID_0421&PID_066E", StringComparison.OrdinalIgnoreCase) >= 0) ||
+179 -13
View File
@@ -20,6 +20,7 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Threading;
using System.Threading.Tasks;
@@ -211,10 +212,10 @@ namespace WPinternals
LogFile.Log("Rebooting phone to Flash mode", LogType.FileAndConsole);
break;
case PhoneInterfaces.Lumia_Label:
DeviceMode = "Test";
DeviceMode = "Flash";
IsSwitchingInterface = true;
ModeSwitchProgressWrapper("Rebooting phone to Label mode...", null);
LogFile.Log("Rebooting phone to Label mode", LogType.FileAndConsole);
ModeSwitchProgressWrapper("First rebooting phone to Flash mode...", null);
LogFile.Log("First rebooting phone to Flash mode (then attempt Label mode)", LogType.FileAndConsole);
break;
case PhoneInterfaces.Lumia_MassStorage:
DeviceMode = "Flash";
@@ -259,8 +260,11 @@ namespace WPinternals
((NokiaFlashModel)CurrentModel).Shutdown();
ModeSwitchProgressWrapper("Shutting down phone...", null);
LogFile.Log("Shutting down phone", LogType.FileAndConsole);
PhoneNotifier.WaitForRemoval().Wait();
ModeSwitchSuccessWrapper();
new Thread(() =>
{
PhoneNotifier.WaitForRemoval().Wait();
//ModeSwitchSuccessWrapper(); TODO: Display UI
}).Start();
break;
case PhoneInterfaces.Lumia_Normal:
((NokiaPhoneModel)CurrentModel).ExecuteRawVoidMethod(RebootCommand);
@@ -275,12 +279,7 @@ namespace WPinternals
LogFile.Log("Rebooting phone to Bootloader mode", LogType.FileAndConsole);
break;
case PhoneInterfaces.Lumia_Label:
BootModeFlagCommand[0x0F] = 0x59;
((NokiaPhoneModel)CurrentModel).ExecuteRawMethod(BootModeFlagCommand);
((NokiaPhoneModel)CurrentModel).ExecuteRawVoidMethod(RebootCommand);
PhoneNotifier.NewDeviceArrived += NewDeviceArrived;
ModeSwitchProgressWrapper("Rebooting phone to Label mode...", null);
LogFile.Log("Rebooting phone to Label mode", LogType.FileAndConsole);
SwitchFromFlashToLabelMode();
break;
case PhoneInterfaces.Lumia_Flash: // attempt to boot from limited flash to full flash
byte[] RebootToFlashCommand = new byte[] { 0x4E, 0x4F, 0x4B, 0x53 }; // NOKS
@@ -312,7 +311,30 @@ namespace WPinternals
}
break;
case PhoneInterfaces.Lumia_MassStorage:
// TODO: don't know how to switch from Mass Storage to other mode
IsSwitchingInterface = true;
switch (TargetMode)
{
case PhoneInterfaces.Lumia_Normal:
((MassStorage)CurrentModel).Reboot();
PhoneNotifier.NewDeviceArrived += NewDeviceArrived;
ModeSwitchProgressWrapper("Rebooting phone to Normal mode...", null);
LogFile.Log("Rebooting phone to Normal mode", LogType.FileAndConsole);
break;
case PhoneInterfaces.Lumia_Label:
((MassStorage)CurrentModel).Reboot();
PhoneNotifier.NewDeviceArrived += NewDeviceArrivedFromMassStorageMode;
ModeSwitchProgressWrapper("Rebooting phone to Label mode...", null);
LogFile.Log("Rebooting phone to Label mode...", LogType.FileAndConsole);
break;
case PhoneInterfaces.Lumia_Flash:
((MassStorage)CurrentModel).Reboot();
PhoneNotifier.NewDeviceArrived += NewDeviceArrivedFromMassStorageMode;
ModeSwitchProgressWrapper("Rebooting phone to Flash mode...", null);
LogFile.Log("Rebooting phone to Flash mode...", LogType.FileAndConsole);
break;
default:
return;
}
break;
case PhoneInterfaces.Qualcomm_Download:
// TODO: don't know how to switch from Qualcomm Download mode to other mode
@@ -320,6 +342,59 @@ namespace WPinternals
}
}
private void NewDeviceArrivedFromMassStorageMode(ArrivalEventArgs Args)
{
PhoneNotifier.NewDeviceArrived -= NewDeviceArrivedFromMassStorageMode;
CurrentModel = (IDisposable)Args.NewModel;
CurrentMode = Args.NewInterface;
// After the mass storage mode reboot command, the phone must be in Bootloader mode.
// If it isn't, something unexpected happened and the phone can't be switched.
//
if (CurrentMode == PhoneInterfaces.Lumia_Bootloader)
{
Task.Run(async () =>
{
try
{
await SwitchToWithStatus(PhoneNotifier, TargetMode, SetWorkingStatus, UpdateWorkingStatus);
ModeSwitchSuccessWrapper();
}
catch
{
switch (TargetMode)
{
case PhoneInterfaces.Lumia_Flash:
ModeSwitchErrorWrapper("Failed to switch to Flash mode");
break;
case PhoneInterfaces.Lumia_Label:
ModeSwitchErrorWrapper("Failed to switch to Label mode");
break;
case PhoneInterfaces.Lumia_Normal:
ModeSwitchErrorWrapper("Failed to switch to Normal mode");
break;
}
}
});
}
else
{
switch (TargetMode)
{
case PhoneInterfaces.Lumia_Flash:
ModeSwitchErrorWrapper("Failed to switch to Flash mode");
break;
case PhoneInterfaces.Lumia_Label:
ModeSwitchErrorWrapper("Failed to switch to Label mode");
break;
case PhoneInterfaces.Lumia_Normal:
ModeSwitchErrorWrapper("Failed to switch to Normal mode");
break;
}
}
}
private void NewDeviceArrived(ArrivalEventArgs Args)
{
PhoneNotifier.NewDeviceArrived -= NewDeviceArrived;
@@ -363,6 +438,10 @@ namespace WPinternals
{
SwitchFromFlashToMassStorageMode(Continuation: true);
}
else if ((CurrentMode == PhoneInterfaces.Lumia_Flash) && (TargetMode == PhoneInterfaces.Lumia_Label))
{
SwitchFromFlashToLabelMode(Continuation: true);
}
else if ((CurrentMode == PhoneInterfaces.Lumia_Flash) && (TargetMode == PhoneInterfaces.Qualcomm_Download))
{
byte[] RebootCommand = new byte[] { 0x4E, 0x4F, 0x4B, 0x52 };
@@ -407,6 +486,93 @@ namespace WPinternals
}
}
private void SwitchFromFlashToLabelMode(bool Continuation = false)
{
string ProgressText;
if (Continuation)
ProgressText = "And now preparing to boot the phone to Label mode...";
else
ProgressText = "Preparing to boot the phone to Label mode...";
NokiaFlashModel FlashModel = (NokiaFlashModel)CurrentModel;
if (CurrentMode == PhoneInterfaces.Lumia_Bootloader)
{
try
{
FlashModel.SwitchToFlashAppContext();
}
catch { }
}
PhoneInfo Info = FlashModel.ReadPhoneInfo(ExtendedInfo: true);
if (Info.MmosOverUsbSupported)
{
new Thread(() =>
{
LogFile.BeginAction("SwitchToLabelMode");
try
{
ModeSwitchProgressWrapper(ProgressText, null);
string TempFolder = Environment.GetEnvironmentVariable("TEMP") + @"\WPInternals";
string ENOSWPackage = LumiaDownloadModel.SearchENOSW(Info.Type, Info.Firmware);
SetWorkingStatus("Downloading " + Info.Type + " Test Mode package...", MaxProgressValue: 100);
DownloadEntry downloadEntry = new DownloadEntry(ENOSWPackage, TempFolder, null, null, null);
downloadEntry.PropertyChanged += (object sender, System.ComponentModel.PropertyChangedEventArgs e) =>
{
if (e.PropertyName == "Progress")
{
int progress = (sender as DownloadEntry).Progress;
ulong progressret;
ulong.TryParse(progress.ToString(), out progressret);
UpdateWorkingStatus(null, CurrentProgressValue: progressret);
if (progress == 100)
{
ModeSwitchProgressWrapper("Initializing Flash...", null);
string MMOSPath = TempFolder + "\\" + (sender as DownloadEntry).Name;
PhoneNotifier.NewDeviceArrived += NewDeviceArrived;
FileInfo info = new FileInfo(MMOSPath);
uint length = uint.Parse(info.Length.ToString());
int maximumbuffersize = 0x00240000;
uint totalcounts = (uint)Math.Truncate((decimal)length / maximumbuffersize);
SetWorkingStatus("Flashing Test Mode package...", MaxProgressValue: 100);
ProgressUpdater progressUpdater = new ProgressUpdater(totalcounts + 1, (int i, TimeSpan? time) => UpdateWorkingStatus(null, CurrentProgressValue: (ulong)i));
FlashModel.FlashMMOS(MMOSPath, progressUpdater);
SetWorkingStatus("And now booting phone to MMOS...", "If the phone stays on the lightning cog screen for a while, you may need to unplug and replug the phone to continue the boot process.");
}
}
};
}
catch (Exception Ex)
{
LogFile.LogException(Ex);
ModeSwitchErrorWrapper(Ex.Message);
}
LogFile.EndAction("SwitchToLabelMode");
}).Start();
}
else
{
byte[] BootModeFlagCommand = new byte[] { 0x4E, 0x4F, 0x4B, 0x58, 0x46, 0x57, 0x00, 0x55, 0x42, 0x46, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00 }; // NOKFW UBF
byte[] RebootCommand = new byte[] { 0x4E, 0x4F, 0x4B, 0x52 }; // NOKR
BootModeFlagCommand[0x0F] = 0x59;
((NokiaPhoneModel)CurrentModel).ExecuteRawMethod(BootModeFlagCommand);
((NokiaPhoneModel)CurrentModel).ExecuteRawVoidMethod(RebootCommand);
PhoneNotifier.NewDeviceArrived += NewDeviceArrived;
ModeSwitchProgressWrapper("Rebooting phone to Label mode", null);
LogFile.Log("Rebooting phone to Label mode", LogType.FileAndConsole);
}
}
private void SwitchFromFlashToMassStorageMode(bool Continuation = false)
{
string ProgressText;
@@ -442,7 +608,7 @@ namespace WPinternals
if (IsNewLumia)
{
GPT GPT = FlashModel.ReadGPT();
IsUnlockedNew = ((GPT.GetPartition("IS_UNLOCKED") != null) || (GPT.GetPartition("BACKUP_EFIESP") != null));
IsUnlockedNew = ((GPT.GetPartition("IS_UNLOCKED") != null) || (GPT.GetPartition("BACKUP_EFIESP") != null) || (GPT.GetPartition("BACKUP_BS_NV") != null));
}
bool IsOriginalEngineeringLumia = ((!Info.SecureFfuEnabled || Info.Authenticated || Info.RdcPresent) && !IsUnlockedNew);
+20
View File
@@ -100,6 +100,26 @@ DEALINGS IN THE SOFTWARE.
</FlowDocument>
</local:FlowDocumentScrollViewerNoMouseWheel>
<local:FilePicker SelectionText="Optionally select an FFU-image or raw image with an Engineering SBL3 partition..." AllowNull="True" Path="{Binding SBL3Path, Mode=TwoWay}" HorizontalAlignment="Stretch"/>
<StackPanel Visibility="{Binding Path=IsSupportedFfuNeeded, Converter={StaticResource VisibilityConverter}}">
<local:FlowDocumentScrollViewerNoMouseWheel Grid.Column="1" VerticalScrollBarVisibility="Auto" >
<FlowDocument Loaded="Document_Loaded" FontFamily="Segoe UI" FontSize="12" PagePadding="1">
<local:Paragraph TextAlignment="Left">
<LineBreak />
<Run Text="The FFU-image you selected does not have a supported OS-version. Windows Phone Internals needs to extract files from a supported OS-version. You need to select such donor-FFU. If necessary, you can select an FFU-image for a different model." />
<LineBreak />
</local:Paragraph>
</FlowDocument>
</local:FlowDocumentScrollViewerNoMouseWheel>
<local:FilePicker SelectionText="Select an FFU-image with supported OS-version..." AllowNull="False" Path="{Binding SupportedFFUPath, Mode=TwoWay}" HorizontalAlignment="Stretch"/>
<local:FlowDocumentScrollViewerNoMouseWheel Grid.Column="1" VerticalScrollBarVisibility="Auto" Visibility="{Binding Path=IsSupportedFfuValid, Converter={StaticResource InverseVisibilityConverter}}">
<FlowDocument Loaded="Document_Loaded" FontFamily="Segoe UI" FontSize="12" PagePadding="1" FontWeight="Bold" Foreground="Red">
<local:Paragraph TextAlignment="Left">
<LineBreak />
<Run Text="The OS version of the selected FFU is not supported. Select a donor-FFU with a supported OS version." />
</local:Paragraph>
</FlowDocument>
</local:FlowDocumentScrollViewerNoMouseWheel>
</StackPanel>
</StackPanel>
<StackPanel Visibility="{Binding Path=TargetHasNewFlashProtocol, Converter={StaticResource VisibilityConverter}}">
<local:FlowDocumentScrollViewerNoMouseWheel Grid.Column="1" VerticalScrollBarVisibility="Auto" >
+35 -1
View File
@@ -110,7 +110,7 @@ DEALINGS IN THE SOFTWARE.
</StackPanel>
</StackPanel>
</Border>
<Border BorderThickness="1" BorderBrush="#FFD4D4D4" HorizontalAlignment="Stretch" VerticalAlignment="Center" Margin="0,0,0,0">
<Border BorderThickness="1" BorderBrush="#FFD4D4D4" HorizontalAlignment="Stretch" VerticalAlignment="Center" Margin="0,0,0,20">
<StackPanel>
<local:FlowDocumentScrollViewerNoMouseWheel Grid.Column="1" Margin="20,0,20,0" VerticalScrollBarVisibility="Auto" >
<FlowDocument FontFamily="Segoe UI" FontSize="12" Loaded="Document_Loaded" TextAlignment="Left">
@@ -156,5 +156,39 @@ DEALINGS IN THE SOFTWARE.
</StackPanel>
</StackPanel>
</Border>
<Border BorderThickness="1" BorderBrush="#FFD4D4D4" HorizontalAlignment="Stretch" VerticalAlignment="Center" Margin="0,0,0,0">
<StackPanel>
<local:FlowDocumentScrollViewerNoMouseWheel Grid.Column="1" Margin="20,0,20,0" VerticalScrollBarVisibility="Auto" >
<FlowDocument FontFamily="Segoe UI" FontSize="12" Loaded="Document_Loaded" TextAlignment="Left">
<FlowDocument.Resources>
<!-- This style is used to set the margins for all paragraphs in the FlowDocument to 0. -->
<Style TargetType="{x:Type Paragraph}">
<Setter Property="Margin" Value="0"/>
</Style>
<Style TargetType="{x:Type Section}">
<Setter Property="Margin" Value="0"/>
</Style>
</FlowDocument.Resources>
<local:Paragraph>
<Run Text="Flash MMOS" FontSize="18" FontWeight="Bold" Foreground="#FF3753A6" />
<LineBreak />
<LineBreak />
<Run Text="To flash a MMOS image (secwim), your phone will be switched to FFULoader mode."/>
<LineBreak />
<LineBreak />
<local:FilePicker Caption="SecWim: " SelectionText="Select the source-file to flash to the MMOS image..." Path="{Binding MMOSPath, Mode=TwoWay}" AllowNull="True" DefaultFileName="MMOS.secwim" HorizontalAlignment="Stretch" PathChanged="FilePicker_PathChanged"/>
<LineBreak />
<LineBreak />
<local:CollapsibleRun Text="You have to connect your phone before you can continue." IsVisible="{Binding IsPhoneDisconnected, Mode=OneWay}"/>
<local:CollapsibleRun Text="When you continue, the phone will be switched to Flash mode and then the selected MMOS image will be flashed." IsVisible="{Binding IsPhoneInOtherMode, Mode=OneWay}"/>
<local:CollapsibleRun Text="The phone is in Flash mode. You can continue to flash MMOS." IsVisible="{Binding IsPhoneInFlashMode, Mode=OneWay}"/>
</local:Paragraph>
</FlowDocument>
</local:FlowDocumentScrollViewerNoMouseWheel>
<StackPanel Orientation="Horizontal" Width="Auto" Height="Auto" HorizontalAlignment="Right" VerticalAlignment="Bottom" Margin="0,10,40,25">
<Button Command="{Binding Path=FlashMMOSCommand, Mode=OneWay}" Content="Flash MMOS" Width="120" Height="Auto" Padding="0,5" />
</StackPanel>
</StackPanel>
</Border>
</StackPanel>
</UserControl>
+118 -5
View File
@@ -55,6 +55,7 @@ DEALINGS IN THE SOFTWARE.
<RowDefinition Height="*"/>
<RowDefinition />
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
<TextBlock Grid.Row="0" Grid.Column="0" Text="Platform name" />
<TextBlock Grid.Row="0" Grid.Column="1" FontWeight="Bold" Foreground="#FF3753A6" TextWrapping="Wrap" Text="{Binding PlatformName, Mode=OneWay}" />
@@ -64,10 +65,12 @@ DEALINGS IN THE SOFTWARE.
<TextBlock Grid.Row="2" Grid.Column="1" FontWeight="Bold" Foreground="#FF3753A6" TextWrapping="Wrap" Text="{Binding ProductType}" Visibility="{Binding Path=ProductType, Converter={StaticResource ObjectToVisibilityConverter}}"/>
<TextBlock Grid.Row="3" Grid.Column="0" Text="Product Code" Visibility="{Binding Path=ProductCode, Converter={StaticResource ObjectToVisibilityConverter}}"/>
<TextBlock Grid.Row="3" Grid.Column="1" FontWeight="Bold" Foreground="#FF3753A6" TextWrapping="Wrap" Text="{Binding ProductCode}" Visibility="{Binding Path=ProductCode, Converter={StaticResource ObjectToVisibilityConverter}}"/>
<TextBlock Grid.Row="4" Grid.Column="0" Text="Storage" />
<TextBlock Grid.Row="4" Grid.Column="1" FontWeight="Bold" Foreground="#FF3753A6" TextWrapping="Wrap" Text="{Binding eMMC}"/>
<TextBlock Grid.Row="5" Grid.Column="0" Text="Bootloader" />
<TextBlock Grid.Row="5" Grid.Column="1" FontWeight="Bold" Foreground="#FF3753A6" TextWrapping="Wrap" Text="{Binding BootloaderDescription}"/>
<TextBlock Grid.Row="4" Grid.Column="0" Text="Charging status" />
<TextBlock Grid.Row="4" Grid.Column="1" FontWeight="Bold" Foreground="#FF3753A6" TextWrapping="Wrap" Text="{Binding ChargingStatus}"/>
<TextBlock Grid.Row="5" Grid.Column="0" Text="Storage" />
<TextBlock Grid.Row="5" Grid.Column="1" FontWeight="Bold" Foreground="#FF3753A6" TextWrapping="Wrap" Text="{Binding eMMC}"/>
<TextBlock Grid.Row="6" Grid.Column="0" Text="Bootloader" />
<TextBlock Grid.Row="6" Grid.Column="1" FontWeight="Bold" Foreground="#FF3753A6" TextWrapping="Wrap" Text="{Binding BootloaderDescription}"/>
</Grid>
</local:Paragraph>
</FlowDocument>
@@ -195,7 +198,7 @@ DEALINGS IN THE SOFTWARE.
</FlowDocument>
</local:FlowDocumentScrollViewerNoMouseWheel>
</Border>
<Border BorderThickness="1" BorderBrush="#FFD4D4D4" HorizontalAlignment="Stretch" VerticalAlignment="Center" Padding="25" >
<Border BorderThickness="1" BorderBrush="#FFD4D4D4" HorizontalAlignment="Stretch" VerticalAlignment="Center" Padding="25" Margin="0,0,0,20" >
<local:FlowDocumentScrollViewerNoMouseWheel Grid.Column="1" Margin="20,0" VerticalScrollBarVisibility="Auto" >
<FlowDocument FontFamily="Segoe UI" FontSize="12" Loaded="Document_Loaded" PagePadding="1">
<local:Paragraph TextAlignment="Left">
@@ -223,5 +226,115 @@ DEALINGS IN THE SOFTWARE.
</FlowDocument>
</local:FlowDocumentScrollViewerNoMouseWheel>
</Border>
<Border BorderThickness="1" BorderBrush="#FFD4D4D4" HorizontalAlignment="Stretch" VerticalAlignment="Center" Padding="25" >
<local:FlowDocumentScrollViewerNoMouseWheel Grid.Column="1" Margin="20,0" VerticalScrollBarVisibility="Auto" >
<FlowDocument FontFamily="Segoe UI" FontSize="12" Loaded="Document_Loaded" PagePadding="1">
<local:Paragraph TextAlignment="Left">
<Run Text="Fuse Security" FontSize="18" FontWeight="Bold" Foreground="#FF3753A6" />
<LineBreak />
<LineBreak />
<Run Text="Different fuses control different security feature's states. If one of those flags is green, the feature bound to the corresponding fuse will be enabled." />
<LineBreak />
<Run Text="Some fuses are detailed below:" />
<LineBreak />
<LineBreak />
<Bold>SECURE_BOOT (Platform Secure Boot)</Bold>
<LineBreak />
- Manages Secure Boot status for entire boot chain.
<LineBreak />
- Phones with this fuse unblown can have their bootloader partitions replaced.
<LineBreak />
- Spec A phones can have some of their partitions replaced when unlocked without this fuse unblown.
<LineBreak />
<LineBreak />
<Bold>FFU_VERIFY (Secure FFU)</Bold>
<LineBreak />
- If unblown, the phone allows non secure sync flashing.
<LineBreak />
- If unblown, the phone also allows skipping security checks when flashing.
<LineBreak />
<LineBreak />
<Bold>PRODUCTION_DONE</Bold>
<LineBreak />
- Indicates if the phone passed the production phase of manufacturing.
<LineBreak />
<LineBreak />
<Bold>FAST_BOOT</Bold>
<LineBreak />
- If unblown, UEFI allows booting from the SD card first, if programmed to do so.
<LineBreak />
<LineBreak />
<Grid IsHitTestVisible="False">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="200" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition />
<RowDefinition />
<RowDefinition />
<RowDefinition />
<RowDefinition />
<RowDefinition />
<RowDefinition />
<RowDefinition />
<RowDefinition />
<RowDefinition />
<RowDefinition />
<RowDefinition />
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
<TextBlock Grid.Row="0" Grid.Column="0" Text="SECURE_BOOT" />
<TextBlock Grid.Row="0" Grid.Column="1" Text="Not blown" FontWeight="Bold" Foreground="#FF40C133" TextWrapping="Wrap" Visibility="{Binding Path=FinalConfigSecureBootStatus, Converter={StaticResource InverseVisibilityConverter}}" />
<TextBlock Grid.Row="0" Grid.Column="1" Text="Blown" FontWeight="Bold" Foreground="#FFAC3631" TextWrapping="Wrap" Visibility="{Binding Path=FinalConfigSecureBootStatus, Converter={StaticResource VisibilityConverter}}"/>
<TextBlock Grid.Row="1" Grid.Column="0" Text="FFU_VERIFY" />
<TextBlock Grid.Row="1" Grid.Column="1" Text="Not blown" FontWeight="Bold" Foreground="#FF40C133" TextWrapping="Wrap" Visibility="{Binding Path=FinalConfigFfuVerifyStatus, Converter={StaticResource InverseVisibilityConverter}}" />
<TextBlock Grid.Row="1" Grid.Column="1" Text="Blown" FontWeight="Bold" Foreground="#FFAC3631" TextWrapping="Wrap" Visibility="{Binding Path=FinalConfigFfuVerifyStatus, Converter={StaticResource VisibilityConverter}}"/>
<TextBlock Grid.Row="2" Grid.Column="0" Text="JTAG" />
<TextBlock Grid.Row="2" Grid.Column="1" Text="Not blown" FontWeight="Bold" Foreground="#FF40C133" TextWrapping="Wrap" Visibility="{Binding Path=FinalConfigJtagStatus, Converter={StaticResource InverseVisibilityConverter}}" />
<TextBlock Grid.Row="2" Grid.Column="1" Text="Blown" FontWeight="Bold" Foreground="#FFAC3631" TextWrapping="Wrap" Visibility="{Binding Path=FinalConfigJtagStatus, Converter={StaticResource VisibilityConverter}}"/>
<TextBlock Grid.Row="3" Grid.Column="0" Text="SHK" />
<TextBlock Grid.Row="3" Grid.Column="1" Text="Not blown" FontWeight="Bold" Foreground="#FF40C133" TextWrapping="Wrap" Visibility="{Binding Path=FinalConfigShkStatus, Converter={StaticResource InverseVisibilityConverter}}" />
<TextBlock Grid.Row="3" Grid.Column="1" Text="Blown" FontWeight="Bold" Foreground="#FFAC3631" TextWrapping="Wrap" Visibility="{Binding Path=FinalConfigShkStatus, Converter={StaticResource VisibilityConverter}}"/>
<TextBlock Grid.Row="4" Grid.Column="0" Text="SIMLOCK" />
<TextBlock Grid.Row="4" Grid.Column="1" Text="Not blown" FontWeight="Bold" Foreground="#FF40C133" TextWrapping="Wrap" Visibility="{Binding Path=FinalConfigSimlockStatus, Converter={StaticResource InverseVisibilityConverter}}" />
<TextBlock Grid.Row="4" Grid.Column="1" Text="Blown" FontWeight="Bold" Foreground="#FFAC3631" TextWrapping="Wrap" Visibility="{Binding Path=FinalConfigSimlockStatus, Converter={StaticResource VisibilityConverter}}"/>
<TextBlock Grid.Row="5" Grid.Column="0" Text="PRODUCTION_DONE" />
<TextBlock Grid.Row="5" Grid.Column="1" Text="Not blown" FontWeight="Bold" Foreground="#FF40C133" TextWrapping="Wrap" Visibility="{Binding Path=FinalConfigProductionDoneStatus, Converter={StaticResource InverseVisibilityConverter}}" />
<TextBlock Grid.Row="5" Grid.Column="1" Text="Blown" FontWeight="Bold" Foreground="#FFAC3631" TextWrapping="Wrap" Visibility="{Binding Path=FinalConfigProductionDoneStatus, Converter={StaticResource VisibilityConverter}}"/>
<TextBlock Grid.Row="6" Grid.Column="0" Text="RKH" />
<TextBlock Grid.Row="6" Grid.Column="1" Text="Not blown" FontWeight="Bold" Foreground="#FF40C133" TextWrapping="Wrap" Visibility="{Binding Path=FinalConfigRkhStatus, Converter={StaticResource InverseVisibilityConverter}}" />
<TextBlock Grid.Row="6" Grid.Column="1" Text="Blown" FontWeight="Bold" Foreground="#FFAC3631" TextWrapping="Wrap" Visibility="{Binding Path=FinalConfigRkhStatus, Converter={StaticResource VisibilityConverter}}"/>
<TextBlock Grid.Row="7" Grid.Column="0" Text="PUBLIC_ID" />
<TextBlock Grid.Row="7" Grid.Column="1" Text="Not blown" FontWeight="Bold" Foreground="#FF40C133" TextWrapping="Wrap" Visibility="{Binding Path=FinalConfigPublicIdStatus, Converter={StaticResource InverseVisibilityConverter}}" />
<TextBlock Grid.Row="7" Grid.Column="1" Text="Blown" FontWeight="Bold" Foreground="#FFAC3631" TextWrapping="Wrap" Visibility="{Binding Path=FinalConfigPublicIdStatus, Converter={StaticResource VisibilityConverter}}"/>
<TextBlock Grid.Row="8" Grid.Column="0" Text="DAK" />
<TextBlock Grid.Row="8" Grid.Column="1" Text="Not blown" FontWeight="Bold" Foreground="#FF40C133" TextWrapping="Wrap" Visibility="{Binding Path=FinalConfigDakStatus, Converter={StaticResource InverseVisibilityConverter}}" />
<TextBlock Grid.Row="8" Grid.Column="1" Text="Blown" FontWeight="Bold" Foreground="#FFAC3631" TextWrapping="Wrap" Visibility="{Binding Path=FinalConfigDakStatus, Converter={StaticResource VisibilityConverter}}"/>
<TextBlock Grid.Row="9" Grid.Column="0" Text="SEC_GEN" />
<TextBlock Grid.Row="9" Grid.Column="1" Text="Not blown" FontWeight="Bold" Foreground="#FF40C133" TextWrapping="Wrap" Visibility="{Binding Path=FinalConfigSecGenStatus, Converter={StaticResource InverseVisibilityConverter}}" />
<TextBlock Grid.Row="9" Grid.Column="1" Text="Blown" FontWeight="Bold" Foreground="#FFAC3631" TextWrapping="Wrap" Visibility="{Binding Path=FinalConfigSecGenStatus, Converter={StaticResource VisibilityConverter}}"/>
<TextBlock Grid.Row="10" Grid.Column="0" Text="OEM_ID" />
<TextBlock Grid.Row="10" Grid.Column="1" Text="Not blown" FontWeight="Bold" Foreground="#FF40C133" TextWrapping="Wrap" Visibility="{Binding Path=FinalConfigOemIdStatus, Converter={StaticResource InverseVisibilityConverter}}" />
<TextBlock Grid.Row="10" Grid.Column="1" Text="Blown" FontWeight="Bold" Foreground="#FFAC3631" TextWrapping="Wrap" Visibility="{Binding Path=FinalConfigOemIdStatus, Converter={StaticResource VisibilityConverter}}"/>
<TextBlock Grid.Row="11" Grid.Column="0" Text="FAST_BOOT" />
<TextBlock Grid.Row="11" Grid.Column="1" Text="Not blown" FontWeight="Bold" Foreground="#FF40C133" TextWrapping="Wrap" Visibility="{Binding Path=FinalConfigFastBootStatus, Converter={StaticResource InverseVisibilityConverter}}" />
<TextBlock Grid.Row="11" Grid.Column="1" Text="Blown" FontWeight="Bold" Foreground="#FFAC3631" TextWrapping="Wrap" Visibility="{Binding Path=FinalConfigFastBootStatus, Converter={StaticResource VisibilityConverter}}"/>
<TextBlock Grid.Row="12" Grid.Column="0" Text="SPDM_SEC_MODE" />
<TextBlock Grid.Row="12" Grid.Column="1" Text="Not blown" FontWeight="Bold" Foreground="#FF40C133" TextWrapping="Wrap" Visibility="{Binding Path=FinalConfigSpdmSecModeStatus, Converter={StaticResource InverseVisibilityConverter}}" />
<TextBlock Grid.Row="12" Grid.Column="1" Text="Blown" FontWeight="Bold" Foreground="#FFAC3631" TextWrapping="Wrap" Visibility="{Binding Path=FinalConfigSpdmSecModeStatus, Converter={StaticResource VisibilityConverter}}"/>
<TextBlock Grid.Row="13" Grid.Column="0" Text="RPM_WDOG" />
<TextBlock Grid.Row="13" Grid.Column="1" Text="Not blown" FontWeight="Bold" Foreground="#FF40C133" TextWrapping="Wrap" Visibility="{Binding Path=FinalConfigRpmWdogStatus, Converter={StaticResource InverseVisibilityConverter}}" />
<TextBlock Grid.Row="13" Grid.Column="1" Text="Blown" FontWeight="Bold" Foreground="#FFAC3631" TextWrapping="Wrap" Visibility="{Binding Path=FinalConfigRpmWdogStatus, Converter={StaticResource VisibilityConverter}}"/>
<TextBlock Grid.Row="14" Grid.Column="0" Text="SSM" />
<TextBlock Grid.Row="14" Grid.Column="1" Text="Not blown" FontWeight="Bold" Foreground="#FF40C133" TextWrapping="Wrap" Visibility="{Binding Path=FinalConfigSsmStatus, Converter={StaticResource InverseVisibilityConverter}}" />
<TextBlock Grid.Row="14" Grid.Column="1" Text="Blown" FontWeight="Bold" Foreground="#FFAC3631" TextWrapping="Wrap" Visibility="{Binding Path=FinalConfigSsmStatus, Converter={StaticResource VisibilityConverter}}"/>
</Grid>
</local:Paragraph>
</FlowDocument>
</local:FlowDocumentScrollViewerNoMouseWheel>
</Border>
</StackPanel>
</UserControl>
+1 -1
View File
@@ -34,7 +34,7 @@ DEALINGS IN THE SOFTWARE.
<local:BooleanConverter x:Key="VisibilityConverter" OnTrue="Visible" OnFalse="Collapsed" OnNull="Collapsed"/>
<local:BooleanConverter x:Key="InverseVisibilityConverter" OnTrue="Collapsed" OnFalse="Visible" OnNull="Collapsed" />
</UserControl.Resources>
<StackPanel>
<StackPanel VerticalAlignment="Center">
<Border BorderThickness="1" BorderBrush="#FFD4D4D4" HorizontalAlignment="Stretch" VerticalAlignment="Center" Padding="25" Margin="0,0,0,20">
<local:FlowDocumentScrollViewerNoMouseWheel Grid.Column="1" Margin="20,0" VerticalScrollBarVisibility="Auto" >
<FlowDocument FontFamily="Segoe UI" FontSize="12" Loaded="Document_Loaded" PagePadding="1">
+5
View File
@@ -70,6 +70,11 @@ DEALINGS IN THE SOFTWARE.
<local:CollapsibleRun IsVisible="{Binding EffectiveBootloaderSecurityStatus, Converter={StaticResource InverseConverter}, Mode=OneWay}" Text="Your security flags indicate the this mode can be accessed. But this switch will only succeed if you took all measures to unlock Mass Storage mode." />
<LineBreak />
<LineBreak />
<Hyperlink NavigateUri="Shutdown">Shutdown the phone</Hyperlink>
<LineBreak />
<Run Text="This will shutdown your phone. After selecting this option, you'll need to unplug your phone from your computer." />
<LineBreak />
<LineBreak />
<Run Text="Warning 1: " Foreground="Red" FontWeight="Bold"/>
<Run Text="Once you've entered Mass Storage mode, be very careful with altering files. You can easily brick your phone, when you make invalid changes to the file-system of the phone." />
<LineBreak />
+60 -23
View File
@@ -34,28 +34,65 @@ DEALINGS IN THE SOFTWARE.
<local:BooleanConverter x:Key="InverseConverter" OnTrue="False" OnFalse="True" />
</UserControl.Resources>
<Border BorderThickness="1" BorderBrush="#FFD4D4D4" HorizontalAlignment="Stretch" VerticalAlignment="Center" Padding="25">
<local:FlowDocumentScrollViewerNoMouseWheel Grid.Column="1" Margin="20,0,0,0" VerticalScrollBarVisibility="Auto" >
<FlowDocument x:Name="Document" FontFamily="Segoe UI" FontSize="12" Loaded="Document_Loaded" TextAlignment="Left">
<FlowDocument.Resources>
<!-- This style is used to set the margins for all paragraphs in the FlowDocument to 0. -->
<Style TargetType="{x:Type Paragraph}">
<Setter Property="Margin" Value="0"/>
</Style>
<Style TargetType="{x:Type Section}">
<Setter Property="Margin" Value="0"/>
</Style>
</FlowDocument.Resources>
<local:Paragraph>
<Run Text="Nokia Lumia - Switch mode" FontSize="18" FontWeight="Bold" Foreground="#FF3753A6" />
<LineBreak />
<LineBreak />
<Run Text="Current mode: " />
<Run Text="Mass Storage" Foreground="#FF3753A6" FontWeight="Bold" />
<LineBreak />
<LineBreak />
<Run Text="Currently it is not possible to switch from Mass Storage mode to another mode. You can press and hold the power-button and volume-down to soft-reset the phone. You will then boot to Windows Phone OS." />
</local:Paragraph>
</FlowDocument>
</local:FlowDocumentScrollViewerNoMouseWheel>
<Grid>
<local:FlowDocumentScrollViewerNoMouseWheel Grid.Column="1" Margin="20,0,0,0" VerticalScrollBarVisibility="Auto" Visibility="{Binding Path=SupportsReboot, Converter={StaticResource InvisibilityConverter}}" >
<FlowDocument x:Name="Document" FontFamily="Segoe UI" FontSize="12" Loaded="Document_Loaded" TextAlignment="Left">
<FlowDocument.Resources>
<!-- This style is used to set the margins for all paragraphs in the FlowDocument to 0. -->
<Style TargetType="{x:Type Paragraph}">
<Setter Property="Margin" Value="0"/>
</Style>
<Style TargetType="{x:Type Section}">
<Setter Property="Margin" Value="0"/>
</Style>
</FlowDocument.Resources>
<local:Paragraph>
<Run Text="Nokia Lumia - Switch mode" FontSize="18" FontWeight="Bold" Foreground="#FF3753A6" />
<LineBreak />
<LineBreak />
<Run Text="Current mode: " />
<Run Text="Mass Storage" Foreground="#FF3753A6" FontWeight="Bold" />
<LineBreak />
<LineBreak />
<Run Text="Currently it is not possible to switch from Mass Storage mode to another mode. You can press and hold the power-button and volume-down to soft-reset the phone. You will then boot to Windows Phone OS." />
</local:Paragraph>
</FlowDocument>
</local:FlowDocumentScrollViewerNoMouseWheel>
<local:FlowDocumentScrollViewerNoMouseWheel Grid.Column="1" Margin="20,0,0,0" VerticalScrollBarVisibility="Auto" Visibility="{Binding Path=SupportsReboot, Converter={StaticResource VisibilityConverter}}" >
<FlowDocument x:Name="Document2" FontFamily="Segoe UI" FontSize="12" Loaded="Document_Loaded" TextAlignment="Left">
<FlowDocument.Resources>
<!-- This style is used to set the margins for all paragraphs in the FlowDocument to 0. -->
<Style TargetType="{x:Type Paragraph}">
<Setter Property="Margin" Value="0"/>
</Style>
<Style TargetType="{x:Type Section}">
<Setter Property="Margin" Value="0"/>
</Style>
</FlowDocument.Resources>
<local:Paragraph>
<Run Text="Nokia Lumia - Switch mode" FontSize="18" FontWeight="Bold" Foreground="#FF3753A6" />
<LineBreak />
<LineBreak />
<Run Text="Current mode: " />
<Run Text="Mass Storage" Foreground="#FF3753A6" FontWeight="Bold" />
<LineBreak />
<LineBreak />
<Hyperlink NavigateUri="Normal">Switch to Normal-mode</Hyperlink>
<LineBreak />
<Run Text="This will switch back to Windows Phone OS." />
<LineBreak />
<LineBreak />
<Hyperlink NavigateUri="Label">Switch to Label-mode</Hyperlink>
<LineBreak />
<Run Text="This interface is meant for querying and provisioning the phone. This is normally used for configuring the phone during manufacturing." />
<LineBreak />
<LineBreak />
<Hyperlink NavigateUri="Flash">Switch to Flash-mode</Hyperlink>
<LineBreak />
<Run Text="This is the interface that can be used to flash a new ROM image. It can also be used to retrieve additional info and security status." />
</local:Paragraph>
</FlowDocument>
</local:FlowDocumentScrollViewerNoMouseWheel>
</Grid>
</Border>
</UserControl>
+1 -1
View File
@@ -39,7 +39,7 @@ namespace WPinternals
Hyperlink link = args.Source as Hyperlink;
if (link != null)
{
(this.DataContext as NokiaModeNormalViewModel).RebootTo(link.NavigateUri.ToString());
(this.DataContext as NokiaModeMassStorageViewModel).RebootTo(link.NavigateUri.ToString());
}
}
+33 -7
View File
@@ -53,6 +53,7 @@ DEALINGS IN THE SOFTWARE.
<RowDefinition />
<RowDefinition />
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
<TextBlock Grid.Row="0" Grid.Column="0" Text="Brand / model" />
<TextBlock Grid.Row="0" Grid.Column="1" FontWeight="Bold" Foreground="#FF3753A6" TextWrapping="Wrap">
@@ -70,6 +71,8 @@ DEALINGS IN THE SOFTWARE.
<TextBlock Grid.Row="3" Grid.Column="1" Text="{Binding Path=Operator}" TextWrapping="Wrap" />
<TextBlock Grid.Row="4" Grid.Column="0" Text="Firmware version" />
<TextBlock Grid.Row="4" Grid.Column="1" Text="{Binding Path=Firmware}" TextWrapping="Wrap" />
<TextBlock Grid.Row="5" Grid.Column="0" Text="Hardware version" />
<TextBlock Grid.Row="5" Grid.Column="1" Text="{Binding Path=HWID}" TextWrapping="Wrap" />
</Grid>
</local:Paragraph>
</FlowDocument>
@@ -91,15 +94,24 @@ DEALINGS IN THE SOFTWARE.
<RowDefinition />
<RowDefinition />
<RowDefinition />
<RowDefinition />
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
<TextBlock Grid.Row="0" Grid.Column="0" Text="IMEI" />
<TextBlock Grid.Row="0" Grid.Column="1" Text="{Binding Path=IMEI}" TextWrapping="Wrap" />
<TextBlock Grid.Row="1" Grid.Column="0" Text="Public Phone ID" />
<TextBlock Grid.Row="1" Grid.Column="1" Text="{Binding Path=PublicID, Converter={StaticResource HexConverter}, Mode=OneWay}" TextWrapping="Wrap" />
<TextBlock Grid.Row="2" Grid.Column="0" Text="WLAN MAC" />
<TextBlock Grid.Row="2" Grid.Column="1" Text="{Binding Path=WlanMac, Converter={StaticResource MACConverter}, Mode=OneWay}" TextWrapping="Wrap"/>
<TextBlock Grid.Row="3" Grid.Column="0" Text="Bluetooth MAC" />
<TextBlock Grid.Row="3" Grid.Column="1" Text="{Binding Path=BluetoothMac, Converter={StaticResource MACConverter}, Mode=OneWay}" TextWrapping="Wrap" />
<TextBlock Grid.Row="2" Grid.Column="0" Text="WLAN MAC 1" />
<TextBlock Grid.Row="2" Grid.Column="1" Text="{Binding Path=WlanMac1, Converter={StaticResource MACConverter}, Mode=OneWay}" TextWrapping="Wrap"/>
<TextBlock Grid.Row="3" Grid.Column="0" Text="WLAN MAC 2" />
<TextBlock Grid.Row="3" Grid.Column="1" Text="{Binding Path=WlanMac2, Converter={StaticResource MACConverter}, Mode=OneWay}" TextWrapping="Wrap"/>
<TextBlock Grid.Row="4" Grid.Column="0" Text="WLAN MAC 3" />
<TextBlock Grid.Row="4" Grid.Column="1" Text="{Binding Path=WlanMac3, Converter={StaticResource MACConverter}, Mode=OneWay}" TextWrapping="Wrap"/>
<TextBlock Grid.Row="5" Grid.Column="0" Text="WLAN MAC 4" />
<TextBlock Grid.Row="5" Grid.Column="1" Text="{Binding Path=WlanMac4, Converter={StaticResource MACConverter}, Mode=OneWay}" TextWrapping="Wrap"/>
<TextBlock Grid.Row="6" Grid.Column="0" Text="Bluetooth MAC" />
<TextBlock Grid.Row="6" Grid.Column="1" Text="{Binding Path=BluetoothMac, Converter={StaticResource MACConverter}, Mode=OneWay}" TextWrapping="Wrap" />
</Grid>
</local:Paragraph>
</FlowDocument>
@@ -121,10 +133,24 @@ DEALINGS IN THE SOFTWARE.
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition />
<RowDefinition />
<RowDefinition />
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
<TextBlock Grid.Row="1" Grid.Column="0" Text="Sim lock" />
<TextBlock Grid.Row="1" Grid.Column="1" Text="Disabled" FontWeight="Bold" Foreground="#FF40C133" TextWrapping="Wrap" Visibility="{Binding Path=IsSimLocked, Converter={StaticResource InverseVisibilityConverter}}" />
<TextBlock Grid.Row="1" Grid.Column="1" Text="Enabled" FontWeight="Bold" Foreground="#FFAC3631" TextWrapping="Wrap" Visibility="{Binding Path=IsSimLocked, Converter={StaticResource VisibilityConverter}}"/>
<TextBlock Grid.Row="0" Grid.Column="0" Text="Boot policy" />
<TextBlock Grid.Row="0" Grid.Column="1" Text="{Binding Path=BootPolicy}" FontWeight="Bold" Foreground="#FF3753A6" TextWrapping="Wrap" />
<TextBlock Grid.Row="1" Grid.Column="0" Text="DB" />
<TextBlock Grid.Row="1" Grid.Column="1" Text="{Binding Path=Db}" FontWeight="Bold" Foreground="#FF3753A6" TextWrapping="Wrap" />
<TextBlock Grid.Row="2" Grid.Column="0" Text="DBX" />
<TextBlock Grid.Row="2" Grid.Column="1" Text="{Binding Path=Dbx}" FontWeight="Bold" Foreground="#FF3753A6" TextWrapping="Wrap" />
<TextBlock Grid.Row="3" Grid.Column="0" Text="KEK" />
<TextBlock Grid.Row="3" Grid.Column="1" Text="{Binding Path=Kek}" FontWeight="Bold" Foreground="#FF3753A6" TextWrapping="Wrap" />
<TextBlock Grid.Row="4" Grid.Column="0" Text="PK" />
<TextBlock Grid.Row="4" Grid.Column="1" Text="{Binding Path=Pk}" FontWeight="Bold" Foreground="#FF3753A6" TextWrapping="Wrap" />
<TextBlock Grid.Row="5" Grid.Column="0" Text="Sim lock" />
<TextBlock Grid.Row="5" Grid.Column="1" Text="Disabled" FontWeight="Bold" Foreground="#FF40C133" TextWrapping="Wrap" Visibility="{Binding Path=IsSimLocked, Converter={StaticResource InverseVisibilityConverter}}" />
<TextBlock Grid.Row="5" Grid.Column="1" Text="Enabled" FontWeight="Bold" Foreground="#FFAC3631" TextWrapping="Wrap" Visibility="{Binding Path=IsSimLocked, Converter={StaticResource VisibilityConverter}}"/>
</Grid>
<LineBreak />
<LineBreak />
+53
View File
@@ -0,0 +1,53 @@
<Project Sdk="Microsoft.NET.Sdk.WindowsDesktop">
<PropertyGroup>
<OutputType>WinExe</OutputType>
<TargetFramework>netcoreapp3.0</TargetFramework>
<UseWPF>true</UseWPF>
<UseWindowsForms>true</UseWindowsForms>
<AssemblyName>WPinternals</AssemblyName>
<RootNamespace>WPinternals</RootNamespace>
<ApplicationManifest>app.manifest</ApplicationManifest>
<ApplicationIcon>WPinternals.ico</ApplicationIcon>
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
<Deterministic>False</Deterministic>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
<StartupObject>WPinternals.App</StartupObject>
<AssemblyOriginatorKeyFile>Heathcliff74.snk</AssemblyOriginatorKeyFile>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'">
<AssemblyOriginatorKeyFile>Heathcliff74.snk</AssemblyOriginatorKeyFile>
</PropertyGroup>
<ItemGroup>
<Resource Include="Logo.png" />
<Resource Include="WPinternals.ico" />
<Resource Include="aerobusy.gif" />
<Resource Include="Logo-Small.png" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Windows.Compatibility" Version="3.0.0-preview7.19362.9" />
<PackageReference Include="NETStandard.Library" Version="2.0.3" />
<PackageReference Include="Newtonsoft.Json" Version="12.0.2" />
</ItemGroup>
<ItemGroup>
<Content Remove="PatchDefinitions.xml" />
<Content Remove="SB" />
<Content Remove="SBMSM" />
<Content Remove="SBA" />
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="PatchDefinitions.xml" />
<EmbeddedResource Include="SB" />
<EmbeddedResource Include="SBMSM" />
<EmbeddedResource Include="SBA" />
</ItemGroup>
</Project>
@@ -1,117 +1,205 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<ProjectView>ProjectFiles</ProjectView>
<PublishUrlHistory>publish\</PublishUrlHistory>
<InstallUrlHistory />
<SupportUrlHistory />
<UpdateUrlHistory />
<BootstrapperUrlHistory />
<ErrorReportUrlHistory />
<FallbackCulture>en-US</FallbackCulture>
<VerifyUploadedFiles>false</VerifyUploadedFiles>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug-Test|AnyCPU'">
<StartArguments>-test</StartArguments>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug-ReadGPT|AnyCPU'">
<StartArguments>-ReadGPT</StartArguments>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug-DumpFFU|AnyCPU'">
<StartArguments>-DumpFFU "C:\ProgramData\WPinternals\Repository\RM-1085\RM1085_1078.0038.10586.13080.12547.033139_retail_prod_signed.ffu" "C:\ProgramData\WPinternals\Repository\RM-1085" "mainos"</StartArguments>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug-TestProgrammer-930|AnyCPU'">
<StartArguments>-TestProgrammer "C:\ProgramData\WPInternals\Repository\RM-1045\MPRG8974_fh.ede"</StartArguments>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug-FindFlashingProfile|AnyCPU'">
<StartArguments>-FindFlashingProfile</StartArguments>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug-DisableSecureBoot|AnyCPU'">
<StartArguments>-EnableTestSigning</StartArguments>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug-FindFlashingProfileNoRestart|AnyCPU'">
<StartArguments>-FindFlashingProfileNoRestart</StartArguments>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug-DisableSecureBoot %28no restart%29|AnyCPU'">
<StartArguments>-EnableTestSigningNoRestart</StartArguments>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug-ClearNV|AnyCPU'">
<StartArguments>-ClearNV</StartArguments>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug-DumpUEFI|AnyCPU'">
<StartArguments>-DumpUEFI "C:\ProgramData\WPinternals\Repository\RM-1085\UEFI.bin" "C:\ProgramData\WPinternals\Repository\RM-1085\UEFI"</StartArguments>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug-MSM|AnyCPU'">
<StartArguments>-SwitchToMassStorageMode</StartArguments>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug-SwitchToMSM|AnyCPU'">
<StartArguments>-test</StartArguments>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug-UnlockBootloader|AnyCPU'">
<StartAction>Project</StartAction>
<StartArguments>-UnlockBootloader</StartArguments>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug-DLEmergency|AnyCPU'">
<StartArguments>-DownloadEmergencyByProductType RM-1085</StartArguments>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug-ShowPhoneInfo|AnyCPU'">
<StartArguments>-ShowPhoneInfo</StartArguments>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug-RelockPhone|AnyCPU'">
<StartArguments>-RelockPhone</StartArguments>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug-EnableRootAccess|AnyCPU'">
<StartArguments>-EnableRootAccess</StartArguments>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug-TestProgrammer-950|AnyCPU'">
<StartArguments>-TestProgrammer "C:\ProgramData\WPInternals\Repository\RM-1085\MPRG8994_fh.ede"</StartArguments>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug-FixBoot|AnyCPU'">
<StartArguments>-FixBootAfterUnlockingBootloader</StartArguments>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug-DLFFU|AnyCPU'">
<StartArguments>-downloadffubyproductcode 059R016</StartArguments>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug-FlashFFU-RM1085|AnyCPU'">
<StartArguments>-FlashFFU "C:\ProgramData\WPinternals\Repository\RM-1085\RM1085_1078.0038.10586.13080.12547.033139_retail_prod_signed.ffu"</StartArguments>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release-Test|AnyCPU'">
<StartArguments>-Test</StartArguments>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug-TestProgrammer-630|AnyCPU'">
<StartArguments>-TestProgrammer "C:\ProgramData\WPInternals\Repository\RM-976\MPRG8x26_fh.ede"</StartArguments>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug-DLall|AnyCPU'">
<StartArguments>-DownloadAll C:\Temp</StartArguments>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug-AddEmergency|AnyCPU'">
<StartArguments>-AddEmergency RM-1085 "C:\ProgramData\WPinternals\Repository\RM-1085\MPRG8994_fh.ede" "C:\ProgramData\WPinternals\Repository\RM-1085\RM1085_fh.edp"</StartArguments>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug-TestProgrammer-640|AnyCPU'">
<StartArguments>-TestProgrammer "C:\ProgramData\WPInternals\Repository\RM-1073\MPRG8x26_fh.ede"</StartArguments>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug-TestProgrammer-550|AnyCPU'">
<StartArguments>-TestProgrammer "C:\ProgramData\WPInternals\Repository\RM-1127\MPRG8909_fh.ede"</StartArguments>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug-TestProgrammer-650|AnyCPU'">
<StartArguments>-TestProgrammer "C:\ProgramData\WPInternals\Repository\RM-1152\MPRG8909_fh.ede"</StartArguments>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug-Help|AnyCPU'">
<StartArguments>-%3f</StartArguments>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug-ShowFFU|AnyCPU'">
<StartArguments>-ShowFFU "C:\ProgramData\WPInternals\Repository\RM-1152\RM1152_1078.0042.10586.13333.15672.0352EF_retail_prod_signed.ffu"</StartArguments>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug-BackupGPT|AnyCPU'">
<StartArguments>/BackupGPT "C:\Temp\Partitions.xml"</StartArguments>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug-MergeGptXmlXml|AnyCPU'">
<StartArguments>-MergeGPT "C:\Temp\Partitions.xml" "C:\Temp\MergePartitions.xml"</StartArguments>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug-MergeGptXmlZip|AnyCPU'">
<StartArguments>-MergeGPT "C:\Temp\OriginalGPT.xml" "C:\Temp\TestROM.zip"</StartArguments>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Preview-Test|AnyCPU'">
<StartArguments>/Test</StartArguments>
</PropertyGroup>
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<_LastSelectedProfileId>G:\Projects\Misc\WPinternals\WPinternals.Core\Properties\PublishProfiles\FolderProfile.pubxml</_LastSelectedProfileId>
</PropertyGroup>
<ItemGroup>
<Page Update="App.xaml">
<SubType>Designer</SubType>
</Page>
<Page Update="FilePickerControl.xaml">
<SubType>Designer</SubType>
</Page>
<Page Update="Views\About.xaml">
<SubType>Designer</SubType>
</Page>
<Page Update="Views\BackupView.xaml">
<SubType>Designer</SubType>
</Page>
<Page Update="Views\BootRestoreResourcesView.xaml">
<SubType>Designer</SubType>
</Page>
<Page Update="Views\BusyView.xaml">
<SubType>Designer</SubType>
</Page>
<Page Update="Views\ContextView.xaml">
<SubType>Designer</SubType>
</Page>
<Page Update="Views\DisclaimerAndNdaView.xaml">
<SubType>Designer</SubType>
</Page>
<Page Update="Views\DisclaimerView.xaml">
<SubType>Designer</SubType>
</Page>
<Page Update="Views\DumpRomView.xaml">
<SubType>Designer</SubType>
</Page>
<Page Update="Views\Empty.xaml">
<SubType>Designer</SubType>
</Page>
<Page Update="Views\FlashResourcesView.xaml">
<SubType>Designer</SubType>
</Page>
<Page Update="Views\FlashRomView.xaml">
<SubType>Designer</SubType>
</Page>
<Page Update="Views\GettingStartedView.xaml">
<SubType>Designer</SubType>
</Page>
<Page Update="Views\LumiaDownloadView.xaml">
<SubType>Designer</SubType>
</Page>
<Page Update="Views\LumiaUndoRootTargetSelectionView.xaml">
<SubType>Designer</SubType>
</Page>
<Page Update="Views\LumiaUnlockRootTargetSelectionView.xaml">
<SubType>Designer</SubType>
</Page>
<Page Update="Views\MainWindow.xaml">
<SubType>Designer</SubType>
</Page>
<Page Update="Views\MessageView.xaml">
<SubType>Designer</SubType>
</Page>
<Page Update="Views\NokiaFlashView.xaml">
<SubType>Designer</SubType>
</Page>
<Page Update="Views\NokiaLabelView.xaml">
<SubType>Designer</SubType>
</Page>
<Page Update="Views\NokiaMassStorageView.xaml">
<SubType>Designer</SubType>
</Page>
<Page Update="Views\NokiaModeFlashView.xaml">
<SubType>Designer</SubType>
</Page>
<Page Update="Views\NokiaModeLabelView.xaml">
<SubType>Designer</SubType>
</Page>
<Page Update="Views\NokiaModeMassStorageView.xaml">
<SubType>Designer</SubType>
</Page>
<Page Update="Views\NokiaModeNormalView.xaml">
<SubType>Designer</SubType>
</Page>
<Page Update="Views\NokiaNormalView.xaml">
<SubType>Designer</SubType>
</Page>
<Page Update="Views\NotImplementedView.xaml">
<SubType>Designer</SubType>
</Page>
<Page Update="Views\RegistrationView.xaml">
<SubType>Designer</SubType>
</Page>
<Page Update="Views\RestoreView.xaml">
<SubType>Designer</SubType>
</Page>
<Page Update="Views\StartupWindow.xaml">
<SubType>Designer</SubType>
</Page>
</ItemGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug-Test|AnyCPU'">
<StartArguments>-test</StartArguments>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug-ReadGPT|AnyCPU'">
<StartArguments>-ReadGPT</StartArguments>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug-DumpFFU|AnyCPU'">
<StartArguments>-DumpFFU "C:\ProgramData\WPinternals\Repository\RM-1085\RM1085_1078.0038.10586.13080.12547.033139_retail_prod_signed.ffu" "C:\ProgramData\WPinternals\Repository\RM-1085" "mainos"</StartArguments>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug-TestProgrammer-930|AnyCPU'">
<StartArguments>-TestProgrammer "C:\ProgramData\WPInternals\Repository\RM-1045\MPRG8974_fh.ede"</StartArguments>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug-FindFlashingProfile|AnyCPU'">
<StartArguments>-FindFlashingProfile</StartArguments>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug-DisableSecureBoot|AnyCPU'">
<StartArguments>-EnableTestSigning</StartArguments>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug-FindFlashingProfileNoRestart|AnyCPU'">
<StartArguments>-FindFlashingProfileNoRestart</StartArguments>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug-DisableSecureBoot %28no restart%29|AnyCPU'">
<StartArguments>-EnableTestSigningNoRestart</StartArguments>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug-ClearNV|AnyCPU'">
<StartArguments>-ClearNV</StartArguments>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug-DumpUEFI|AnyCPU'">
<StartArguments>-DumpUEFI "C:\ProgramData\WPinternals\Repository\RM-1085\UEFI.bin" "C:\ProgramData\WPinternals\Repository\RM-1085\UEFI"</StartArguments>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug-MSM|AnyCPU'">
<StartArguments>-SwitchToMassStorageMode</StartArguments>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug-SwitchToMSM|AnyCPU'">
<StartArguments>-test</StartArguments>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug-UnlockBootloader|AnyCPU'">
<StartAction>Project</StartAction>
<StartArguments>-UnlockBootloader</StartArguments>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug-DLEmergency|AnyCPU'">
<StartArguments>-DownloadEmergencyByProductType RM-1085</StartArguments>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug-ShowPhoneInfo|AnyCPU'">
<StartArguments>-ShowPhoneInfo</StartArguments>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug-RelockPhone|AnyCPU'">
<StartArguments>-RelockPhone</StartArguments>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug-EnableRootAccess|AnyCPU'">
<StartArguments>-EnableRootAccess</StartArguments>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug-TestProgrammer-950|AnyCPU'">
<StartArguments>-TestProgrammer "C:\ProgramData\WPInternals\Repository\RM-1085\MPRG8994_fh.ede"</StartArguments>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug-FixBoot|AnyCPU'">
<StartArguments>-FixBootAfterUnlockingBootloader</StartArguments>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug-DLFFU|AnyCPU'">
<StartArguments>-downloadffubyproductcode 059R016</StartArguments>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug-FlashFFU-RM1085|AnyCPU'">
<StartArguments>-FlashFFU "C:\ProgramData\WPinternals\Repository\RM-1085\RM1085_1078.0038.10586.13080.12547.033139_retail_prod_signed.ffu"</StartArguments>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release-Test|AnyCPU'">
<StartArguments>-Test</StartArguments>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug-TestProgrammer-630|AnyCPU'">
<StartArguments>-TestProgrammer "C:\ProgramData\WPInternals\Repository\RM-976\MPRG8x26_fh.ede"</StartArguments>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug-DLall|AnyCPU'">
<StartArguments>-DownloadAll C:\Temp</StartArguments>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug-AddEmergency|AnyCPU'">
<StartArguments>-AddEmergency RM-1085 "C:\ProgramData\WPinternals\Repository\RM-1085\MPRG8994_fh.ede" "C:\ProgramData\WPinternals\Repository\RM-1085\RM1085_fh.edp"</StartArguments>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug-TestProgrammer-640|AnyCPU'">
<StartArguments>-TestProgrammer "C:\ProgramData\WPInternals\Repository\RM-1073\MPRG8x26_fh.ede"</StartArguments>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug-TestProgrammer-550|AnyCPU'">
<StartArguments>-TestProgrammer "C:\ProgramData\WPInternals\Repository\RM-1127\MPRG8909_fh.ede"</StartArguments>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug-TestProgrammer-650|AnyCPU'">
<StartArguments>-TestProgrammer "C:\ProgramData\WPInternals\Repository\RM-1152\MPRG8909_fh.ede"</StartArguments>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug-Help|AnyCPU'">
<StartArguments>-%3f</StartArguments>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug-ShowFFU|AnyCPU'">
<StartArguments>-ShowFFU "C:\ProgramData\WPInternals\Repository\RM-1152\RM1152_1078.0042.10586.13333.15672.0352EF_retail_prod_signed.ffu"</StartArguments>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug-BackupGPT|AnyCPU'">
<StartArguments>/BackupGPT "C:\Temp\Partitions.xml"</StartArguments>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug-MergeGptXmlXml|AnyCPU'">
<StartArguments>-MergeGPT "C:\Temp\Partitions.xml" "C:\Temp\MergePartitions.xml"</StartArguments>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug-MergeGptXmlZip|AnyCPU'">
<StartArguments>-MergeGPT "C:\Temp\OriginalGPT.xml" "C:\Temp\TestROM.zip"</StartArguments>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Preview-Test|AnyCPU'">
<StartArguments>/Test</StartArguments>
</PropertyGroup>
</Project>
-1276
View File
File diff suppressed because it is too large Load Diff
+87 -87
View File
@@ -1,9 +1,9 @@
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 15
VisualStudioVersion = 15.0.26730.10
# Visual Studio Version 16
VisualStudioVersion = 16.0.29123.89
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WPinternals", "WPinternals.csproj", "{AED6DEB8-F54C-4B41-9655-793E7096AE6F}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WPinternals.Core", "WPinternals.Core.csproj", "{AED6DEB8-F54C-4B41-9655-793E7096AE6F}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -55,92 +55,92 @@ Global
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug|Any CPU.Build.0 = Debug|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-AddEmergency|Any CPU.ActiveCfg = Debug-AddEmergency|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-AddEmergency|Any CPU.Build.0 = Debug-AddEmergency|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-BackupGPT|Any CPU.ActiveCfg = Debug-BackupGPT|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-BackupGPT|Any CPU.Build.0 = Debug-BackupGPT|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-ClearNV|Any CPU.ActiveCfg = Debug-ClearNV|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-ClearNV|Any CPU.Build.0 = Debug-ClearNV|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-CustomFlash-930|Any CPU.ActiveCfg = Debug-CustomFlash-930|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-CustomFlash-930|Any CPU.Build.0 = Debug-CustomFlash-930|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-CustomFlash-950 (no restart)|Any CPU.ActiveCfg = Debug-CustomFlash-950 (no restart)|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-CustomFlash-950 (no restart)|Any CPU.Build.0 = Debug-CustomFlash-950 (no restart)|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-CustomFlash-950|Any CPU.ActiveCfg = Debug-CustomFlash-950|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-CustomFlash-950|Any CPU.Build.0 = Debug-CustomFlash-950|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-DLall|Any CPU.ActiveCfg = Debug-DLall|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-DLall|Any CPU.Build.0 = Debug-DLall|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-DLEmergency|Any CPU.ActiveCfg = Debug-DLEmergency|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-DLEmergency|Any CPU.Build.0 = Debug-DLEmergency|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-DLFFU|Any CPU.ActiveCfg = Debug-DLFFU|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-DLFFU|Any CPU.Build.0 = Debug-DLFFU|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-DumpFFU|Any CPU.ActiveCfg = Debug-DumpFFU|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-DumpFFU|Any CPU.Build.0 = Debug-DumpFFU|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-DumpUEFI|Any CPU.ActiveCfg = Debug-DumpUEFI|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-DumpUEFI|Any CPU.Build.0 = Debug-DumpUEFI|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-EnableRootAccess|Any CPU.ActiveCfg = Debug-EnableRootAccess|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-EnableRootAccess|Any CPU.Build.0 = Debug-EnableRootAccess|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-EnableRootAccessOnImage|Any CPU.ActiveCfg = Debug-EnableRootAccessOnImage|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-EnableRootAccessOnImage|Any CPU.Build.0 = Debug-EnableRootAccessOnImage|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-EnableTestSigning (no restart)|Any CPU.ActiveCfg = Debug-EnableTestSigning (no restart)|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-EnableTestSigning (no restart)|Any CPU.Build.0 = Debug-EnableTestSigning (no restart)|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-EnableTestSigning|Any CPU.ActiveCfg = Debug-EnableTestSigning|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-EnableTestSigning|Any CPU.Build.0 = Debug-EnableTestSigning|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-FindFlashingProfile|Any CPU.ActiveCfg = Debug-FindFlashingProfile|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-FindFlashingProfile|Any CPU.Build.0 = Debug-FindFlashingProfile|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-FindFlashingProfileNoRestart|Any CPU.ActiveCfg = Debug-FindFlashingProfileNoRestart|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-FindFlashingProfileNoRestart|Any CPU.Build.0 = Debug-FindFlashingProfileNoRestart|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-FixBoot|Any CPU.ActiveCfg = Debug-FixBoot|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-FixBoot|Any CPU.Build.0 = Debug-FixBoot|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-FlashCustomRom-640|Any CPU.ActiveCfg = Debug-FlashCustomRom-640|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-FlashCustomRom-640|Any CPU.Build.0 = Debug-FlashCustomRom-640|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-FlashFFU-RM1073|Any CPU.ActiveCfg = Debug-FlashFFU-RM1073|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-FlashFFU-RM1073|Any CPU.Build.0 = Debug-FlashFFU-RM1073|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-FlashFFU-RM1085|Any CPU.ActiveCfg = Debug-FlashFFU-RM1085|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-FlashFFU-RM1085|Any CPU.Build.0 = Debug-FlashFFU-RM1085|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-FlashRaw|Any CPU.ActiveCfg = Debug-FlashRaw|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-FlashRaw|Any CPU.Build.0 = Debug-FlashRaw|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-Help|Any CPU.ActiveCfg = Debug-Help|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-Help|Any CPU.Build.0 = Debug-Help|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-MergeGptXmlXml|Any CPU.ActiveCfg = Debug-MergeGptXmlXml|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-MergeGptXmlXml|Any CPU.Build.0 = Debug-MergeGptXmlXml|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-MergeGptXmlZip|Any CPU.ActiveCfg = Debug-MergeGptXmlZip|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-MergeGptXmlZip|Any CPU.Build.0 = Debug-MergeGptXmlZip|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-MSM|Any CPU.ActiveCfg = Debug-MSM|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-MSM|Any CPU.Build.0 = Debug-MSM|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-ReadGPT|Any CPU.ActiveCfg = Debug-ReadGPT|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-ReadGPT|Any CPU.Build.0 = Debug-ReadGPT|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-RelockPhone|Any CPU.ActiveCfg = Debug-RelockPhone|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-RelockPhone|Any CPU.Build.0 = Debug-RelockPhone|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-RestoreGPT|Any CPU.ActiveCfg = Debug-RestoreGPT|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-RestoreGPT|Any CPU.Build.0 = Debug-RestoreGPT|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-ShowFFU|Any CPU.ActiveCfg = Debug-ShowFFU|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-ShowFFU|Any CPU.Build.0 = Debug-ShowFFU|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-ShowPhoneInfo|Any CPU.ActiveCfg = Debug-ShowPhoneInfo|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-ShowPhoneInfo|Any CPU.Build.0 = Debug-ShowPhoneInfo|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-Test|Any CPU.ActiveCfg = Debug-Test|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-Test|Any CPU.Build.0 = Debug-Test|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-TestProgrammer-550|Any CPU.ActiveCfg = Debug-TestProgrammer-550|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-TestProgrammer-550|Any CPU.Build.0 = Debug-TestProgrammer-550|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-TestProgrammer-630|Any CPU.ActiveCfg = Debug-TestProgrammer-630|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-TestProgrammer-630|Any CPU.Build.0 = Debug-TestProgrammer-630|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-TestProgrammer-640|Any CPU.ActiveCfg = Debug-TestProgrammer-640|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-TestProgrammer-640|Any CPU.Build.0 = Debug-TestProgrammer-640|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-TestProgrammer-650|Any CPU.ActiveCfg = Debug-TestProgrammer-650|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-TestProgrammer-650|Any CPU.Build.0 = Debug-TestProgrammer-650|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-TestProgrammer-930|Any CPU.ActiveCfg = Debug-TestProgrammer-930|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-TestProgrammer-930|Any CPU.Build.0 = Debug-TestProgrammer-930|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-TestProgrammer-950|Any CPU.ActiveCfg = Debug-TestProgrammer-950|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-TestProgrammer-950|Any CPU.Build.0 = Debug-TestProgrammer-950|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-UnlockBootloader|Any CPU.ActiveCfg = Debug-UnlockBootloader|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-UnlockBootloader|Any CPU.Build.0 = Debug-UnlockBootloader|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Preview|Any CPU.ActiveCfg = Preview|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Preview|Any CPU.Build.0 = Preview|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Preview-Test|Any CPU.ActiveCfg = Preview-Test|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Preview-Test|Any CPU.Build.0 = Preview-Test|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-AddEmergency|Any CPU.ActiveCfg = Debug|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-AddEmergency|Any CPU.Build.0 = Debug|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-BackupGPT|Any CPU.ActiveCfg = Debug|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-BackupGPT|Any CPU.Build.0 = Debug|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-ClearNV|Any CPU.ActiveCfg = Debug|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-ClearNV|Any CPU.Build.0 = Debug|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-CustomFlash-930|Any CPU.ActiveCfg = Debug|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-CustomFlash-930|Any CPU.Build.0 = Debug|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-CustomFlash-950 (no restart)|Any CPU.ActiveCfg = Debug|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-CustomFlash-950 (no restart)|Any CPU.Build.0 = Debug|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-CustomFlash-950|Any CPU.ActiveCfg = Debug|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-CustomFlash-950|Any CPU.Build.0 = Debug|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-DLall|Any CPU.ActiveCfg = Debug|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-DLall|Any CPU.Build.0 = Debug|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-DLEmergency|Any CPU.ActiveCfg = Debug|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-DLEmergency|Any CPU.Build.0 = Debug|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-DLFFU|Any CPU.ActiveCfg = Debug|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-DLFFU|Any CPU.Build.0 = Debug|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-DumpFFU|Any CPU.ActiveCfg = Debug|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-DumpFFU|Any CPU.Build.0 = Debug|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-DumpUEFI|Any CPU.ActiveCfg = Debug|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-DumpUEFI|Any CPU.Build.0 = Debug|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-EnableRootAccess|Any CPU.ActiveCfg = Debug|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-EnableRootAccess|Any CPU.Build.0 = Debug|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-EnableRootAccessOnImage|Any CPU.ActiveCfg = Debug|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-EnableRootAccessOnImage|Any CPU.Build.0 = Debug|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-EnableTestSigning (no restart)|Any CPU.ActiveCfg = Debug|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-EnableTestSigning (no restart)|Any CPU.Build.0 = Debug|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-EnableTestSigning|Any CPU.ActiveCfg = Debug|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-EnableTestSigning|Any CPU.Build.0 = Debug|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-FindFlashingProfile|Any CPU.ActiveCfg = Debug|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-FindFlashingProfile|Any CPU.Build.0 = Debug|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-FindFlashingProfileNoRestart|Any CPU.ActiveCfg = Debug|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-FindFlashingProfileNoRestart|Any CPU.Build.0 = Debug|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-FixBoot|Any CPU.ActiveCfg = Debug|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-FixBoot|Any CPU.Build.0 = Debug|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-FlashCustomRom-640|Any CPU.ActiveCfg = Debug|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-FlashCustomRom-640|Any CPU.Build.0 = Debug|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-FlashFFU-RM1073|Any CPU.ActiveCfg = Debug|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-FlashFFU-RM1073|Any CPU.Build.0 = Debug|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-FlashFFU-RM1085|Any CPU.ActiveCfg = Debug|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-FlashFFU-RM1085|Any CPU.Build.0 = Debug|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-FlashRaw|Any CPU.ActiveCfg = Debug|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-FlashRaw|Any CPU.Build.0 = Debug|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-Help|Any CPU.ActiveCfg = Debug|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-Help|Any CPU.Build.0 = Debug|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-MergeGptXmlXml|Any CPU.ActiveCfg = Debug|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-MergeGptXmlXml|Any CPU.Build.0 = Debug|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-MergeGptXmlZip|Any CPU.ActiveCfg = Debug|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-MergeGptXmlZip|Any CPU.Build.0 = Debug|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-MSM|Any CPU.ActiveCfg = Debug|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-MSM|Any CPU.Build.0 = Debug|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-ReadGPT|Any CPU.ActiveCfg = Debug|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-ReadGPT|Any CPU.Build.0 = Debug|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-RelockPhone|Any CPU.ActiveCfg = Debug|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-RelockPhone|Any CPU.Build.0 = Debug|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-RestoreGPT|Any CPU.ActiveCfg = Debug|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-RestoreGPT|Any CPU.Build.0 = Debug|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-ShowFFU|Any CPU.ActiveCfg = Debug|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-ShowFFU|Any CPU.Build.0 = Debug|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-ShowPhoneInfo|Any CPU.ActiveCfg = Debug|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-ShowPhoneInfo|Any CPU.Build.0 = Debug|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-Test|Any CPU.ActiveCfg = Debug|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-Test|Any CPU.Build.0 = Debug|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-TestProgrammer-550|Any CPU.ActiveCfg = Debug|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-TestProgrammer-550|Any CPU.Build.0 = Debug|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-TestProgrammer-630|Any CPU.ActiveCfg = Debug|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-TestProgrammer-630|Any CPU.Build.0 = Debug|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-TestProgrammer-640|Any CPU.ActiveCfg = Debug|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-TestProgrammer-640|Any CPU.Build.0 = Debug|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-TestProgrammer-650|Any CPU.ActiveCfg = Debug|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-TestProgrammer-650|Any CPU.Build.0 = Debug|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-TestProgrammer-930|Any CPU.ActiveCfg = Debug|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-TestProgrammer-930|Any CPU.Build.0 = Debug|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-TestProgrammer-950|Any CPU.ActiveCfg = Debug|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-TestProgrammer-950|Any CPU.Build.0 = Debug|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-UnlockBootloader|Any CPU.ActiveCfg = Debug|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Debug-UnlockBootloader|Any CPU.Build.0 = Debug|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Preview|Any CPU.ActiveCfg = Release|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Preview|Any CPU.Build.0 = Release|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Preview-Test|Any CPU.ActiveCfg = Release|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Preview-Test|Any CPU.Build.0 = Release|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Release|Any CPU.ActiveCfg = Release|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Release|Any CPU.Build.0 = Release|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Release-Test|Any CPU.ActiveCfg = Release-Test|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Release-Test|Any CPU.Build.0 = Release-Test|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Release-Test|Any CPU.ActiveCfg = Release|Any CPU
{AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Release-Test|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
+8
View File
@@ -384,6 +384,14 @@ namespace MadWizard.WinUSBNet.API
}
public void ResetPipe(int ifaceIndex, byte pipeID)
{
bool success = WinUsb_ResetPipe(InterfaceHandle(ifaceIndex), pipeID);
if (!success)
throw APIException.Win32("Failed to reset pipe on WinUSB device.");
}
public void WritePipe(int ifaceIndex, byte pipeID, byte[] buffer, int offset, int length)
{
uint bytesWritten;
+3
View File
@@ -170,6 +170,9 @@ namespace MadWizard.WinUSBNet.API
[DllImport("kernel32.dll", SetLastError = true)]
private static unsafe extern bool CancelIoEx(IntPtr hFile, NativeOverlapped* pOverlapped);
[DllImport("winusb.dll", SetLastError = true)]
private static unsafe extern bool WinUsb_ResetPipe(IntPtr InterfaceHandle, byte PipeID);
+16
View File
@@ -380,6 +380,22 @@ namespace MadWizard.WinUSBNet
}
}
/// <summary>
/// Resets all pending transfers for this pipe.
/// </summary>
public void Reset()
{
try
{
_device.InternalDevice.ResetPipe(Interface.InterfaceIndex, _pipeInfo.PipeId);
}
catch (API.APIException e)
{
// throw new USBException("Failed to reset pipe.", e);
LogAndThrowException(new USBException("Failed to reset pipe.", e));
}
}
/// <summary>
/// Flushes the pipe, discarding any data that is cached. Only available on IN direction pipes.
/// </summary>
-12
View File
@@ -1,12 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" /></startup>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Microsoft.Practices.ServiceLocation" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-1.3.0.0" newVersion="1.3.0.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
-4
View File
@@ -1,4 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="Newtonsoft.Json" version="9.0.1" targetFramework="net45" />
</packages>
Binary file not shown.
@@ -1,50 +0,0 @@
<?xml version="1.0"?>
<package xmlns="http://schemas.microsoft.com/packaging/2012/06/nuspec.xsd">
<metadata>
<id>Newtonsoft.Json</id>
<version>9.0.1</version>
<title>Json.NET</title>
<authors>James Newton-King</authors>
<owners>James Newton-King</owners>
<licenseUrl>https://raw.github.com/JamesNK/Newtonsoft.Json/master/LICENSE.md</licenseUrl>
<projectUrl>http://www.newtonsoft.com/json</projectUrl>
<iconUrl>http://www.newtonsoft.com/content/images/nugeticon.png</iconUrl>
<requireLicenseAcceptance>false</requireLicenseAcceptance>
<description>Json.NET is a popular high-performance JSON framework for .NET</description>
<summary />
<language>en-US</language>
<tags>json</tags>
<dependencies>
<group targetFramework=".NETFramework4.5" />
<group targetFramework=".NETFramework4.0" />
<group targetFramework=".NETFramework3.5" />
<group targetFramework=".NETFramework2.0" />
<group targetFramework=".NETPortable4.5-net45+win8+wp8+wpa81" />
<group targetFramework=".NETPortable4.0-net40+sl5+win8+wp8+wpa81" />
<group targetFramework="Unsupported0.0">
<dependency id="Microsoft.CSharp" version="4.0.1" />
<dependency id="System.Collections" version="4.0.11" />
<dependency id="System.Diagnostics.Debug" version="4.0.11" />
<dependency id="System.Dynamic.Runtime" version="4.0.11" />
<dependency id="System.Globalization" version="4.0.11" />
<dependency id="System.IO" version="4.1.0" />
<dependency id="System.Linq" version="4.1.0" />
<dependency id="System.Linq.Expressions" version="4.1.0" />
<dependency id="System.ObjectModel" version="4.0.12" />
<dependency id="System.Reflection" version="4.1.0" />
<dependency id="System.Reflection.Extensions" version="4.0.1" />
<dependency id="System.Resources.ResourceManager" version="4.0.1" />
<dependency id="System.Runtime" version="4.1.0" />
<dependency id="System.Runtime.Extensions" version="4.1.0" />
<dependency id="System.Runtime.Serialization.Primitives" version="4.1.1" />
<dependency id="System.Text.Encoding" version="4.0.11" />
<dependency id="System.Text.Encoding.Extensions" version="4.0.11" />
<dependency id="System.Text.RegularExpressions" version="4.1.0" />
<dependency id="System.Threading" version="4.0.11" />
<dependency id="System.Threading.Tasks" version="4.0.11" />
<dependency id="System.Xml.ReaderWriter" version="4.0.11" />
<dependency id="System.Xml.XDocument" version="4.0.11" />
</group>
</dependencies>
</metadata>
</package>
Binary file not shown.
File diff suppressed because it is too large Load Diff
Binary file not shown.
File diff suppressed because it is too large Load Diff
Binary file not shown.
File diff suppressed because it is too large Load Diff
Binary file not shown.
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
-116
View File
@@ -1,116 +0,0 @@
param($installPath, $toolsPath, $package, $project)
# open json.net splash page on package install
# don't open if json.net is installed as a dependency
try
{
$url = "http://www.newtonsoft.com/json/install?version=" + $package.Version
$dte2 = Get-Interface $dte ([EnvDTE80.DTE2])
if ($dte2.ActiveWindow.Caption -eq "Package Manager Console")
{
# user is installing from VS NuGet console
# get reference to the window, the console host and the input history
# show webpage if "install-package newtonsoft.json" was last input
$consoleWindow = $(Get-VSComponentModel).GetService([NuGetConsole.IPowerConsoleWindow])
$props = $consoleWindow.GetType().GetProperties([System.Reflection.BindingFlags]::Instance -bor `
[System.Reflection.BindingFlags]::NonPublic)
$prop = $props | ? { $_.Name -eq "ActiveHostInfo" } | select -first 1
if ($prop -eq $null) { return }
$hostInfo = $prop.GetValue($consoleWindow)
if ($hostInfo -eq $null) { return }
$history = $hostInfo.WpfConsole.InputHistory.History
$lastCommand = $history | select -last 1
if ($lastCommand)
{
$lastCommand = $lastCommand.Trim().ToLower()
if ($lastCommand.StartsWith("install-package") -and $lastCommand.Contains("newtonsoft.json"))
{
$dte2.ItemOperations.Navigate($url) | Out-Null
}
}
}
else
{
# user is installing from VS NuGet dialog
# get reference to the window, then smart output console provider
# show webpage if messages in buffered console contains "installing...newtonsoft.json" in last operation
$instanceField = [NuGet.Dialog.PackageManagerWindow].GetField("CurrentInstance", [System.Reflection.BindingFlags]::Static -bor `
[System.Reflection.BindingFlags]::NonPublic)
$consoleField = [NuGet.Dialog.PackageManagerWindow].GetField("_smartOutputConsoleProvider", [System.Reflection.BindingFlags]::Instance -bor `
[System.Reflection.BindingFlags]::NonPublic)
if ($instanceField -eq $null -or $consoleField -eq $null) { return }
$instance = $instanceField.GetValue($null)
if ($instance -eq $null) { return }
$consoleProvider = $consoleField.GetValue($instance)
if ($consoleProvider -eq $null) { return }
$console = $consoleProvider.CreateOutputConsole($false)
$messagesField = $console.GetType().GetField("_messages", [System.Reflection.BindingFlags]::Instance -bor `
[System.Reflection.BindingFlags]::NonPublic)
if ($messagesField -eq $null) { return }
$messages = $messagesField.GetValue($console)
if ($messages -eq $null) { return }
$operations = $messages -split "=============================="
$lastOperation = $operations | select -last 1
if ($lastOperation)
{
$lastOperation = $lastOperation.ToLower()
$lines = $lastOperation -split "`r`n"
$installMatch = $lines | ? { $_.StartsWith("------- installing...newtonsoft.json ") } | select -first 1
if ($installMatch)
{
$dte2.ItemOperations.Navigate($url) | Out-Null
}
}
}
}
catch
{
try
{
$pmPane = $dte2.ToolWindows.OutputWindow.OutputWindowPanes.Item("Package Manager")
$selection = $pmPane.TextDocument.Selection
$selection.StartOfDocument($false)
$selection.EndOfDocument($true)
if ($selection.Text.StartsWith("Attempting to gather dependencies information for package 'Newtonsoft.Json." + $package.Version + "'"))
{
# don't show on upgrade
if (!$selection.Text.Contains("Removed package"))
{
$dte2.ItemOperations.Navigate($url) | Out-Null
}
}
}
catch
{
# stop potential errors from bubbling up
# worst case the splash page won't open
}
}
# still yolo
-4
View File
@@ -1,4 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<repositories>
<repository path="..\packages.config" />
</repositories>