mirror of
https://github.com/ReneLergner/WPinternals.git
synced 2026-06-14 03:16:40 +10:00
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:
+334
@@ -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
@@ -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
@@ -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
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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; }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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>
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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()
|
||||
{
|
||||
|
||||
@@ -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
@@ -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
@@ -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)
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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) ||
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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
@@ -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
@@ -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>
|
||||
|
||||
@@ -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">
|
||||
|
||||
@@ -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 />
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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 />
|
||||
|
||||
@@ -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
File diff suppressed because it is too large
Load Diff
+87
-87
@@ -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
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -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
@@ -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>
|
||||
@@ -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
Binary file not shown.
File diff suppressed because it is too large
Load Diff
BIN
Binary file not shown.
-8409
File diff suppressed because it is too large
Load Diff
BIN
Binary file not shown.
-8756
File diff suppressed because it is too large
Load Diff
-116
@@ -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
|
||||
@@ -1,4 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<repositories>
|
||||
<repository path="..\packages.config" />
|
||||
</repositories>
|
||||
Reference in New Issue
Block a user