From 8630a89553231ff8b566a9f9d8e8da96d3bfe975 Mon Sep 17 00:00:00 2001 From: Gus Date: Mon, 8 Feb 2021 17:08:46 +0100 Subject: [PATCH 1/4] WinUSB: Merge upstream changes --- WinUSBNet/API/WinUSBDevice.cs | 44 +++++++-- WinUSBNet/DeviceNotifyHook.cs | 57 ++++++++---- WinUSBNet/USB.cs | 8 +- WinUSBNet/USBDevice.cs | 150 +++++++++++++++++-------------- WinUSBNet/USBDeviceDescriptor.cs | 8 +- WinUSBNet/USBInterface.cs | 6 +- WinUSBNet/USBNotifier.cs | 22 ++--- WinUSBNet/USBPipe.cs | 47 +++++----- 8 files changed, 203 insertions(+), 139 deletions(-) diff --git a/WinUSBNet/API/WinUSBDevice.cs b/WinUSBNet/API/WinUSBDevice.cs index 899dc8c..7f0df6c 100644 --- a/WinUSBNet/API/WinUSBDevice.cs +++ b/WinUSBNet/API/WinUSBDevice.cs @@ -1,6 +1,6 @@ /* WinUSBNet library * (C) 2010 Thomas Bleeker (www.madwizard.org) - * + * * Licensed under the MIT license, see license.txt or: * http://www.opensource.org/licenses/mit-license.php */ @@ -97,23 +97,48 @@ namespace MadWizard.WinUSBNet.API return deviceDesc; } - public string GetStringDescriptor(byte index) + private int ReadStringDescriptor(byte index, ushort languageID, byte[] buffer) { - byte[] buffer = new byte[256]; uint transfered; bool success = WinUsb_GetDescriptor(_winUsbHandle, USB_STRING_DESCRIPTOR_TYPE, - index, 0, buffer, (uint)buffer.Length, out transfered); + index, languageID, buffer, (uint)buffer.Length, out transfered); if (!success) - throw APIException.Win32("Failed to get USB string descriptor (" + index + "): 0x" + Marshal.GetLastWin32Error().ToString("X8")); + throw APIException.Win32("Failed to get USB string descriptor (" + index + ")."); - int length = buffer[0] - 2; - if (length <= 0) + if (transfered == 0) + throw new APIException("No data returned when reading USB descriptor."); + + int length = buffer[0]; + if (length != transfered) + throw new APIException("Unexpected length when reading USB descriptor."); + return length; + } + + public ushort[] GetSupportedLanguageIDs() + { + byte[] buffer = new byte[256]; + int length = ReadStringDescriptor(0, 0, buffer); + length -= 2; // Skip length byte and descriptor type + if (length < 0 || (length % 2) != 0) + throw new APIException("Unexpected length when reading supported languages."); + + ushort[] langIDs = new ushort[length / 2]; + Buffer.BlockCopy(buffer, 2, langIDs, 0, length); + return langIDs; + } + + public string GetStringDescriptor(byte index, ushort languageID) + { + byte[] buffer = new byte[256]; + int length = ReadStringDescriptor(index, languageID, buffer); + length -= 2; // Skip length byte and descriptor type + if (length < 0) return null; char[] chars = System.Text.Encoding.Unicode.GetChars(buffer, 2, length); return new string(chars); } - public void ControlTransfer(byte requestType, byte request, ushort value, ushort index, ushort length, byte[] data) + public int ControlTransfer(byte requestType, byte request, ushort value, ushort index, ushort length, byte[] data) { uint bytesReturned = 0; WINUSB_SETUP_PACKET setupPacket; @@ -127,6 +152,7 @@ namespace MadWizard.WinUSBNet.API bool success = WinUsb_ControlTransfer(_winUsbHandle, setupPacket, data, length, ref bytesReturned, IntPtr.Zero); if (!success) // todo check bytes returned? throw APIException.Win32("Control transfer on WinUSB device failed."); + return (int)bytesReturned; } @@ -227,7 +253,7 @@ namespace MadWizard.WinUSBNet.API finally { // Save interface handles (will be cleaned by Dispose) - // also in case of exception (which is why it is in finally block), + // also in case of exception (which is why it is in finally block), // because some handles might have already been opened and need // to be disposed. _addInterfaces = interfaces.ToArray(); diff --git a/WinUSBNet/DeviceNotifyHook.cs b/WinUSBNet/DeviceNotifyHook.cs index a73dc81..551c5f0 100644 --- a/WinUSBNet/DeviceNotifyHook.cs +++ b/WinUSBNet/DeviceNotifyHook.cs @@ -1,6 +1,6 @@ -/* WinUSBNet library +/* WinUSBNet library * (C) 2010 Thomas Bleeker (www.madwizard.org) - * + * * Licensed under the MIT license, see license.txt or: * http://www.opensource.org/licenses/mit-license.php */ @@ -47,20 +47,13 @@ namespace MadWizard.WinUSBNet /* // Listen for the control's window creation and then hook into it. - internal void OnHandleCreated(object sender, EventArgs e) + private void OnHandleCreated(object sender, EventArgs e) { try { // Window is now created, assign handle to NativeWindow. IntPtr handle = ((Control)sender).Handle; - AssignHandle(handle); - - if (_notifyHandle != IntPtr.Zero) - { - API.DeviceManagement.StopDeviceDeviceNotifications(_notifyHandle); - _notifyHandle = IntPtr.Zero; - } - API.DeviceManagement.RegisterForDeviceNotifications(handle, _guid, ref _notifyHandle); + RegisterNotify(handle); } catch (API.APIException ex) { @@ -68,17 +61,12 @@ namespace MadWizard.WinUSBNet } } - internal void OnHandleDestroyed(object sender, EventArgs e) + private void OnHandleDestroyed(object sender, EventArgs e) { try { // Window was destroyed, release hook. - ReleaseHandle(); - if (_notifyHandle != null) - { - API.DeviceManagement.StopDeviceDeviceNotifications(_notifyHandle); - _notifyHandle = IntPtr.Zero; - } + StopNotify(); } catch (API.APIException ex) { @@ -86,6 +74,28 @@ namespace MadWizard.WinUSBNet } } + private void RegisterNotify(IntPtr handle) + { + AssignHandle(handle); + + if (_notifyHandle != IntPtr.Zero) + { + API.DeviceManagement.StopDeviceDeviceNotifications(_notifyHandle); + _notifyHandle = IntPtr.Zero; + } + API.DeviceManagement.RegisterForDeviceNotifications(handle, _guid, ref _notifyHandle); + } + + private void StopNotify() + { + //ReleaseHandle(); + if (_notifyHandle != IntPtr.Zero) + { + API.DeviceManagement.StopDeviceDeviceNotifications(_notifyHandle); + _notifyHandle = IntPtr.Zero; + } + } + protected override void WndProc(ref Message m) { // Listen for operating system messages @@ -95,6 +105,17 @@ namespace MadWizard.WinUSBNet case API.DeviceManagement.WM_DEVICECHANGE: _notifier.HandleDeviceChange(m); break; + case WM_NCDESTROY: + // Note: when a control is used, OnHandleDestroyed will be called and the + // handle is already released from NativeWindow. In that case, this + // WM_NCDESTROY message will not be caught here. This is no problem since + // StopNotify is already called. Even if it does, calling it twice does not cause + // problems. + // When a window handle is used instead of a Control the OnHandle events will not + // fire and this handler is necessary to release the handle and stop notifications + // when the window is destroyed. + StopNotify(); + break; } base.WndProc(ref m); } diff --git a/WinUSBNet/USB.cs b/WinUSBNet/USB.cs index 20e9669..9bd1785 100644 --- a/WinUSBNet/USB.cs +++ b/WinUSBNet/USB.cs @@ -1,6 +1,6 @@ -/* WinUSBNet library +/* WinUSBNet library * (C) 2010 Thomas Bleeker (www.madwizard.org) - * + * * Licensed under the MIT license, see license.txt or: * http://www.opensource.org/licenses/mit-license.php */ @@ -55,10 +55,10 @@ namespace MadWizard.WinUSBNet /// Video base class (0x0E) Video = 0x0E, - /// Personal healthcare base class (0x0F) + /// Personal health care base class (0x0F) PersonalHealthcare = 0x0F, - /// Diagnosticdevice base class (0xDC) + /// Diagnostic device base class (0xDC) DiagnosticDevice = 0xDC, /// Wireless controller base class (0xE0) diff --git a/WinUSBNet/USBDevice.cs b/WinUSBNet/USBDevice.cs index d4bca20..b075a64 100644 --- a/WinUSBNet/USBDevice.cs +++ b/WinUSBNet/USBDevice.cs @@ -1,6 +1,6 @@ -/* WinUSBNet library +/* WinUSBNet library * (C) 2010 Thomas Bleeker (www.madwizard.org) - * + * * Licensed under the MIT license, see license.txt or: * http://www.opensource.org/licenses/mit-license.php */ @@ -96,7 +96,7 @@ namespace MadWizard.WinUSBNet /// /// Disposes the object /// - /// Indicates wether Dispose was called manually (true) or by + /// Indicates whether Dispose was called manually (true) or by /// the garbage collector (false) via the destructor. protected virtual void Dispose(bool disposing) { @@ -166,7 +166,7 @@ namespace MadWizard.WinUSBNet API.WINUSB_PIPE_INFORMATION[] pipesInfo; _wuDevice.GetInterfaceInfo(i, out descriptor, out pipesInfo); USBPipe[] interfacePipes = new USBPipe[pipesInfo.Length]; - for (int k = 0; k < pipesInfo.Length; k++) + for(int k=0;k ushort.MaxValue) - throw new ArgumentOutOfRangeException("Value parameter out of range."); + throw new ArgumentOutOfRangeException(nameof(value), "Value parameter out of range."); if (index < ushort.MinValue || index > ushort.MaxValue) - throw new ArgumentOutOfRangeException("Index parameter out of range."); + throw new ArgumentOutOfRangeException(nameof(index), "Index parameter out of range."); if (length > buffer.Length) - throw new ArgumentOutOfRangeException("Length parameter is larger than the size of the buffer."); + throw new ArgumentOutOfRangeException(nameof(length), "Length parameter is larger than the size of the buffer."); if (length > ushort.MaxValue) - throw new ArgumentOutOfRangeException("Length too large"); + throw new ArgumentOutOfRangeException(nameof(length), "Length too large"); } /// @@ -213,7 +213,7 @@ namespace MadWizard.WinUSBNet set { if (value < 0) - throw new ArgumentOutOfRangeException("Control pipe timeout cannot be negative."); + throw new ArgumentOutOfRangeException(nameof(value), "Control pipe timeout cannot be negative."); //_wuDevice.SetPipePolicy(0, 0x00, API.POLICY_TYPE.PIPE_TRANSFER_TIMEOUT, (uint)value); if (InputPipe != null) _wuDevice.SetPipePolicy(0, InputPipe.Address, API.POLICY_TYPE.PIPE_TRANSFER_TIMEOUT, (uint)value); @@ -233,11 +233,12 @@ namespace MadWizard.WinUSBNet /// The setup packet device request. /// The value member in the setup packet. Its meaning depends on the request. Value should be between zero and 65535 (0xFFFF). /// The index member in the setup packet. Its meaning depends on the request. Index should be between zero and 65535 (0xFFFF). - /// The data to transfer in the data stage of the control. When the transfer is in the IN direction the data received will be + /// The data to transfer in the data stage of the control. When the transfer is in the IN direction the data received will be /// written to this buffer. For an OUT direction transfer the contents of the buffer are written sent through the pipe. - /// Length of the data to transfer. Must be equal to or less than the length of . + /// Length of the data to transfer. Must be equal to or less than the length of . /// The setup packet's length member will be set to this length. - public void ControlTransfer(byte requestType, byte request, int value, int index, byte[] buffer, int length) + /// The number of bytes received from the device. + public int ControlTransfer(byte requestType, byte request, int value, int index, byte[] buffer, int length) { // Parameters are int and not ushort because ushort is not CLS compliant. CheckNotDisposed(); @@ -245,7 +246,7 @@ namespace MadWizard.WinUSBNet try { - _wuDevice.ControlTransfer(requestType, request, (ushort)value, (ushort)index, (ushort)length, buffer); + return _wuDevice.ControlTransfer(requestType, request, (ushort)value, (ushort)index, (ushort)length, buffer); } catch (API.APIException e) { @@ -256,24 +257,24 @@ namespace MadWizard.WinUSBNet /// /// Initiates an asynchronous control transfer over the default control endpoint. This method allows both IN and OUT direction transfers, depending /// on the highest bit of the parameter. Alternatively, and - /// can be used for asynchronous control transfers in a specific direction, which is - /// the recommended way because it prevents using the wrong direction accidentally. Use the BeginControlTransfer method when the direction is not + /// can be used for asynchronous control transfers in a specific direction, which is + /// the recommended way because it prevents using the wrong direction accidentally. Use the BeginControlTransfer method when the direction is not /// known at compile time. /// The setup packet request type. /// The setup packet device request. /// The value member in the setup packet. Its meaning depends on the request. Value should be between zero and 65535 (0xFFFF). /// The index member in the setup packet. Its meaning depends on the request. Index should be between zero and 65535 (0xFFFF). - /// The data to transfer in the data stage of the control. When the transfer is in the IN direction the data received will be + /// The data to transfer in the data stage of the control. When the transfer is in the IN direction the data received will be /// written to this buffer. For an OUT direction transfer the contents of the buffer are written sent through the pipe. Note: This buffer is not allowed /// to change for the duration of the asynchronous operation. /// Length of the data to transfer. Must be equal to or less than the length of . The setup packet's length member will be set to this length. /// An optional asynchronous callback, to be called when the control transfer is complete. Can be null if no callback is required. /// A user-provided object that distinguishes this particular asynchronous operation. Can be null if not required. - /// An object repesenting the asynchronous control transfer, which could still be pending. + /// An object representing the asynchronous control transfer, which could still be pending. /// This method always completes immediately even if the operation is still pending. The object returned represents the operation /// and must be passed to to retrieve the result of the operation. For every call to this method a matching call to /// must be made. When specifies a callback function, this function will be called when the operation is completed. The optional - /// parameter can be used to pass user-defined information to this callback or the . The + /// parameter can be used to pass user-defined information to this callback or the . The /// also provides an event handle () that will be triggered when the operation is complete as well. /// public IAsyncResult BeginControlTransfer(byte requestType, byte request, int value, int index, byte[] buffer, int length, AsyncCallback userCallback, object stateObject) @@ -306,23 +307,23 @@ namespace MadWizard.WinUSBNet /// /// Initiates an asynchronous control transfer over the default control endpoint. This method allows both IN and OUT direction transfers, depending /// on the highest bit of the parameter. Alternatively, and - /// can be used for asynchronous control transfers in a specific direction, which is - /// the recommended way because it prevents using the wrong direction accidentally. Use the BeginControlTransfer method when the direction is not + /// can be used for asynchronous control transfers in a specific direction, which is + /// the recommended way because it prevents using the wrong direction accidentally. Use the BeginControlTransfer method when the direction is not /// known at compile time. /// The setup packet request type. /// The setup packet device request. /// The value member in the setup packet. Its meaning depends on the request. Value should be between zero and 65535 (0xFFFF). /// The index member in the setup packet. Its meaning depends on the request. Index should be between zero and 65535 (0xFFFF). - /// The data to transfer in the data stage of the control. When the transfer is in the IN direction the data received will be - /// written to this buffer. For an OUT direction transfer the contents of the buffer are written sent through the pipe. The setup packet's length member will + /// The data to transfer in the data stage of the control. When the transfer is in the IN direction the data received will be + /// written to this buffer. For an OUT direction transfer the contents of the buffer are written sent through the pipe. The setup packet's length member will /// be set to the length of this buffer. Note: This buffer is not allowed to change for the duration of the asynchronous operation. /// An optional asynchronous callback, to be called when the control transfer is complete. Can be null if no callback is required. /// A user-provided object that distinguishes this particular asynchronous operation. Can be null if not required. - /// An object repesenting the asynchronous control transfer, which could still be pending. + /// An object representing the asynchronous control transfer, which could still be pending. /// This method always completes immediately even if the operation is still pending. The object returned represents the operation /// and must be passed to to retrieve the result of the operation. For every call to this method a matching call to /// must be made. When specifies a callback function, this function will be called when the operation is completed. The optional - /// parameter can be used to pass user-defined information to this callback or the . The + /// parameter can be used to pass user-defined information to this callback or the . The /// also provides an event handle () that will be triggered when the operation is complete as well. /// public IAsyncResult BeginControlTransfer(byte requestType, byte request, int value, int index, byte[] buffer, AsyncCallback userCallback, object stateObject) @@ -334,13 +335,13 @@ namespace MadWizard.WinUSBNet /// /// Waits for a pending asynchronous control transfer to complete. /// - /// The object representing the asynchonous operation, + /// The object representing the asynchronous operation, /// as returned by one of the ControlIn, ControlOut or ControlTransfer methods. /// The number of bytes transfered during the operation. /// Every asynchronous control transfer must have a matching call to to dispose - /// of any resources used and to retrieve the result of the operation. When the operation was successful the method returns the number - /// of bytes that were transfered. If an error occurred during the operation this method will throw the exceptions that would - /// otherwise have ocurred during the operation. If the operation is not yet finished EndControlTransfer will wait for the + /// of any resources used and to retrieve the result of the operation. When the operation was successful the method returns the number + /// of bytes that were transfered. If an error occurred during the operation this method will throw the exceptions that would + /// otherwise have occurred during the operation. If the operation is not yet finished EndControlTransfer will wait for the /// operation to finish before returning. public int EndControlTransfer(IAsyncResult asyncResult) { @@ -379,12 +380,13 @@ namespace MadWizard.WinUSBNet /// The setup packet device request. /// The value member in the setup packet. Its meaning depends on the request. Value should be between zero and 65535 (0xFFFF). /// The index member in the setup packet. Its meaning depends on the request. Index should be between zero and 65535 (0xFFFF). - /// The data to transfer in the data stage of the control. When the transfer is in the IN direction the data received will be + /// The data to transfer in the data stage of the control. When the transfer is in the IN direction the data received will be /// written to this buffer. For an OUT direction transfer the contents of the buffer are written sent through the pipe. The length of this /// buffer is used as the number of bytes in the control transfer. The setup packet's length member will be set to this length as well. - public void ControlTransfer(byte requestType, byte request, int value, int index, byte[] buffer) + /// The number of bytes received from the device. + public int ControlTransfer(byte requestType, byte request, int value, int index, byte[] buffer) { - ControlTransfer(requestType, request, value, index, buffer, buffer.Length); + return ControlTransfer(requestType, request, value, index, buffer, buffer.Length); } /// @@ -423,14 +425,23 @@ namespace MadWizard.WinUSBNet /// The setup packet device request. /// The value member in the setup packet. Its meaning depends on the request. Value should be between zero and 65535 (0xFFFF). /// The index member in the setup packet. Its meaning depends on the request. Index should be between zero and 65535 (0xFFFF). - /// Length of the data to transfer. A buffer will be created with this length and the length member of the setup packet + /// Length of the data to transfer. A buffer will be created with this length and the length member of the setup packet /// will be set to this length. /// A buffer containing the data transfered. + /// This routine initially allocates a buffer to hold the bytes of data expected from the device. + /// If the device responds with less data than expected, this routine will allocate a smaller buffer to copy and return only the bytes actually received. + /// public byte[] ControlIn(byte requestType, byte request, int value, int index, int length) { CheckIn(requestType); byte[] buffer = new byte[length]; - ControlTransfer(requestType, request, value, index, buffer, buffer.Length); + int actuallyReceived = ControlTransfer(requestType, request, value, index, buffer, buffer.Length); + if (actuallyReceived < length) + { + byte[] outBuffer = new byte[actuallyReceived]; + Array.Copy(buffer, 0, outBuffer, 0, actuallyReceived); + return outBuffer; + } return buffer; } @@ -444,12 +455,13 @@ namespace MadWizard.WinUSBNet /// The value member in the setup packet. Its meaning depends on the request. Value should be between zero and 65535 (0xFFFF). /// The index member in the setup packet. Its meaning depends on the request. Index should be between zero and 65535 (0xFFFF). /// The buffer that will receive the data transfered. - /// Length of the data to transfer. The length member of the setup packet will be set to this length. The buffer specified + /// Length of the data to transfer. The length member of the setup packet will be set to this length. The buffer specified /// by the parameter should have at least this length. - public void ControlIn(byte requestType, byte request, int value, int index, byte[] buffer, int length) + /// The number of bytes received from the device. + public int ControlIn(byte requestType, byte request, int value, int index, byte[] buffer, int length) { CheckIn(requestType); - ControlTransfer(requestType, request, value, index, buffer, length); + return ControlTransfer(requestType, request, value, index, buffer, length); } /// @@ -462,10 +474,11 @@ namespace MadWizard.WinUSBNet /// The value member in the setup packet. Its meaning depends on the request. Value should be between zero and 65535 (0xFFFF). /// The index member in the setup packet. Its meaning depends on the request. Index should be between zero and 65535 (0xFFFF). /// The buffer that will receive the data transfered. The length of this buffer will be the number of bytes transfered. - public void ControlIn(byte requestType, byte request, int value, int index, byte[] buffer) + /// The number of bytes received from the device. + public int ControlIn(byte requestType, byte request, int value, int index, byte[] buffer) { CheckIn(requestType); - ControlTransfer(requestType, request, value, index, buffer); + return ControlTransfer(requestType, request, value, index, buffer); } /// @@ -536,8 +549,8 @@ namespace MadWizard.WinUSBNet /// /// Initiates an asynchronous control transfer without a data stage over the default control endpoint. This method allows both IN and OUT direction transfers, depending /// on the highest bit of the parameter. Alternatively, and - /// can be used for asynchronous control transfers in a specific direction, which is - /// the recommended way because it prevents using the wrong direction accidentally. Use the BeginControlTransfer method when the direction is not + /// can be used for asynchronous control transfers in a specific direction, which is + /// the recommended way because it prevents using the wrong direction accidentally. Use the BeginControlTransfer method when the direction is not /// known at compile time. /// The setup packet request type. /// The setup packet device request. @@ -545,11 +558,11 @@ namespace MadWizard.WinUSBNet /// The index member in the setup packet. Its meaning depends on the request. Index should be between zero and 65535 (0xFFFF). /// An optional asynchronous callback, to be called when the control transfer is complete. Can be null if no callback is required. /// A user-provided object that distinguishes this particular asynchronous operation. Can be null if not required. - /// An object repesenting the asynchronous control transfer, which could still be pending. + /// An object representing the asynchronous control transfer, which could still be pending. /// This method always completes immediately even if the operation is still pending. The object returned represents the operation /// and must be passed to to retrieve the result of the operation. For every call to this method a matching call to /// must be made. When specifies a callback function, this function will be called when the operation is completed. The optional - /// parameter can be used to pass user-defined information to this callback or the . The + /// parameter can be used to pass user-defined information to this callback or the . The /// also provides an event handle () that will be triggered when the operation is complete as well. /// public IAsyncResult BeginControlTransfer(byte requestType, byte request, int value, int index, AsyncCallback userCallback, object stateObject) @@ -571,11 +584,11 @@ namespace MadWizard.WinUSBNet /// Length of the data to transfer. Must be equal to or less than the length of . The setup packet's length member will be set to this length. /// An optional asynchronous callback, to be called when the control transfer is complete. Can be null if no callback is required. /// A user-provided object that distinguishes this particular asynchronous operation. Can be null if not required. - /// An object repesenting the asynchronous control transfer, which could still be pending. + /// An object representing the asynchronous control transfer, which could still be pending. /// This method always completes immediately even if the operation is still pending. The object returned represents the operation /// and must be passed to to retrieve the result of the operation. For every call to this method a matching call to /// must be made. When specifies a callback function, this function will be called when the operation is completed. The optional - /// parameter can be used to pass user-defined information to this callback or the . The + /// parameter can be used to pass user-defined information to this callback or the . The /// also provides an event handle () that will be triggered when the operation is complete as well. /// public IAsyncResult BeginControlIn(byte requestType, byte request, int value, int index, byte[] buffer, int length, AsyncCallback userCallback, object stateObject) @@ -594,11 +607,11 @@ namespace MadWizard.WinUSBNet /// The buffer that will receive the data transfered. The setup packet's length member will be set to the length of this buffer. /// An optional asynchronous callback, to be called when the control transfer is complete. Can be null if no callback is required. /// A user-provided object that distinguishes this particular asynchronous operation. Can be null if not required. - /// An object repesenting the asynchronous control transfer, which could still be pending. + /// An object representing the asynchronous control transfer, which could still be pending. /// This method always completes immediately even if the operation is still pending. The object returned represents the operation /// and must be passed to to retrieve the result of the operation. For every call to this method a matching call to /// must be made. When specifies a callback function, this function will be called when the operation is completed. The optional - /// parameter can be used to pass user-defined information to this callback or the . The + /// parameter can be used to pass user-defined information to this callback or the . The /// also provides an event handle () that will be triggered when the operation is complete as well. /// public IAsyncResult BeginControlIn(byte requestType, byte request, int value, int index, byte[] buffer, AsyncCallback userCallback, object stateObject) @@ -608,7 +621,7 @@ namespace MadWizard.WinUSBNet } /// - /// Initiates an asynchronous control transfer without a data stage over the default control endpoint. + /// Initiates an asynchronous control transfer without a data stage over the default control endpoint. /// The request should have an IN direction (specified by the highest bit of the parameter). /// The setup packets' length member will be set to zero. /// The setup packet request type. The request type must specify the IN direction (highest bit set). @@ -617,11 +630,11 @@ namespace MadWizard.WinUSBNet /// The index member in the setup packet. Its meaning depends on the request. Index should be between zero and 65535 (0xFFFF). /// An optional asynchronous callback, to be called when the control transfer is complete. Can be null if no callback is required. /// A user-provided object that distinguishes this particular asynchronous operation. Can be null if not required. - /// An object repesenting the asynchronous control transfer, which could still be pending. + /// An object representing the asynchronous control transfer, which could still be pending. /// This method always completes immediately even if the operation is still pending. The object returned represents the operation /// and must be passed to to retrieve the result of the operation. For every call to this method a matching call to /// must be made. When specifies a callback function, this function will be called when the operation is completed. The optional - /// parameter can be used to pass user-defined information to this callback or the . The + /// parameter can be used to pass user-defined information to this callback or the . The /// also provides an event handle () that will be triggered when the operation is complete as well. /// public IAsyncResult BeginControlIn(byte requestType, byte request, int value, int index, AsyncCallback userCallback, object stateObject) @@ -641,11 +654,11 @@ namespace MadWizard.WinUSBNet /// Length of the data to transfer. Must be equal to or less than the length of . The setup packet's length member will be set to this length. /// An optional asynchronous callback, to be called when the control transfer is complete. Can be null if no callback is required. /// A user-provided object that distinguishes this particular asynchronous operation. Can be null if not required. - /// An object repesenting the asynchronous control transfer, which could still be pending. + /// An object representing the asynchronous control transfer, which could still be pending. /// This method always completes immediately even if the operation is still pending. The object returned represents the operation /// and must be passed to to retrieve the result of the operation. For every call to this method a matching call to /// must be made. When specifies a callback function, this function will be called when the operation is completed. The optional - /// parameter can be used to pass user-defined information to this callback or the . The + /// parameter can be used to pass user-defined information to this callback or the . The /// also provides an event handle () that will be triggered when the operation is complete as well. /// public IAsyncResult BeginControlOut(byte requestType, byte request, int value, int index, byte[] buffer, int length, AsyncCallback userCallback, object stateObject) @@ -664,11 +677,11 @@ namespace MadWizard.WinUSBNet /// The buffer that contains the data to be transfered. The setup packet's length member will be set to the length of this buffer. /// An optional asynchronous callback, to be called when the control transfer is complete. Can be null if no callback is required. /// A user-provided object that distinguishes this particular asynchronous operation. Can be null if not required. - /// An object repesenting the asynchronous control transfer, which could still be pending. + /// An object representing the asynchronous control transfer, which could still be pending. /// This method always completes immediately even if the operation is still pending. The object returned represents the operation /// and must be passed to to retrieve the result of the operation. For every call to this method a matching call to /// must be made. When specifies a callback function, this function will be called when the operation is completed. The optional - /// parameter can be used to pass user-defined information to this callback or the . The + /// parameter can be used to pass user-defined information to this callback or the . The /// also provides an event handle () that will be triggered when the operation is complete as well. /// public IAsyncResult BeginControlOut(byte requestType, byte request, int value, int index, byte[] buffer, AsyncCallback userCallback, object stateObject) @@ -678,7 +691,7 @@ namespace MadWizard.WinUSBNet } /// - /// Initiates an asynchronous control transfer without a data stage over the default control endpoint. + /// Initiates an asynchronous control transfer without a data stage over the default control endpoint. /// The request should have an OUT direction (specified by the highest bit of the parameter). /// The setup packets' length member will be set to zero. /// The setup packet request type. The request type must specify the OUT direction (highest bit cleared). @@ -687,11 +700,11 @@ namespace MadWizard.WinUSBNet /// The index member in the setup packet. Its meaning depends on the request. Index should be between zero and 65535 (0xFFFF). /// An optional asynchronous callback, to be called when the control transfer is complete. Can be null if no callback is required. /// A user-provided object that distinguishes this particular asynchronous operation. Can be null if not required. - /// An object repesenting the asynchronous control transfer, which could still be pending. + /// An object representing the asynchronous control transfer, which could still be pending. /// This method always completes immediately even if the operation is still pending. The object returned represents the operation /// and must be passed to to retrieve the result of the operation. For every call to this method a matching call to /// must be made. When specifies a callback function, this function will be called when the operation is completed. The optional - /// parameter can be used to pass user-defined information to this callback or the . The + /// parameter can be used to pass user-defined information to this callback or the . The /// also provides an event handle () that will be triggered when the operation is complete as well. /// public IAsyncResult BeginControlOut(byte requestType, byte request, int value, int index, AsyncCallback userCallback, object stateObject) @@ -712,10 +725,10 @@ namespace MadWizard.WinUSBNet /// Finds WinUSB devices with a GUID matching the parameter guidString /// /// The GUID string that the device should match. - /// The format of this string may be any format accepted by the constructor + /// The format of this string may be any format accepted by the constructor /// of the System.Guid class - /// An array of USBDeviceInfo objects representing the - /// devices found. When no devices are found an empty array is + /// An array of USBDeviceInfo objects representing the + /// devices found. When no devices are found an empty array is /// returned. public static USBDeviceInfo[] GetDevices(string guidString) { @@ -726,8 +739,8 @@ namespace MadWizard.WinUSBNet /// Finds WinUSB devices with a GUID matching the parameter guid /// /// The GUID that the device should match. - /// An array of USBDeviceInfo objects representing the - /// devices found. When no devices are found an empty array is + /// An array of USBDeviceInfo objects representing the + /// devices found. When no devices are found an empty array is /// returned. public static USBDeviceInfo[] GetDevices(Guid guid) { @@ -781,8 +794,13 @@ namespace MadWizard.WinUSBNet { wuDevice.OpenDevice(devicePath); API.USB_DEVICE_DESCRIPTOR deviceDesc = wuDevice.GetDeviceDescriptor(); - // string q = wuDevice.GetStringDescriptor(0); - // TODO: use language id properly + + // Get first supported language ID + ushort[] langIDs = wuDevice.GetSupportedLanguageIDs(); + ushort langID = 0; + if (langIDs.Length > 0) + langID = langIDs[0]; + string manufacturer = null, product = null, serialNumber = null; byte idx = 0; @@ -790,7 +808,7 @@ namespace MadWizard.WinUSBNet { idx = deviceDesc.iManufacturer; if (idx > 0) - manufacturer = wuDevice.GetStringDescriptor(idx); + manufacturer = wuDevice.GetStringDescriptor(idx, langID); } catch { } @@ -798,7 +816,7 @@ namespace MadWizard.WinUSBNet { idx = deviceDesc.iProduct; if (idx > 0) - product = wuDevice.GetStringDescriptor(idx); + product = wuDevice.GetStringDescriptor(idx, langID); } catch { } @@ -806,7 +824,7 @@ namespace MadWizard.WinUSBNet { idx = deviceDesc.iSerialNumber; if (idx > 0) - serialNumber = wuDevice.GetStringDescriptor(idx); + serialNumber = wuDevice.GetStringDescriptor(idx, langID); } catch { } diff --git a/WinUSBNet/USBDeviceDescriptor.cs b/WinUSBNet/USBDeviceDescriptor.cs index 31a2f8d..94c87ab 100644 --- a/WinUSBNet/USBDeviceDescriptor.cs +++ b/WinUSBNet/USBDeviceDescriptor.cs @@ -1,6 +1,6 @@ -/* WinUSBNet library +/* WinUSBNet library * (C) 2010 Thomas Bleeker (www.madwizard.org) - * + * * Licensed under the MIT license, see license.txt or: * http://www.opensource.org/licenses/mit-license.php */ @@ -46,7 +46,7 @@ namespace MadWizard.WinUSBNet /// - /// Friendly device name, or path name when no + /// Friendly device name, or path name when no /// further device information is available /// public string FullName @@ -67,7 +67,7 @@ namespace MadWizard.WinUSBNet /// /// Device class code as defined in the interface descriptor /// This property can be used if the class type is not defined - /// int the USBBaseClass enumeraiton + /// int the USBBaseClass enumeration /// public byte ClassValue { diff --git a/WinUSBNet/USBInterface.cs b/WinUSBNet/USBInterface.cs index 066038d..8a208ea 100644 --- a/WinUSBNet/USBInterface.cs +++ b/WinUSBNet/USBInterface.cs @@ -1,6 +1,6 @@ -/* WinUSBNet library +/* WinUSBNet library * (C) 2010 Thomas Bleeker (www.madwizard.org) - * + * * Licensed under the MIT license, see license.txt or: * http://www.opensource.org/licenses/mit-license.php */ @@ -73,7 +73,7 @@ namespace MadWizard.WinUSBNet /// /// Interface class code as defined in the interface descriptor /// This property can be used if the class type is not defined - /// int the USBBaseClass enumeraiton + /// int the USBBaseClass enumeration /// public byte ClassValue { diff --git a/WinUSBNet/USBNotifier.cs b/WinUSBNet/USBNotifier.cs index ae33727..d6d7e78 100644 --- a/WinUSBNet/USBNotifier.cs +++ b/WinUSBNet/USBNotifier.cs @@ -1,6 +1,6 @@ -/* WinUSBNet library +/* WinUSBNet library * (C) 2010 Thomas Bleeker (www.madwizard.org) - * + * * Licensed under the MIT license, see license.txt or: * http://www.opensource.org/licenses/mit-license.php */ @@ -61,7 +61,7 @@ namespace MadWizard.WinUSBNet } /// - /// Helper class to receive notifications on USB device changes such as + /// Helper class to receive notifications on USB device changes such as /// connecting or removing a device. /// public class USBNotifier : IDisposable @@ -108,11 +108,11 @@ namespace MadWizard.WinUSBNet } /// - /// Constructs a new USBNotifier that will watch for events on - /// devices matching the given interface GUID. A Windows Forms control + /// Constructs a new USBNotifier that will watch for events on + /// devices matching the given interface GUID. A Windows Forms control /// is needed since the notifier relies on window messages. /// - /// A control that will be used internally for device notification messages. + /// A control that will be used internally for device notification messages. /// You can use a Form object for example. /// The interface GUID string of the devices to watch. public USBNotifier(string guidString) : @@ -123,11 +123,11 @@ namespace MadWizard.WinUSBNet /// - /// Constructs a new USBNotifier that will watch for events on - /// devices matching the given interface GUID. A Windows Forms control + /// Constructs a new USBNotifier that will watch for events on + /// devices matching the given interface GUID. A Windows Forms control /// is needed since the notifier relies on window messages. /// - /// A control that will be used internally for device notification messages. + /// A control that will be used internally for device notification messages. /// You can use a Form object for example. /// The interface GUID of the devices to watch. public USBNotifier(Guid guid) @@ -146,7 +146,7 @@ namespace MadWizard.WinUSBNet _Arrival(this, new USBEvent(USBEventType.DeviceArrival, _guid, devicePath)); } /// - /// Trigggers the removal event + /// Triggers the removal event /// /// Device pathname of the device that has been connected protected void OnRemoval(string devicePath) @@ -212,7 +212,7 @@ namespace MadWizard.WinUSBNet } /// - /// Disposes the USBNotifier object and frees all resources. + /// Disposes the USBNotifier object and frees all resources. /// Call this method when the object is no longer needed. /// public void Dispose() diff --git a/WinUSBNet/USBPipe.cs b/WinUSBNet/USBPipe.cs index b142e15..f59e09d 100644 --- a/WinUSBNet/USBPipe.cs +++ b/WinUSBNet/USBPipe.cs @@ -1,6 +1,6 @@ -/* WinUSBNet library +/* WinUSBNet library * (C) 2010 Thomas Bleeker (www.madwizard.org) - * + * * Licensed under the MIT license, see license.txt or: * http://www.opensource.org/licenses/mit-license.php */ @@ -139,29 +139,29 @@ namespace MadWizard.WinUSBNet private void CheckReadParams(byte[] buffer, int offset, int length) { if (!IsIn) - // throw new NotSupportedException("Cannot read from a pipe with OUT direction."); - LogAndThrowException(new NotSupportedException("Cannot read from a pipe with OUT direction.")); + // throw new ArgumentOutOfRangeException("Offset of data to read is outside the buffer boundaries."); + LogAndThrowException(new ArgumentOutOfRangeException("Offset of data to read is outside the buffer boundaries.")); int bufferLength = buffer.Length; if (offset < 0 || offset >= bufferLength) - // throw new ArgumentOutOfRangeException("Offset of data to read is outside the buffer boundaries."); + // throw new ArgumentOutOfRangeException(nameof(offset), "Offset of data to read is outside the buffer boundaries."); LogAndThrowException(new ArgumentOutOfRangeException("Offset of data to read is outside the buffer boundaries.")); if (length < 0 || (offset + length) > bufferLength) - // throw new ArgumentOutOfRangeException("Length of data to read is outside the buffer boundaries."); + // throw new ArgumentOutOfRangeException(nameof(length), "Length of data to read is outside the buffer boundaries."); LogAndThrowException(new ArgumentOutOfRangeException("Length of data to read is outside the buffer boundaries.")); } private void CheckWriteParams(byte[] buffer, int offset, int length) { if (!IsOut) - // throw new NotSupportedException("Cannot write to a pipe with IN direction."); + //throw new NotSupportedException("Cannot write to a pipe with IN direction."); LogAndThrowException(new NotSupportedException("Cannot write to a pipe with IN direction.")); int bufferLength = buffer.Length; if (offset < 0 || offset >= bufferLength) - // throw new ArgumentOutOfRangeException("Offset of data to write is outside the buffer boundaries."); + // throw new ArgumentOutOfRangeException(nameof(offset), "Offset of data to write is outside the buffer boundaries."); LogAndThrowException(new ArgumentOutOfRangeException("Offset of data to write is outside the buffer boundaries.")); if (length < 0 || (offset + length) > bufferLength) - // throw new ArgumentOutOfRangeException("Length of data to write is outside the buffer boundaries."); + // throw new ArgumentOutOfRangeException(nameof(length), "Length of data to write is outside the buffer boundaries."); LogAndThrowException(new ArgumentOutOfRangeException("Length of data to write is outside the buffer boundaries.")); } @@ -171,11 +171,11 @@ namespace MadWizard.WinUSBNet /// Length of the data to transfer. /// An optional asynchronous callback, to be called when the operation is complete. Can be null if no callback is required. /// A user-provided object that distinguishes this particular asynchronous operation. Can be null if not required. - /// An object repesenting the asynchronous operation, which could still be pending. + /// An object representing the asynchronous operation, which could still be pending. /// This method always completes immediately even if the operation is still pending. The object returned represents the operation /// and must be passed to to retrieve the result of the operation. For every call to this method a matching call to /// must be made. When specifies a callback function, this function will be called when the operation is completed. The optional - /// parameter can be used to pass user-defined information to this callback or the . The + /// parameter can be used to pass user-defined information to this callback or the . The /// also provides an event handle () that will be triggered when the operation is complete as well. /// public IAsyncResult BeginRead(byte[] buffer, int offset, int length, AsyncCallback userCallback, object stateObject) @@ -189,9 +189,8 @@ namespace MadWizard.WinUSBNet } catch (API.APIException e) { - if (result != null) - result.Dispose(); - // throw new USBException("Failed to read from pipe.", e); + result.Dispose(); + //throw new USBException("Failed to read from pipe.", e); LogAndThrowException(new USBException("Failed to read from pipe.", e)); } catch (Exception e) @@ -208,13 +207,13 @@ namespace MadWizard.WinUSBNet /// /// Waits for a pending asynchronous read operation to complete. /// - /// The object representing the asynchonous operation, + /// The object representing the asynchronous operation, /// as returned by . /// The number of bytes transfered during the operation. /// Every call to must have a matching call to to dispose - /// of any resources used and to retrieve the result of the operation. When the operation was successful the method returns the number - /// of bytes that were transfered. If an error occurred during the operation this method will throw the exceptions that would - /// otherwise have ocurred during the operation. If the operation is not yet finished EndWrite will wait for the + /// of any resources used and to retrieve the result of the operation. When the operation was successful the method returns the number + /// of bytes that were transfered. If an error occurred during the operation this method will throw the exceptions that would + /// otherwise have occurred during the operation. If the operation is not yet finished EndWrite will wait for the /// operation to finish before returning. public int EndRead(IAsyncResult asyncResult) { @@ -285,11 +284,11 @@ namespace MadWizard.WinUSBNet /// Length of the data to transfer. /// An optional asynchronous callback, to be called when the operation is complete. Can be null if no callback is required. /// A user-provided object that distinguishes this particular asynchronous operation. Can be null if not required. - /// An object repesenting the asynchronous operation, which could still be pending. + /// An object representing the asynchronous operation, which could still be pending. /// This method always completes immediately even if the operation is still pending. The object returned represents the operation /// and must be passed to to retrieve the result of the operation. For every call to this method a matching call to /// must be made. When specifies a callback function, this function will be called when the operation is completed. The optional - /// parameter can be used to pass user-defined information to this callback or the . The + /// parameter can be used to pass user-defined information to this callback or the . The /// also provides an event handle () that will be triggered when the operation is complete as well. /// public IAsyncResult BeginWrite(byte[] buffer, int offset, int length, AsyncCallback userCallback, object stateObject) @@ -327,13 +326,13 @@ namespace MadWizard.WinUSBNet /// /// Waits for a pending asynchronous write operation to complete. /// - /// The object representing the asynchonous operation, + /// The object representing the asynchronous operation, /// as returned by . /// The number of bytes transfered during the operation. /// Every call to must have a matching call to to dispose - /// of any resources used and to retrieve the result of the operation. When the operation was successful the method returns the number - /// of bytes that were transfered. If an error occurred during the operation this method will throw the exceptions that would - /// otherwise have ocurred during the operation. If the operation is not yet finished EndWrite will wait for the + /// of any resources used and to retrieve the result of the operation. When the operation was successful the method returns the number + /// of bytes that were transfered. If an error occurred during the operation this method will throw the exceptions that would + /// otherwise have occurred during the operation. If the operation is not yet finished EndWrite will wait for the /// operation to finish before returning. public void EndWrite(IAsyncResult asyncResult) { From 0ea33ff35ccf34ea0e0bb56e72685afe8838dc2b Mon Sep 17 00:00:00 2001 From: Gus Date: Mon, 8 Feb 2021 17:50:27 +0100 Subject: [PATCH 2/4] Project: Convert to .NET 5.0 --- 7zip/Compress/LZMA/LzmaDecoder.cs | 162 +++-- 7zip/Compress/LZMA/LzmaEncoder.cs | 4 +- 7zip/ICoder.cs | 3 +- DiscUtils/Fat/FatFileSystemOptions.cs | 2 + FilePickerControl.xaml.cs | 12 +- Models/GPT.cs | 12 +- Models/LZMA.cs | 14 +- Models/NativeMethods.cs | 13 +- Models/Privileges.cs | 20 - WPinternals.csproj | 962 +------------------------- 10 files changed, 136 insertions(+), 1068 deletions(-) diff --git a/7zip/Compress/LZMA/LzmaDecoder.cs b/7zip/Compress/LZMA/LzmaDecoder.cs index d60cc0c..c4a50ff 100644 --- a/7zip/Compress/LZMA/LzmaDecoder.cs +++ b/7zip/Compress/LZMA/LzmaDecoder.cs @@ -5,6 +5,7 @@ using System; namespace SevenZip.Compression.LZMA { using RangeCoder; + using System.Threading; public class Decoder : ICoder, ISetDecoderProperties // ,System.IO.Stream { @@ -228,7 +229,7 @@ namespace SevenZip.Compression.LZMA } public void Code(System.IO.Stream inStream, System.IO.Stream outStream, - Int64 inSize, Int64 outSize, ICodeProgress progress) + Int64 inSize, Int64 outSize, ICodeProgress progress, CancellationToken? token = null) { Init(inStream, outStream); @@ -247,100 +248,111 @@ namespace SevenZip.Compression.LZMA m_OutWindow.PutByte(b); nowPos64++; } - while (nowPos64 < outSize64) + + try { - // UInt64 next = Math.Min(nowPos64 + (1 << 18), outSize64); - // while(nowPos64 < next) + while (nowPos64 < outSize64) { - uint posState = (uint)nowPos64 & m_PosStateMask; - if (m_IsMatchDecoders[(state.Index << Base.kNumPosStatesBitsMax) + posState].Decode(m_RangeDecoder) == 0) + token?.ThrowIfCancellationRequested(); + + // UInt64 next = Math.Min(nowPos64 + (1 << 18), outSize64); + // while(nowPos64 < next) { - byte b; - byte prevByte = m_OutWindow.GetByte(0); - if (!state.IsCharState()) - b = m_LiteralDecoder.DecodeWithMatchByte(m_RangeDecoder, - (uint)nowPos64, prevByte, m_OutWindow.GetByte(rep0)); - else - b = m_LiteralDecoder.DecodeNormal(m_RangeDecoder, (uint)nowPos64, prevByte); - m_OutWindow.PutByte(b); - state.UpdateChar(); - nowPos64++; - } - else - { - uint len; - if (m_IsRepDecoders[state.Index].Decode(m_RangeDecoder) == 1) + uint posState = (uint)nowPos64 & m_PosStateMask; + if (m_IsMatchDecoders[(state.Index << Base.kNumPosStatesBitsMax) + posState].Decode(m_RangeDecoder) == 0) { - if (m_IsRepG0Decoders[state.Index].Decode(m_RangeDecoder) == 0) - { - if (m_IsRep0LongDecoders[(state.Index << Base.kNumPosStatesBitsMax) + posState].Decode(m_RangeDecoder) == 0) - { - state.UpdateShortRep(); - m_OutWindow.PutByte(m_OutWindow.GetByte(rep0)); - nowPos64++; - continue; - } - } + byte b; + byte prevByte = m_OutWindow.GetByte(0); + if (!state.IsCharState()) + b = m_LiteralDecoder.DecodeWithMatchByte(m_RangeDecoder, + (uint)nowPos64, prevByte, m_OutWindow.GetByte(rep0)); else + b = m_LiteralDecoder.DecodeNormal(m_RangeDecoder, (uint)nowPos64, prevByte); + m_OutWindow.PutByte(b); + state.UpdateChar(); + nowPos64++; + } + else + { + uint len; + if (m_IsRepDecoders[state.Index].Decode(m_RangeDecoder) == 1) { - UInt32 distance; - if (m_IsRepG1Decoders[state.Index].Decode(m_RangeDecoder) == 0) + if (m_IsRepG0Decoders[state.Index].Decode(m_RangeDecoder) == 0) { - distance = rep1; + if (m_IsRep0LongDecoders[(state.Index << Base.kNumPosStatesBitsMax) + posState].Decode(m_RangeDecoder) == 0) + { + state.UpdateShortRep(); + m_OutWindow.PutByte(m_OutWindow.GetByte(rep0)); + nowPos64++; + continue; + } } else { - if (m_IsRepG2Decoders[state.Index].Decode(m_RangeDecoder) == 0) - distance = rep2; + UInt32 distance; + if (m_IsRepG1Decoders[state.Index].Decode(m_RangeDecoder) == 0) + { + distance = rep1; + } else { - distance = rep3; - rep3 = rep2; + if (m_IsRepG2Decoders[state.Index].Decode(m_RangeDecoder) == 0) + distance = rep2; + else + { + distance = rep3; + rep3 = rep2; + } + rep2 = rep1; } - rep2 = rep1; - } - rep1 = rep0; - rep0 = distance; - } - len = m_RepLenDecoder.Decode(m_RangeDecoder, posState) + Base.kMatchMinLen; - state.UpdateRep(); - } - else - { - rep3 = rep2; - rep2 = rep1; - rep1 = rep0; - len = Base.kMatchMinLen + m_LenDecoder.Decode(m_RangeDecoder, posState); - state.UpdateMatch(); - uint posSlot = m_PosSlotDecoder[Base.GetLenToPosState(len)].Decode(m_RangeDecoder); - if (posSlot >= Base.kStartPosModelIndex) - { - int numDirectBits = (int)((posSlot >> 1) - 1); - rep0 = ((2 | (posSlot & 1)) << numDirectBits); - if (posSlot < Base.kEndPosModelIndex) - rep0 += BitTreeDecoder.ReverseDecode(m_PosDecoders, - rep0 - posSlot - 1, m_RangeDecoder, numDirectBits); - else - { - rep0 += (m_RangeDecoder.DecodeDirectBits( - numDirectBits - Base.kNumAlignBits) << Base.kNumAlignBits); - rep0 += m_PosAlignDecoder.ReverseDecode(m_RangeDecoder); + rep1 = rep0; + rep0 = distance; } + len = m_RepLenDecoder.Decode(m_RangeDecoder, posState) + Base.kMatchMinLen; + state.UpdateRep(); } else - rep0 = posSlot; + { + rep3 = rep2; + rep2 = rep1; + rep1 = rep0; + len = Base.kMatchMinLen + m_LenDecoder.Decode(m_RangeDecoder, posState); + state.UpdateMatch(); + uint posSlot = m_PosSlotDecoder[Base.GetLenToPosState(len)].Decode(m_RangeDecoder); + if (posSlot >= Base.kStartPosModelIndex) + { + int numDirectBits = (int)((posSlot >> 1) - 1); + rep0 = ((2 | (posSlot & 1)) << numDirectBits); + if (posSlot < Base.kEndPosModelIndex) + rep0 += BitTreeDecoder.ReverseDecode(m_PosDecoders, + rep0 - posSlot - 1, m_RangeDecoder, numDirectBits); + else + { + rep0 += (m_RangeDecoder.DecodeDirectBits( + numDirectBits - Base.kNumAlignBits) << Base.kNumAlignBits); + rep0 += m_PosAlignDecoder.ReverseDecode(m_RangeDecoder); + } + } + else + rep0 = posSlot; + } + if (rep0 >= m_OutWindow.TrainSize + nowPos64 || rep0 >= m_DictionarySizeCheck) + { + if (rep0 == 0xFFFFFFFF) + break; + throw new DataErrorException(); + } + m_OutWindow.CopyBlock(rep0, len); + nowPos64 += len; } - if (rep0 >= m_OutWindow.TrainSize + nowPos64 || rep0 >= m_DictionarySizeCheck) - { - if (rep0 == 0xFFFFFFFF) - break; - throw new DataErrorException(); - } - m_OutWindow.CopyBlock(rep0, len); - nowPos64 += len; } } } + catch (OperationCanceledException) + { + + } + m_OutWindow.Flush(); m_OutWindow.ReleaseStream(); m_RangeDecoder.ReleaseStream(); diff --git a/7zip/Compress/LZMA/LzmaEncoder.cs b/7zip/Compress/LZMA/LzmaEncoder.cs index 3589d45..f07afbd 100644 --- a/7zip/Compress/LZMA/LzmaEncoder.cs +++ b/7zip/Compress/LZMA/LzmaEncoder.cs @@ -5,6 +5,7 @@ using System; namespace SevenZip.Compression.LZMA { using RangeCoder; + using System.Threading; public class Encoder : ICoder, ISetCoderProperties, IWriteCoderProperties { @@ -1271,7 +1272,7 @@ namespace SevenZip.Compression.LZMA public void Code(System.IO.Stream inStream, System.IO.Stream outStream, - Int64 inSize, Int64 outSize, ICodeProgress progress) + Int64 inSize, Int64 outSize, ICodeProgress progress, CancellationToken? token = null) { _needReleaseMFStream = false; try @@ -1279,6 +1280,7 @@ namespace SevenZip.Compression.LZMA SetStreams(inStream, outStream, inSize, outSize); while (true) { + token?.ThrowIfCancellationRequested(); Int64 processedInSize; Int64 processedOutSize; bool finished; diff --git a/7zip/ICoder.cs b/7zip/ICoder.cs index f0781b0..5b8251c 100644 --- a/7zip/ICoder.cs +++ b/7zip/ICoder.cs @@ -1,6 +1,7 @@ // ICoder.h using System; +using System.Threading; namespace SevenZip { @@ -58,7 +59,7 @@ namespace SevenZip /// if input stream is not valid /// void Code(System.IO.Stream inStream, System.IO.Stream outStream, - Int64 inSize, Int64 outSize, ICodeProgress progress); + Int64 inSize, Int64 outSize, ICodeProgress progress, CancellationToken? token = null); }; /* diff --git a/DiscUtils/Fat/FatFileSystemOptions.cs b/DiscUtils/Fat/FatFileSystemOptions.cs index 7abf0a8..efc732d 100644 --- a/DiscUtils/Fat/FatFileSystemOptions.cs +++ b/DiscUtils/Fat/FatFileSystemOptions.cs @@ -34,6 +34,7 @@ namespace DiscUtils.Fat internal FatFileSystemOptions() { + Encoding.RegisterProvider(CodePagesEncodingProvider.Instance); FileNameEncoding = Encoding.GetEncoding(437); } @@ -45,6 +46,7 @@ namespace DiscUtils.Fat } else { + Encoding.RegisterProvider(CodePagesEncodingProvider.Instance); FileNameEncoding = Encoding.GetEncoding(437); } } diff --git a/FilePickerControl.xaml.cs b/FilePickerControl.xaml.cs index de68fd5..bc48aed 100644 --- a/FilePickerControl.xaml.cs +++ b/FilePickerControl.xaml.cs @@ -166,7 +166,8 @@ namespace WPinternals FlowDirection.LeftToRight, new Typeface(PathTextBlock.FontFamily, PathTextBlock.FontStyle, PathTextBlock.FontWeight, PathTextBlock.FontStretch), FontSize, - Foreground + Foreground, + VisualTreeHelper.GetDpi(this).PixelsPerDip ); #endif @@ -198,7 +199,8 @@ namespace WPinternals FlowDirection.LeftToRight, new Typeface(CaptionTextBlock.FontFamily, CaptionTextBlock.FontStyle, CaptionTextBlock.FontWeight, CaptionTextBlock.FontStretch), FontSize, - Foreground + Foreground, + VisualTreeHelper.GetDpi(this).PixelsPerDip ); #endif double CaptionWidth = formatted.Width; @@ -238,7 +240,8 @@ namespace WPinternals FlowDirection.LeftToRight, new Typeface(PathTextBlock.FontFamily, PathTextBlock.FontStyle, PathTextBlock.FontWeight, PathTextBlock.FontStretch), FontSize, - Foreground + Foreground, + VisualTreeHelper.GetDpi(this).PixelsPerDip ); #endif if (NewWidth < 0) @@ -321,7 +324,8 @@ namespace WPinternals FlowDirection.LeftToRight, new Typeface(PathTextBlock.FontFamily, PathTextBlock.FontStyle, PathTextBlock.FontWeight, PathTextBlock.FontStretch), FontSize, - Foreground + Foreground, + VisualTreeHelper.GetDpi(this).PixelsPerDip ); #endif diff --git a/Models/GPT.cs b/Models/GPT.cs index 83f0270..6de3733 100644 --- a/Models/GPT.cs +++ b/Models/GPT.cs @@ -375,18 +375,18 @@ namespace WPinternals HasChanged = true; } - if ((NewPartition.PartitionGuid == null) || (NewPartition.PartitionGuid != CurrentPartition.PartitionGuid)) + if ((NewPartition.PartitionGuid != Guid.Empty) || (NewPartition.PartitionGuid != CurrentPartition.PartitionGuid)) HasChanged = true; - if (NewPartition.PartitionGuid != null) + if (NewPartition.PartitionGuid != Guid.Empty) CurrentPartition.PartitionGuid = NewPartition.PartitionGuid; - if (CurrentPartition.PartitionGuid == null) + if (CurrentPartition.PartitionGuid != Guid.Empty) CurrentPartition.PartitionGuid = Guid.NewGuid(); - if ((NewPartition.PartitionTypeGuid == null) || (NewPartition.PartitionTypeGuid != CurrentPartition.PartitionTypeGuid)) + if ((NewPartition.PartitionTypeGuid != Guid.Empty) || (NewPartition.PartitionTypeGuid != CurrentPartition.PartitionTypeGuid)) HasChanged = true; - if (NewPartition.PartitionTypeGuid != null) + if (NewPartition.PartitionTypeGuid != Guid.Empty) CurrentPartition.PartitionTypeGuid = NewPartition.PartitionTypeGuid; - if (CurrentPartition.PartitionTypeGuid == null) + if (CurrentPartition.PartitionTypeGuid != Guid.Empty) CurrentPartition.PartitionTypeGuid = Guid.NewGuid(); for (int i = this.Partitions.Count - 1; i >= 0; i--) diff --git a/Models/LZMA.cs b/Models/LZMA.cs index 3297b25..7902ec3 100644 --- a/Models/LZMA.cs +++ b/Models/LZMA.cs @@ -92,6 +92,8 @@ namespace WPinternals private Stream stream; private bool LeaveOpen; private Thread WorkThread; + private CancellationTokenSource source; + private CancellationToken token; public LZMACompressionStream(Stream stream, CompressionMode mode, bool LeaveOpen, int DictionarySize, int PosStateBits, int LitContextBits, int LitPosBits, int Algorithm, int NumFastBytes, string MatchFinder, bool EndMarker) @@ -99,6 +101,8 @@ namespace WPinternals this.stream = stream; this.LeaveOpen = LeaveOpen; BufferStream = new PumpStream(); + source = new CancellationTokenSource(); + token = source.Token; if (mode == CompressionMode.Compress) { @@ -130,14 +134,14 @@ namespace WPinternals private void Encode() { - Encoder.Code(BufferStream, stream, -1, -1, null); + Encoder.Code(BufferStream, stream, -1, -1, null, token); if (LeaveOpen == false) stream.Close(); } private void Decode() { - Decoder.Code(stream, BufferStream, -1, -1, null); + Decoder.Code(stream, BufferStream, -1, -1, null, token); BufferStream.Close(); if (LeaveOpen == false) stream.Close(); @@ -148,7 +152,11 @@ namespace WPinternals if (Encoder != null) BufferStream.Close(); else if (WorkThread.IsAlive) - WorkThread.Abort(); + { + if (source != null) + source.Cancel(); + WorkThread.Join(); + } } public override int Read(byte[] buffer, int offset, int count) diff --git a/Models/NativeMethods.cs b/Models/NativeMethods.cs index 53adc30..d405b7e 100644 --- a/Models/NativeMethods.cs +++ b/Models/NativeMethods.cs @@ -118,14 +118,12 @@ namespace WPinternals [DllImport( KERNEL32, SetLastError = true)] - [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)] internal static extern bool CloseHandle(IntPtr handle); [DllImport( ADVAPI32, CharSet = CharSet.Unicode, SetLastError = true)] - [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)] internal static extern bool AdjustTokenPrivileges( [In] SafeTokenHandle TokenHandle, [In] bool DisableAllPrivileges, @@ -138,7 +136,6 @@ namespace WPinternals ADVAPI32, CharSet = CharSet.Auto, SetLastError = true)] - [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)] internal static extern bool RevertToSelf(); @@ -147,7 +144,6 @@ namespace WPinternals EntryPoint = "LookupPrivilegeValueW", CharSet = CharSet.Auto, SetLastError = true)] - [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)] internal static extern bool LookupPrivilegeValue( [In] string lpSystemName, @@ -158,7 +154,6 @@ namespace WPinternals KERNEL32, CharSet = CharSet.Auto, SetLastError = true)] - [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)] internal static extern IntPtr GetCurrentProcess(); @@ -166,7 +161,6 @@ namespace WPinternals KERNEL32, CharSet = CharSet.Auto, SetLastError = true)] - [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)] internal static extern IntPtr GetCurrentThread(); @@ -174,7 +168,6 @@ namespace WPinternals ADVAPI32, CharSet = CharSet.Unicode, SetLastError = true)] - [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)] internal static extern bool OpenProcessToken( [In] IntPtr ProcessToken, @@ -185,7 +178,6 @@ namespace WPinternals (ADVAPI32, CharSet = CharSet.Unicode, SetLastError = true)] - [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)] internal static extern bool OpenThreadToken( [In] IntPtr ThreadToken, @@ -197,7 +189,6 @@ namespace WPinternals (ADVAPI32, CharSet = CharSet.Unicode, SetLastError = true)] - [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)] internal static extern bool DuplicateTokenEx( [In] SafeTokenHandle ExistingToken, @@ -211,7 +202,6 @@ namespace WPinternals (ADVAPI32, CharSet = CharSet.Unicode, SetLastError = true)] - [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)] internal static extern bool SetThreadToken( [In] IntPtr Thread, @@ -301,8 +291,7 @@ namespace WPinternals } [DllImport(NativeMethods.KERNEL32, SetLastError = true), - SuppressUnmanagedCodeSecurity, - ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)] + SuppressUnmanagedCodeSecurity] private static extern bool CloseHandle(IntPtr handle); override protected bool ReleaseHandle() diff --git a/Models/Privileges.cs b/Models/Privileges.cs index 74cbe74..4cbe5f3 100644 --- a/Models/Privileges.cs +++ b/Models/Privileges.cs @@ -20,8 +20,6 @@ using System; using System.Collections.Specialized; -using System.Runtime.CompilerServices; -using System.Runtime.ConstrainedExecution; using System.Runtime.InteropServices; using System.Threading; @@ -93,7 +91,6 @@ namespace WPinternals // of privilege names to luids // - [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)] private static Luid LuidFromPrivilege(string privilege) { Luid luid; @@ -104,8 +101,6 @@ namespace WPinternals // Look up the privilege LUID inside the cache // - RuntimeHelpers.PrepareConstrainedRegions(); - try { privilegeLock.AcquireReaderLock(Timeout.Infinite); @@ -206,8 +201,6 @@ namespace WPinternals } } - RuntimeHelpers.PrepareConstrainedRegions(); - try { // Open the thread token; if there is no thread token, @@ -382,19 +375,16 @@ namespace WPinternals #endregion #region Public methods and properties - [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)] public void Enable() { this.ToggleState(true); } - [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)] public void Disable() { this.ToggleState(false); } - [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)] public void Revert() { int error = 0; @@ -413,8 +403,6 @@ namespace WPinternals // This code must be eagerly prepared and non-interruptible. - RuntimeHelpers.PrepareConstrainedRegions(); - try { // The payload is entirely in the finally block @@ -492,8 +480,6 @@ namespace WPinternals Privilege p = new Privilege(privilege); - RuntimeHelpers.PrepareConstrainedRegions(); - try { if (enabled) @@ -520,7 +506,6 @@ namespace WPinternals #endregion #region Private implementation - [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)] private void ToggleState(bool enable) { int error = 0; @@ -542,8 +527,6 @@ namespace WPinternals // Need to make this block of code non-interruptible so that it would preserve // consistency of thread oken state even in the face of catastrophic exceptions - RuntimeHelpers.PrepareConstrainedRegions(); - try { // The payload is entirely in the finally block @@ -635,11 +618,8 @@ namespace WPinternals } } - [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)] private void Reset() { - RuntimeHelpers.PrepareConstrainedRegions(); - try { // Payload is in the finally block diff --git a/WPinternals.csproj b/WPinternals.csproj index 478b911..213592f 100644 --- a/WPinternals.csproj +++ b/WPinternals.csproj @@ -1,21 +1,8 @@ - - - + - Debug - AnyCPU - {AED6DEB8-F54C-4B41-9655-793E7096AE6E} + net5.0-windows WinExe - Properties - WPinternals - WPinternals - v4.5 - 512 - {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - 4 false - - publish\ true Disk @@ -30,32 +17,20 @@ 1.0.0.%2a false true + false + true + true + false - AnyCPU - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 true - false - false + 1701;1702;CA1416 - AnyCPU - pdbonly - true - bin\Release\ - TRACE - prompt - 4 true - false true Heathcliff74.snk + 1701;1702;CA1416 WPinternals.ico @@ -63,1184 +38,280 @@ WPinternals.App - app.manifest true bin\Debug-CustomFlash\ - DEBUG;TRACE true - full - AnyCPU - prompt MinimumRecommendedRules.ruleset - false true bin\Debug-CustomFlash-930\ - DEBUG;TRACE true - full - AnyCPU - prompt MinimumRecommendedRules.ruleset - true - false true bin\Debug-Test\ - DEBUG;TRACE true - full - AnyCPU - prompt MinimumRecommendedRules.ruleset - false true bin\Debug-CustomFlash-950 %28no restart%29\ - DEBUG;TRACE true - full - AnyCPU - prompt MinimumRecommendedRules.ruleset - true - false true bin\Debug-ReadGPT\ - DEBUG;TRACE true - full - AnyCPU - prompt MinimumRecommendedRules.ruleset - true - false true bin\Debug-DumpFFU\ - DEBUG;TRACE true - full - AnyCPU - prompt MinimumRecommendedRules.ruleset - true - false true bin\Debug-TestProgrammer-930\ - DEBUG;TRACE true - full - AnyCPU - prompt MinimumRecommendedRules.ruleset - true - false true bin\Debug-FindFlashingProfile\ - DEBUG;TRACE true - full - AnyCPU - prompt MinimumRecommendedRules.ruleset - false true bin\Debug-DisableSecureBoot\ - DEBUG;TRACE true - full - AnyCPU - prompt MinimumRecommendedRules.ruleset - false true bin\Debug-FlashRaw\ - DEBUG;TRACE true - full - AnyCPU - prompt MinimumRecommendedRules.ruleset - true - false true bin\Debug-FindFlashingProfileNoRestart\ - DEBUG;TRACE true - full - AnyCPU - prompt MinimumRecommendedRules.ruleset - true - false true bin\Debug-DisableSecureBoot %28no restart%29\ - DEBUG;TRACE true - full - AnyCPU - prompt MinimumRecommendedRules.ruleset - true - false true bin\Debug-ClearNV\ - DEBUG;TRACE true - full - AnyCPU - prompt MinimumRecommendedRules.ruleset - true - false true bin\Debug-DumpUEFI\ - DEBUG;TRACE true - full - AnyCPU - prompt MinimumRecommendedRules.ruleset - true - false true bin\Debug-MSM\ - DEBUG;TRACE true - full - AnyCPU - prompt MinimumRecommendedRules.ruleset - true - false true bin\Debug-SwitchToMSM\ - DEBUG;TRACE true - full - AnyCPU - prompt MinimumRecommendedRules.ruleset - true - false true bin\Debug-UnlockBootloader\ - DEBUG;TRACE true - full - AnyCPU - prompt MinimumRecommendedRules.ruleset - false true bin\Debug-DLEmergency\ - DEBUG;TRACE true - full - AnyCPU - prompt MinimumRecommendedRules.ruleset - false true bin\Debug-ShowPhoneInfo\ - DEBUG;TRACE true - full - AnyCPU - prompt MinimumRecommendedRules.ruleset - false true bin\Debug-RelockPhone\ - DEBUG;TRACE true - full - AnyCPU - prompt MinimumRecommendedRules.ruleset - false true bin\Debug-EnableRootAccess\ - DEBUG;TRACE true - full - AnyCPU - prompt MinimumRecommendedRules.ruleset - false bin\Debug-TestProgrammer-950\ true - TRACE;DEBUG - true - full true - false true bin\Debug-EnableRootAccessOnImage\ - DEBUG;TRACE true - full - AnyCPU - prompt MinimumRecommendedRules.ruleset - false true bin\Debug-FixBoot\ - DEBUG;TRACE true - full - AnyCPU - prompt MinimumRecommendedRules.ruleset - false true bin\Debug-DLFFU\ - DEBUG;TRACE true - full - AnyCPU - prompt MinimumRecommendedRules.ruleset - false true bin\Debug-FlashFFU-RM1085\ - DEBUG;TRACE true - full - AnyCPU - prompt MinimumRecommendedRules.ruleset - false bin\Release-Test\ - TRACE true true - pdbonly - AnyCPU - prompt MinimumRecommendedRules.ruleset - false true bin\Debug-TestProgrammer-630\ - DEBUG;TRACE true - full - AnyCPU - prompt MinimumRecommendedRules.ruleset - false true bin\Debug-DLall\ - DEBUG;TRACE true - full - AnyCPU - prompt MinimumRecommendedRules.ruleset - false true bin\Debug-AddEmergency\ - DEBUG;TRACE true - full - AnyCPU - prompt MinimumRecommendedRules.ruleset - false true bin\Debug-TestProgrammer-640\ - DEBUG;TRACE true - full - AnyCPU - prompt MinimumRecommendedRules.ruleset - false true bin\Debug-FlashCustomRom-640\ - DEBUG;TRACE true - full - AnyCPU - prompt MinimumRecommendedRules.ruleset - false true bin\Debug-TestProgrammer-550\ - DEBUG;TRACE true - full - AnyCPU - prompt MinimumRecommendedRules.ruleset - false true bin\Debug-TestProgrammer-650\ - DEBUG;TRACE true - full - AnyCPU - prompt MinimumRecommendedRules.ruleset - false true bin\Debug-FlashFFU-RM1073\ - DEBUG;TRACE true - full - AnyCPU - prompt MinimumRecommendedRules.ruleset - false true bin\Debug-Help\ - DEBUG;TRACE true - full - AnyCPU - prompt MinimumRecommendedRules.ruleset - false - bin\Release\ TRACE;PREVIEW true true - pdbonly - AnyCPU - prompt MinimumRecommendedRules.ruleset true true bin\Debug-ShowFFU\ - DEBUG;TRACE true - full - AnyCPU - prompt MinimumRecommendedRules.ruleset - true - false true bin\Debug-BackupGPT\ - DEBUG;TRACE true - full - AnyCPU - prompt MinimumRecommendedRules.ruleset - false true bin\Debug-RestoreGPT\ - DEBUG;TRACE true - full - AnyCPU - prompt MinimumRecommendedRules.ruleset - false true bin\Debug-MergeGptXmlXml\ - DEBUG;TRACE true - full - AnyCPU - prompt MinimumRecommendedRules.ruleset - false true bin\Debug-MergeGptXmlZip\ - DEBUG;TRACE true - full - AnyCPU - prompt MinimumRecommendedRules.ruleset - false bin\Preview-Test\ TRACE;PREVIEW true true - pdbonly x64 - prompt MinimumRecommendedRules.ruleset - true - false Heathcliff74.snk - - False - packages\Newtonsoft.Json.9.0.1\lib\net45\Newtonsoft.Json.dll - - - - - - - - - - - - - - - 4.0 - - - - - - MSBuild:Compile - Designer - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - FilePickerControl.xaml - - - - - - - - - - - - - Code - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - About.xaml - - - - - BackupView.xaml - - - BootRestoreResourcesView.xaml - - - ContextView.xaml - - - DisclaimerAndNdaView.xaml - - - NokiaBootloaderView.xaml - - - NokiaModeBootloaderView.xaml - - - RegistrationView.xaml - - - DisclaimerView.xaml - - - DumpRomView.xaml - - - Empty.xaml - - - - - FlashResourcesView.xaml - - - FlashRomView.xaml - - - GettingStartedView.xaml - - - LumiaDownloadView.xaml - - - LumiaUndoRootTargetSelectionView.xaml - - - LumiaUnlockRootTargetSelectionView.xaml - - - MessageView.xaml - - - NokiaFlashView.xaml - - - NokiaLabelView.xaml - - - - NokiaMassStorageView.xaml - - - NokiaModeFlashView.xaml - - - - NokiaModeLabelView.xaml - - - - NokiaModeMassStorageView.xaml - - - - NokiaModeNormalView.xaml - - - - NokiaNormalView.xaml - - - - NotImplementedView.xaml - - - - BusyView.xaml - - - RestoreView.xaml - - - StartupWindow.xaml - - - - - - - - - - - - - - - - - - - - - - - - MSBuild:Compile - Designer - - - Designer - MSBuild:Compile - - - Designer - MSBuild:Compile - - - Designer - MSBuild:Compile - - - Designer - MSBuild:Compile - - - MSBuild:Compile - Designer - - - MSBuild:Compile - Designer - - - MSBuild:Compile - Designer - - - MSBuild:Compile - Designer - - - Designer - MSBuild:Compile - - - Designer - MSBuild:Compile - - - Designer - MSBuild:Compile - - - Designer - MSBuild:Compile - - - Designer - MSBuild:Compile - - - Designer - MSBuild:Compile - - - Designer - MSBuild:Compile - - - Designer - MSBuild:Compile - - - Designer - MSBuild:Compile - - - MSBuild:Compile - Designer - - - App.xaml - Code - - - MainWindow.xaml - Code - - - Designer - MSBuild:Compile - - - Designer - MSBuild:Compile - - - Designer - MSBuild:Compile - - - Designer - MSBuild:Compile - - - Designer - MSBuild:Compile - - - Designer - MSBuild:Compile - - - Designer - MSBuild:Compile - - - Designer - MSBuild:Compile - - - Designer - MSBuild:Compile - - - Designer - MSBuild:Compile - - - Designer - MSBuild:Compile - - - Designer - MSBuild:Compile - - - Designer - MSBuild:Compile - - - - - - Code - - - True - True - Resources.resx - - - True - Settings.settings - True - - - ResXFileCodeGenerator - Resources.Designer.cs - - - + Designer - - - - SettingsSingleFileGenerator - Settings.Designer.cs - @@ -1283,18 +354,17 @@ Designer - + + + + + + + "C:\Program Files\PsTools\pskill.exe" XDesProc.exe 2>nul 1>nul EXIT 0 - \ No newline at end of file From 759cb53f649bc9860e1a63fe1f7c4faf4af4c662 Mon Sep 17 00:00:00 2001 From: Gus Date: Mon, 8 Feb 2021 17:57:02 +0100 Subject: [PATCH 3/4] Project: Setup CI --- .github/workflows/ci.yml | 37 +++++++++++++++++++++++++++++++++++++ nuget.config | 11 +++++++++++ 2 files changed, 48 insertions(+) create mode 100644 .github/workflows/ci.yml create mode 100644 nuget.config diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..c830b3d --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,37 @@ +name: CI + +on: + push: + branches: [master] + pull_request: + branches: [master] + +jobs: + build: + runs-on: windows-latest + strategy: + matrix: + architecture: [x86, x64] + platform: [win] + steps: + - name: Checkout + uses: actions/checkout@v2 + + - name: Install .NET SDK + uses: actions/setup-dotnet@v1 + with: + dotnet-version: "5.0.101" + + - name: Add MSBuild to PATH + uses: microsoft/setup-msbuild@v1.0.2 + + - name: Build utilities + shell: pwsh + run: | + msbuild /m /t:restore,wpinternals:publish /p:Platform=${{ matrix.architecture }} /p:RuntimeIdentifier=${{ matrix.platform }}-${{ matrix.architecture }} /p:PublishDir=${{ github.workspace }}/artifacts/${{ matrix.platform }}-${{ matrix.architecture }} /p:PublishSingleFile=true /p:PublishTrimmed=true WPinternals.sln + + - name: Upload artifact + uses: actions/upload-artifact@v2 + with: + name: ${{ matrix.platform }}-${{ matrix.architecture }} + path: ${{ github.workspace }}/artifacts/${{ matrix.platform }}-${{ matrix.architecture }} diff --git a/nuget.config b/nuget.config new file mode 100644 index 0000000..efb6ffe --- /dev/null +++ b/nuget.config @@ -0,0 +1,11 @@ + + + + + + + + From f7ab5fa6f2ab968ea9ac0a6e7aebc14c65071951 Mon Sep 17 00:00:00 2001 From: Gus Date: Mon, 8 Feb 2021 18:13:29 +0100 Subject: [PATCH 4/4] Project: Fix CI --- WPinternals.csproj | 5 +- WPinternals.sln | 354 +++++++++++++++++++++++++++++++++------------ 2 files changed, 268 insertions(+), 91 deletions(-) diff --git a/WPinternals.csproj b/WPinternals.csproj index 213592f..57feac7 100644 --- a/WPinternals.csproj +++ b/WPinternals.csproj @@ -21,12 +21,13 @@ true true false + AnyCPU;x86;x64 - + true 1701;1702;CA1416 - + true true Heathcliff74.snk diff --git a/WPinternals.sln b/WPinternals.sln index 708833c..e458d9f 100644 --- a/WPinternals.sln +++ b/WPinternals.sln @@ -3,232 +3,408 @@ Microsoft Visual Studio Solution File, Format Version 12.00 # 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-793E7096AE6E}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WPinternals", "WPinternals.csproj", "{AED6DEB8-F54C-4B41-9655-793E7096AE6E}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU + Debug|x64 = Debug|x64 + Debug|x86 = Debug|x86 Debug-AddEmergency|Any CPU = Debug-AddEmergency|Any CPU + Debug-AddEmergency|x64 = Debug-AddEmergency|x64 + Debug-AddEmergency|x86 = Debug-AddEmergency|x86 Debug-BackupGPT|Any CPU = Debug-BackupGPT|Any CPU + Debug-BackupGPT|x64 = Debug-BackupGPT|x64 + Debug-BackupGPT|x86 = Debug-BackupGPT|x86 Debug-ClearNV|Any CPU = Debug-ClearNV|Any CPU + Debug-ClearNV|x64 = Debug-ClearNV|x64 + Debug-ClearNV|x86 = Debug-ClearNV|x86 Debug-CustomFlash-930|Any CPU = Debug-CustomFlash-930|Any CPU + Debug-CustomFlash-930|x64 = Debug-CustomFlash-930|x64 + Debug-CustomFlash-930|x86 = Debug-CustomFlash-930|x86 Debug-CustomFlash-950 (no restart)|Any CPU = Debug-CustomFlash-950 (no restart)|Any CPU + Debug-CustomFlash-950 (no restart)|x64 = Debug-CustomFlash-950 (no restart)|x64 + Debug-CustomFlash-950 (no restart)|x86 = Debug-CustomFlash-950 (no restart)|x86 Debug-CustomFlash-950|Any CPU = Debug-CustomFlash-950|Any CPU + Debug-CustomFlash-950|x64 = Debug-CustomFlash-950|x64 + Debug-CustomFlash-950|x86 = Debug-CustomFlash-950|x86 Debug-DLall|Any CPU = Debug-DLall|Any CPU + Debug-DLall|x64 = Debug-DLall|x64 + Debug-DLall|x86 = Debug-DLall|x86 Debug-DLEmergency|Any CPU = Debug-DLEmergency|Any CPU + Debug-DLEmergency|x64 = Debug-DLEmergency|x64 + Debug-DLEmergency|x86 = Debug-DLEmergency|x86 Debug-DLFFU|Any CPU = Debug-DLFFU|Any CPU + Debug-DLFFU|x64 = Debug-DLFFU|x64 + Debug-DLFFU|x86 = Debug-DLFFU|x86 Debug-DumpFFU|Any CPU = Debug-DumpFFU|Any CPU + Debug-DumpFFU|x64 = Debug-DumpFFU|x64 + Debug-DumpFFU|x86 = Debug-DumpFFU|x86 Debug-DumpUEFI|Any CPU = Debug-DumpUEFI|Any CPU + Debug-DumpUEFI|x64 = Debug-DumpUEFI|x64 + Debug-DumpUEFI|x86 = Debug-DumpUEFI|x86 Debug-EnableRootAccess|Any CPU = Debug-EnableRootAccess|Any CPU + Debug-EnableRootAccess|x64 = Debug-EnableRootAccess|x64 + Debug-EnableRootAccess|x86 = Debug-EnableRootAccess|x86 Debug-EnableRootAccessOnImage|Any CPU = Debug-EnableRootAccessOnImage|Any CPU + Debug-EnableRootAccessOnImage|x64 = Debug-EnableRootAccessOnImage|x64 + Debug-EnableRootAccessOnImage|x86 = Debug-EnableRootAccessOnImage|x86 Debug-EnableTestSigning (no restart)|Any CPU = Debug-EnableTestSigning (no restart)|Any CPU + Debug-EnableTestSigning (no restart)|x64 = Debug-EnableTestSigning (no restart)|x64 + Debug-EnableTestSigning (no restart)|x86 = Debug-EnableTestSigning (no restart)|x86 Debug-EnableTestSigning|Any CPU = Debug-EnableTestSigning|Any CPU + Debug-EnableTestSigning|x64 = Debug-EnableTestSigning|x64 + Debug-EnableTestSigning|x86 = Debug-EnableTestSigning|x86 Debug-FindFlashingProfile|Any CPU = Debug-FindFlashingProfile|Any CPU + Debug-FindFlashingProfile|x64 = Debug-FindFlashingProfile|x64 + Debug-FindFlashingProfile|x86 = Debug-FindFlashingProfile|x86 Debug-FindFlashingProfileNoRestart|Any CPU = Debug-FindFlashingProfileNoRestart|Any CPU + Debug-FindFlashingProfileNoRestart|x64 = Debug-FindFlashingProfileNoRestart|x64 + Debug-FindFlashingProfileNoRestart|x86 = Debug-FindFlashingProfileNoRestart|x86 Debug-FixBoot|Any CPU = Debug-FixBoot|Any CPU + Debug-FixBoot|x64 = Debug-FixBoot|x64 + Debug-FixBoot|x86 = Debug-FixBoot|x86 Debug-FlashCustomRom-640|Any CPU = Debug-FlashCustomRom-640|Any CPU + Debug-FlashCustomRom-640|x64 = Debug-FlashCustomRom-640|x64 + Debug-FlashCustomRom-640|x86 = Debug-FlashCustomRom-640|x86 Debug-FlashFFU-RM1073|Any CPU = Debug-FlashFFU-RM1073|Any CPU + Debug-FlashFFU-RM1073|x64 = Debug-FlashFFU-RM1073|x64 + Debug-FlashFFU-RM1073|x86 = Debug-FlashFFU-RM1073|x86 Debug-FlashFFU-RM1085|Any CPU = Debug-FlashFFU-RM1085|Any CPU + Debug-FlashFFU-RM1085|x64 = Debug-FlashFFU-RM1085|x64 + Debug-FlashFFU-RM1085|x86 = Debug-FlashFFU-RM1085|x86 Debug-FlashRaw|Any CPU = Debug-FlashRaw|Any CPU + Debug-FlashRaw|x64 = Debug-FlashRaw|x64 + Debug-FlashRaw|x86 = Debug-FlashRaw|x86 Debug-Help|Any CPU = Debug-Help|Any CPU + Debug-Help|x64 = Debug-Help|x64 + Debug-Help|x86 = Debug-Help|x86 Debug-MergeGptXmlXml|Any CPU = Debug-MergeGptXmlXml|Any CPU + Debug-MergeGptXmlXml|x64 = Debug-MergeGptXmlXml|x64 + Debug-MergeGptXmlXml|x86 = Debug-MergeGptXmlXml|x86 Debug-MergeGptXmlZip|Any CPU = Debug-MergeGptXmlZip|Any CPU + Debug-MergeGptXmlZip|x64 = Debug-MergeGptXmlZip|x64 + Debug-MergeGptXmlZip|x86 = Debug-MergeGptXmlZip|x86 Debug-MSM|Any CPU = Debug-MSM|Any CPU + Debug-MSM|x64 = Debug-MSM|x64 + Debug-MSM|x86 = Debug-MSM|x86 Debug-ReadGPT|Any CPU = Debug-ReadGPT|Any CPU + Debug-ReadGPT|x64 = Debug-ReadGPT|x64 + Debug-ReadGPT|x86 = Debug-ReadGPT|x86 Debug-RelockPhone|Any CPU = Debug-RelockPhone|Any CPU + Debug-RelockPhone|x64 = Debug-RelockPhone|x64 + Debug-RelockPhone|x86 = Debug-RelockPhone|x86 Debug-RestoreGPT|Any CPU = Debug-RestoreGPT|Any CPU + Debug-RestoreGPT|x64 = Debug-RestoreGPT|x64 + Debug-RestoreGPT|x86 = Debug-RestoreGPT|x86 Debug-ShowFFU|Any CPU = Debug-ShowFFU|Any CPU + Debug-ShowFFU|x64 = Debug-ShowFFU|x64 + Debug-ShowFFU|x86 = Debug-ShowFFU|x86 Debug-ShowPhoneInfo|Any CPU = Debug-ShowPhoneInfo|Any CPU + Debug-ShowPhoneInfo|x64 = Debug-ShowPhoneInfo|x64 + Debug-ShowPhoneInfo|x86 = Debug-ShowPhoneInfo|x86 Debug-Test|Any CPU = Debug-Test|Any CPU + Debug-Test|x64 = Debug-Test|x64 + Debug-Test|x86 = Debug-Test|x86 Debug-TestProgrammer-550|Any CPU = Debug-TestProgrammer-550|Any CPU + Debug-TestProgrammer-550|x64 = Debug-TestProgrammer-550|x64 + Debug-TestProgrammer-550|x86 = Debug-TestProgrammer-550|x86 Debug-TestProgrammer-630|Any CPU = Debug-TestProgrammer-630|Any CPU + Debug-TestProgrammer-630|x64 = Debug-TestProgrammer-630|x64 + Debug-TestProgrammer-630|x86 = Debug-TestProgrammer-630|x86 Debug-TestProgrammer-640|Any CPU = Debug-TestProgrammer-640|Any CPU + Debug-TestProgrammer-640|x64 = Debug-TestProgrammer-640|x64 + Debug-TestProgrammer-640|x86 = Debug-TestProgrammer-640|x86 Debug-TestProgrammer-650|Any CPU = Debug-TestProgrammer-650|Any CPU + Debug-TestProgrammer-650|x64 = Debug-TestProgrammer-650|x64 + Debug-TestProgrammer-650|x86 = Debug-TestProgrammer-650|x86 Debug-TestProgrammer-930|Any CPU = Debug-TestProgrammer-930|Any CPU + Debug-TestProgrammer-930|x64 = Debug-TestProgrammer-930|x64 + Debug-TestProgrammer-930|x86 = Debug-TestProgrammer-930|x86 Debug-TestProgrammer-950|Any CPU = Debug-TestProgrammer-950|Any CPU + Debug-TestProgrammer-950|x64 = Debug-TestProgrammer-950|x64 + Debug-TestProgrammer-950|x86 = Debug-TestProgrammer-950|x86 Debug-UnlockBootloader|Any CPU = Debug-UnlockBootloader|Any CPU + Debug-UnlockBootloader|x64 = Debug-UnlockBootloader|x64 + Debug-UnlockBootloader|x86 = Debug-UnlockBootloader|x86 Preview|Any CPU = Preview|Any CPU + Preview|x64 = Preview|x64 + Preview|x86 = Preview|x86 Preview-Test|Any CPU = Preview-Test|Any CPU + Preview-Test|x64 = Preview-Test|x64 + Preview-Test|x86 = Preview-Test|x86 Release|Any CPU = Release|Any CPU + Release|x64 = Release|x64 + Release|x86 = Release|x86 Release-Test|Any CPU = Release-Test|Any CPU + Release-Test|x64 = Release-Test|x64 + Release-Test|x86 = Release-Test|x86 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug|x64.ActiveCfg = Debug|x64 + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug|x64.Build.0 = Debug|x64 + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug|x86.ActiveCfg = Debug|x86 + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug|x86.Build.0 = Debug|x86 {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-AddEmergency|Any CPU.ActiveCfg = Debug|Any CPU {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-AddEmergency|Any CPU.Build.0 = Debug|Any CPU + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-AddEmergency|x64.ActiveCfg = Debug|x64 + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-AddEmergency|x64.Build.0 = Debug|x64 + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-AddEmergency|x86.ActiveCfg = Debug|x86 + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-AddEmergency|x86.Build.0 = Debug|x86 {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-BackupGPT|Any CPU.ActiveCfg = Debug|Any CPU {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-BackupGPT|Any CPU.Build.0 = Debug|Any CPU + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-BackupGPT|x64.ActiveCfg = Debug|x64 + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-BackupGPT|x64.Build.0 = Debug|x64 + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-BackupGPT|x86.ActiveCfg = Debug|x86 + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-BackupGPT|x86.Build.0 = Debug|x86 {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-ClearNV|Any CPU.ActiveCfg = Debug|Any CPU {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-ClearNV|Any CPU.Build.0 = Debug|Any CPU + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-ClearNV|x64.ActiveCfg = Debug|x64 + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-ClearNV|x64.Build.0 = Debug|x64 + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-ClearNV|x86.ActiveCfg = Debug|x86 + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-ClearNV|x86.Build.0 = Debug|x86 {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-CustomFlash-930|Any CPU.ActiveCfg = Debug|Any CPU {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-CustomFlash-930|Any CPU.Build.0 = Debug|Any CPU + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-CustomFlash-930|x64.ActiveCfg = Debug|x64 + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-CustomFlash-930|x64.Build.0 = Debug|x64 + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-CustomFlash-930|x86.ActiveCfg = Debug|x86 + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-CustomFlash-930|x86.Build.0 = Debug|x86 {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-CustomFlash-950 (no restart)|Any CPU.ActiveCfg = Debug|Any CPU {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-CustomFlash-950 (no restart)|Any CPU.Build.0 = Debug|Any CPU + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-CustomFlash-950 (no restart)|x64.ActiveCfg = Debug|x64 + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-CustomFlash-950 (no restart)|x64.Build.0 = Debug|x64 + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-CustomFlash-950 (no restart)|x86.ActiveCfg = Debug|x86 + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-CustomFlash-950 (no restart)|x86.Build.0 = Debug|x86 {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-CustomFlash-950|Any CPU.ActiveCfg = Debug|Any CPU {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-CustomFlash-950|Any CPU.Build.0 = Debug|Any CPU + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-CustomFlash-950|x64.ActiveCfg = Debug|x64 + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-CustomFlash-950|x64.Build.0 = Debug|x64 + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-CustomFlash-950|x86.ActiveCfg = Debug|x86 + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-CustomFlash-950|x86.Build.0 = Debug|x86 {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-DLall|Any CPU.ActiveCfg = Debug|Any CPU {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-DLall|Any CPU.Build.0 = Debug|Any CPU + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-DLall|x64.ActiveCfg = Debug|x64 + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-DLall|x64.Build.0 = Debug|x64 + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-DLall|x86.ActiveCfg = Debug|x86 + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-DLall|x86.Build.0 = Debug|x86 {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-DLEmergency|Any CPU.ActiveCfg = Debug|Any CPU {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-DLEmergency|Any CPU.Build.0 = Debug|Any CPU + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-DLEmergency|x64.ActiveCfg = Debug|x64 + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-DLEmergency|x64.Build.0 = Debug|x64 + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-DLEmergency|x86.ActiveCfg = Debug|x86 + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-DLEmergency|x86.Build.0 = Debug|x86 {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-DLFFU|Any CPU.ActiveCfg = Debug|Any CPU {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-DLFFU|Any CPU.Build.0 = Debug|Any CPU + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-DLFFU|x64.ActiveCfg = Debug|x64 + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-DLFFU|x64.Build.0 = Debug|x64 + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-DLFFU|x86.ActiveCfg = Debug|x86 + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-DLFFU|x86.Build.0 = Debug|x86 {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-DumpFFU|Any CPU.ActiveCfg = Debug|Any CPU {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-DumpFFU|Any CPU.Build.0 = Debug|Any CPU + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-DumpFFU|x64.ActiveCfg = Debug|x64 + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-DumpFFU|x64.Build.0 = Debug|x64 + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-DumpFFU|x86.ActiveCfg = Debug|x86 + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-DumpFFU|x86.Build.0 = Debug|x86 {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-DumpUEFI|Any CPU.ActiveCfg = Debug|Any CPU {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-DumpUEFI|Any CPU.Build.0 = Debug|Any CPU + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-DumpUEFI|x64.ActiveCfg = Debug|x64 + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-DumpUEFI|x64.Build.0 = Debug|x64 + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-DumpUEFI|x86.ActiveCfg = Debug|x86 + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-DumpUEFI|x86.Build.0 = Debug|x86 {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-EnableRootAccess|Any CPU.ActiveCfg = Debug|Any CPU {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-EnableRootAccess|Any CPU.Build.0 = Debug|Any CPU + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-EnableRootAccess|x64.ActiveCfg = Debug|x64 + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-EnableRootAccess|x64.Build.0 = Debug|x64 + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-EnableRootAccess|x86.ActiveCfg = Debug|x86 + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-EnableRootAccess|x86.Build.0 = Debug|x86 {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-EnableRootAccessOnImage|Any CPU.ActiveCfg = Debug|Any CPU {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-EnableRootAccessOnImage|Any CPU.Build.0 = Debug|Any CPU + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-EnableRootAccessOnImage|x64.ActiveCfg = Debug|x64 + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-EnableRootAccessOnImage|x64.Build.0 = Debug|x64 + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-EnableRootAccessOnImage|x86.ActiveCfg = Debug|x86 + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-EnableRootAccessOnImage|x86.Build.0 = Debug|x86 {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-EnableTestSigning (no restart)|Any CPU.ActiveCfg = Debug|Any CPU {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-EnableTestSigning (no restart)|Any CPU.Build.0 = Debug|Any CPU + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-EnableTestSigning (no restart)|x64.ActiveCfg = Debug|x64 + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-EnableTestSigning (no restart)|x64.Build.0 = Debug|x64 + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-EnableTestSigning (no restart)|x86.ActiveCfg = Debug|x86 + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-EnableTestSigning (no restart)|x86.Build.0 = Debug|x86 {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-EnableTestSigning|Any CPU.ActiveCfg = Debug|Any CPU {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-EnableTestSigning|Any CPU.Build.0 = Debug|Any CPU + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-EnableTestSigning|x64.ActiveCfg = Debug|x64 + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-EnableTestSigning|x64.Build.0 = Debug|x64 + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-EnableTestSigning|x86.ActiveCfg = Debug|x86 + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-EnableTestSigning|x86.Build.0 = Debug|x86 {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-FindFlashingProfile|Any CPU.ActiveCfg = Debug|Any CPU {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-FindFlashingProfile|Any CPU.Build.0 = Debug|Any CPU + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-FindFlashingProfile|x64.ActiveCfg = Debug|x64 + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-FindFlashingProfile|x64.Build.0 = Debug|x64 + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-FindFlashingProfile|x86.ActiveCfg = Debug|x86 + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-FindFlashingProfile|x86.Build.0 = Debug|x86 {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-FindFlashingProfileNoRestart|Any CPU.ActiveCfg = Debug|Any CPU {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-FindFlashingProfileNoRestart|Any CPU.Build.0 = Debug|Any CPU + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-FindFlashingProfileNoRestart|x64.ActiveCfg = Debug|x64 + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-FindFlashingProfileNoRestart|x64.Build.0 = Debug|x64 + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-FindFlashingProfileNoRestart|x86.ActiveCfg = Debug|x86 + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-FindFlashingProfileNoRestart|x86.Build.0 = Debug|x86 {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-FixBoot|Any CPU.ActiveCfg = Debug|Any CPU {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-FixBoot|Any CPU.Build.0 = Debug|Any CPU + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-FixBoot|x64.ActiveCfg = Debug|x64 + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-FixBoot|x64.Build.0 = Debug|x64 + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-FixBoot|x86.ActiveCfg = Debug|x86 + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-FixBoot|x86.Build.0 = Debug|x86 {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-FlashCustomRom-640|Any CPU.ActiveCfg = Debug|Any CPU {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-FlashCustomRom-640|Any CPU.Build.0 = Debug|Any CPU + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-FlashCustomRom-640|x64.ActiveCfg = Debug|x64 + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-FlashCustomRom-640|x64.Build.0 = Debug|x64 + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-FlashCustomRom-640|x86.ActiveCfg = Debug|x86 + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-FlashCustomRom-640|x86.Build.0 = Debug|x86 {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-FlashFFU-RM1073|Any CPU.ActiveCfg = Debug|Any CPU {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-FlashFFU-RM1073|Any CPU.Build.0 = Debug|Any CPU + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-FlashFFU-RM1073|x64.ActiveCfg = Debug|x64 + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-FlashFFU-RM1073|x64.Build.0 = Debug|x64 + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-FlashFFU-RM1073|x86.ActiveCfg = Debug|x86 + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-FlashFFU-RM1073|x86.Build.0 = Debug|x86 {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-FlashFFU-RM1085|Any CPU.ActiveCfg = Debug|Any CPU {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-FlashFFU-RM1085|Any CPU.Build.0 = Debug|Any CPU + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-FlashFFU-RM1085|x64.ActiveCfg = Debug|x64 + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-FlashFFU-RM1085|x64.Build.0 = Debug|x64 + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-FlashFFU-RM1085|x86.ActiveCfg = Debug|x86 + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-FlashFFU-RM1085|x86.Build.0 = Debug|x86 {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-FlashRaw|Any CPU.ActiveCfg = Debug|Any CPU {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-FlashRaw|Any CPU.Build.0 = Debug|Any CPU + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-FlashRaw|x64.ActiveCfg = Debug|x64 + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-FlashRaw|x64.Build.0 = Debug|x64 + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-FlashRaw|x86.ActiveCfg = Debug|x86 + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-FlashRaw|x86.Build.0 = Debug|x86 {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-Help|Any CPU.ActiveCfg = Debug|Any CPU {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-Help|Any CPU.Build.0 = Debug|Any CPU + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-Help|x64.ActiveCfg = Debug|x64 + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-Help|x64.Build.0 = Debug|x64 + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-Help|x86.ActiveCfg = Debug|x86 + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-Help|x86.Build.0 = Debug|x86 {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-MergeGptXmlXml|Any CPU.ActiveCfg = Debug|Any CPU {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-MergeGptXmlXml|Any CPU.Build.0 = Debug|Any CPU + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-MergeGptXmlXml|x64.ActiveCfg = Debug|x64 + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-MergeGptXmlXml|x64.Build.0 = Debug|x64 + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-MergeGptXmlXml|x86.ActiveCfg = Debug|x86 + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-MergeGptXmlXml|x86.Build.0 = Debug|x86 {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-MergeGptXmlZip|Any CPU.ActiveCfg = Debug|Any CPU {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-MergeGptXmlZip|Any CPU.Build.0 = Debug|Any CPU + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-MergeGptXmlZip|x64.ActiveCfg = Debug|x64 + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-MergeGptXmlZip|x64.Build.0 = Debug|x64 + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-MergeGptXmlZip|x86.ActiveCfg = Debug|x86 + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-MergeGptXmlZip|x86.Build.0 = Debug|x86 {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-MSM|Any CPU.ActiveCfg = Debug|Any CPU {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-MSM|Any CPU.Build.0 = Debug|Any CPU + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-MSM|x64.ActiveCfg = Debug|x64 + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-MSM|x64.Build.0 = Debug|x64 + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-MSM|x86.ActiveCfg = Debug|x86 + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-MSM|x86.Build.0 = Debug|x86 {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-ReadGPT|Any CPU.ActiveCfg = Debug|Any CPU {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-ReadGPT|Any CPU.Build.0 = Debug|Any CPU + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-ReadGPT|x64.ActiveCfg = Debug|x64 + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-ReadGPT|x64.Build.0 = Debug|x64 + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-ReadGPT|x86.ActiveCfg = Debug|x86 + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-ReadGPT|x86.Build.0 = Debug|x86 {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-RelockPhone|Any CPU.ActiveCfg = Debug|Any CPU {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-RelockPhone|Any CPU.Build.0 = Debug|Any CPU + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-RelockPhone|x64.ActiveCfg = Debug|x64 + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-RelockPhone|x64.Build.0 = Debug|x64 + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-RelockPhone|x86.ActiveCfg = Debug|x86 + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-RelockPhone|x86.Build.0 = Debug|x86 {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-RestoreGPT|Any CPU.ActiveCfg = Debug|Any CPU {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-RestoreGPT|Any CPU.Build.0 = Debug|Any CPU + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-RestoreGPT|x64.ActiveCfg = Debug|x64 + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-RestoreGPT|x64.Build.0 = Debug|x64 + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-RestoreGPT|x86.ActiveCfg = Debug|x86 + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-RestoreGPT|x86.Build.0 = Debug|x86 {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-ShowFFU|Any CPU.ActiveCfg = Debug|Any CPU {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-ShowFFU|Any CPU.Build.0 = Debug|Any CPU + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-ShowFFU|x64.ActiveCfg = Debug|x64 + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-ShowFFU|x64.Build.0 = Debug|x64 + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-ShowFFU|x86.ActiveCfg = Debug|x86 + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-ShowFFU|x86.Build.0 = Debug|x86 {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-ShowPhoneInfo|Any CPU.ActiveCfg = Debug|Any CPU {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-ShowPhoneInfo|Any CPU.Build.0 = Debug|Any CPU + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-ShowPhoneInfo|x64.ActiveCfg = Debug|x64 + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-ShowPhoneInfo|x64.Build.0 = Debug|x64 + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-ShowPhoneInfo|x86.ActiveCfg = Debug|x86 + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-ShowPhoneInfo|x86.Build.0 = Debug|x86 {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-Test|Any CPU.ActiveCfg = Debug-Test|Any CPU {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-Test|Any CPU.Build.0 = Debug-Test|Any CPU + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-Test|x64.ActiveCfg = Debug-Test|Any CPU + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-Test|x64.Build.0 = Debug-Test|Any CPU + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-Test|x86.ActiveCfg = Debug-Test|Any CPU + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-Test|x86.Build.0 = Debug-Test|Any CPU {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-TestProgrammer-550|Any CPU.ActiveCfg = Debug|Any CPU {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-TestProgrammer-550|Any CPU.Build.0 = Debug|Any CPU + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-TestProgrammer-550|x64.ActiveCfg = Debug|x64 + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-TestProgrammer-550|x64.Build.0 = Debug|x64 + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-TestProgrammer-550|x86.ActiveCfg = Debug|x86 + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-TestProgrammer-550|x86.Build.0 = Debug|x86 {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-TestProgrammer-630|Any CPU.ActiveCfg = Debug|Any CPU {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-TestProgrammer-630|Any CPU.Build.0 = Debug|Any CPU + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-TestProgrammer-630|x64.ActiveCfg = Debug|x64 + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-TestProgrammer-630|x64.Build.0 = Debug|x64 + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-TestProgrammer-630|x86.ActiveCfg = Debug|x86 + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-TestProgrammer-630|x86.Build.0 = Debug|x86 {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-TestProgrammer-640|Any CPU.ActiveCfg = Debug|Any CPU {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-TestProgrammer-640|Any CPU.Build.0 = Debug|Any CPU + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-TestProgrammer-640|x64.ActiveCfg = Debug|x64 + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-TestProgrammer-640|x64.Build.0 = Debug|x64 + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-TestProgrammer-640|x86.ActiveCfg = Debug|x86 + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-TestProgrammer-640|x86.Build.0 = Debug|x86 {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-TestProgrammer-650|Any CPU.ActiveCfg = Debug|Any CPU {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-TestProgrammer-650|Any CPU.Build.0 = Debug|Any CPU + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-TestProgrammer-650|x64.ActiveCfg = Debug|x64 + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-TestProgrammer-650|x64.Build.0 = Debug|x64 + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-TestProgrammer-650|x86.ActiveCfg = Debug|x86 + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-TestProgrammer-650|x86.Build.0 = Debug|x86 {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-TestProgrammer-930|Any CPU.ActiveCfg = Debug|Any CPU {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-TestProgrammer-930|Any CPU.Build.0 = Debug|Any CPU + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-TestProgrammer-930|x64.ActiveCfg = Debug|x64 + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-TestProgrammer-930|x64.Build.0 = Debug|x64 + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-TestProgrammer-930|x86.ActiveCfg = Debug|x86 + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-TestProgrammer-930|x86.Build.0 = Debug|x86 {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-TestProgrammer-950|Any CPU.ActiveCfg = Debug|Any CPU {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-TestProgrammer-950|Any CPU.Build.0 = Debug|Any CPU + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-TestProgrammer-950|x64.ActiveCfg = Debug|x64 + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-TestProgrammer-950|x64.Build.0 = Debug|x64 + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-TestProgrammer-950|x86.ActiveCfg = Debug|x86 + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-TestProgrammer-950|x86.Build.0 = Debug|x86 {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-UnlockBootloader|Any CPU.ActiveCfg = Debug|Any CPU {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-UnlockBootloader|Any CPU.Build.0 = Debug|Any CPU + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-UnlockBootloader|x64.ActiveCfg = Debug|x64 + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-UnlockBootloader|x64.Build.0 = Debug|x64 + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-UnlockBootloader|x86.ActiveCfg = Debug|x86 + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Debug-UnlockBootloader|x86.Build.0 = Debug|x86 {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Preview|Any CPU.ActiveCfg = Release|Any CPU {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Preview|Any CPU.Build.0 = Release|Any CPU + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Preview|x64.ActiveCfg = Release|x64 + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Preview|x64.Build.0 = Release|x64 + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Preview|x86.ActiveCfg = Release|x86 + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Preview|x86.Build.0 = Release|x86 {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Preview-Test|Any CPU.ActiveCfg = Release|Any CPU {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Preview-Test|Any CPU.Build.0 = Release|Any CPU + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Preview-Test|x64.ActiveCfg = Release|x64 + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Preview-Test|x64.Build.0 = Release|x64 + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Preview-Test|x86.ActiveCfg = Release|x86 + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Preview-Test|x86.Build.0 = Release|x86 {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Release|Any CPU.ActiveCfg = Release|Any CPU {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Release|Any CPU.Build.0 = Release|Any CPU + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Release|x64.ActiveCfg = Release|x64 + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Release|x64.Build.0 = Release|x64 + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Release|x86.ActiveCfg = Release|x86 + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Release|x86.Build.0 = Release|x86 {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Release-Test|Any CPU.ActiveCfg = Release|Any CPU {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Release-Test|Any CPU.Build.0 = Release|Any CPU - {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|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|Any CPU - {AED6DEB8-F54C-4B41-9655-793E7096AE6F}.Release-Test|Any CPU.Build.0 = Release|Any CPU + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Release-Test|x64.ActiveCfg = Release|x64 + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Release-Test|x64.Build.0 = Release|x64 + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Release-Test|x86.ActiveCfg = Release|x86 + {AED6DEB8-F54C-4B41-9655-793E7096AE6E}.Release-Test|x86.Build.0 = Release|x86 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE